如何在MySQL中设计这种数据库结构?

如何在MySQL中设计这种数据库结构?,mysql,sql,database,database-design,relational-database,Mysql,Sql,Database,Database Design,Relational Database,我现在被困在如何实现更复杂(至少对我来说)的数据库结构上,在我看来,它就像一个表中的动态列数 我需要的是为一个穿梭机模块创建一个SQL表,该模块将存储许多穿梭机,每个穿梭机都有不同数量的座位,每个座位的价格也应该不同 例如: 一排:有8个座位的穿梭机,座位1=20美元,座位2=15美元,座位3=13美元。。。座位#8=7美元。 一排:有16个座位的穿梭机,座位1=25美元,座位2=22美元,座位3=20美元。。。座位#16=15美元 该解决方案应处理不同类型的穿梭机,一个有8个座位,一个有16个

我现在被困在如何实现更复杂(至少对我来说)的数据库结构上,在我看来,它就像一个表中的动态列数

我需要的是为一个穿梭机模块创建一个SQL表,该模块将存储许多穿梭机,每个穿梭机都有不同数量的座位,每个座位的价格也应该不同

例如:
一排:有8个座位的穿梭机,座位1=20美元,座位2=15美元,座位3=13美元。。。座位#8=7美元。
一排:有16个座位的穿梭机,座位1=25美元,座位2=22美元,座位3=20美元。。。座位#16=15美元

该解决方案应处理不同类型的穿梭机,一个有8个座位,一个有16个座位或任何其他数量的座位取决于管理员希望添加的座位数量

现在,我考虑了一些方法,我认为这两种方法都不够好

一,。我的第一个想法是创建一个最多有16列座位的表,所有的都可以为NULL,然后管理员插入新的穿梭机,其中包含所需的座位数,其余的都将为NULL。我觉得这真是个坏主意。 如果管理员想要增加超过16个席位,那么我们忽略这个情况,这是一个巨大的缺点,这就是表格的外观:

Table: shuttle
Columns: id, name, num_of_seats, seat_1_price, seat_2_price, seat_3_price..., seat_16_price
table: shuttles
columns: id, name, num_of_seats
row: 2, Florida Shuttle, 8

table 2: shuttle_seats_price
columns: id, shuttle_id, seat_number, seat_price
row: 1, 2, 1, 20
row: 1, 2, 2, 15
row: 1, 2, 3, 13
row: 1, 2, 4, 11
...
row: 1, 2, 8, 5
那么此表中的一行可能如下所示:

1, Florida Shuttle, 8, 20, 15, 10, 8..., 5, NULL, NULL, NULL
我100%确信这种方法是错误的

二,。我的第二个想法是创建两个表,一个用来存储穿梭机细节的表将被称为“穿梭机”,另一个用来存储穿梭机的座位价格关系,例如:

table: shuttles
columns: id, name, num_of_seats

table2: shuttle_seats_price
columns: id, shuttle_id, seat_number, seat_price
此结构中的典型条目如下所示:

Table: shuttle
Columns: id, name, num_of_seats, seat_1_price, seat_2_price, seat_3_price..., seat_16_price
table: shuttles
columns: id, name, num_of_seats
row: 2, Florida Shuttle, 8

table 2: shuttle_seats_price
columns: id, shuttle_id, seat_number, seat_price
row: 1, 2, 1, 20
row: 1, 2, 2, 15
row: 1, 2, 3, 13
row: 1, 2, 4, 11
...
row: 1, 2, 8, 5
最后,我需要创建一个解决方案来存储不同的航天飞机,每个座位的座位数量不可预测,每个座位的价格值不同,一个表对我来说似乎不是正确的解决方案,因为在我看来,创建100列,每个座位的每列,并开始使用空值对其进行膨胀不是一个好方法


提前谢谢!我希望我问得很清楚

我将创建两个表:穿梭机和座椅

你可以这样读,一个穿梭机可以有多个座位,但一个座位只能连接到一个穿梭机

因此,您创建了一个穿梭机,并将您想要的座位数量添加到其中

我已经制作了一个UML图,这样您就可以自己查看了

编辑:调整图片

EDIT2:同时从航天飞机上删除“RowId”属性,这是我的错误

EDIT3:而且#座位也不是真正需要的。例如,如果您需要ID为3的穿梭机的座位数,您只需执行以下操作:

SELECT COUNT(*) FROM seats WHERE shuttle_id = '3';

此查询的结果将是该穿梭机中的座位数量。

由编号
SHTNUM
标识的穿梭机具有最大
MAX\u SEATNUM
座位

对于每个航天飞机,该航天飞机最多只能有一个座位; 多个航天飞机可以拥有相同的最大座位数


|航天飞机
SHTNUM
的座位号
SEATNUM
价格为
美元

对于每个穿梭机,该穿梭机有多个座位号

对于每个座位号,该号码可能存在于多个穿梭机中

每个座位由SHTNUM、SEATNUM组合标识

每个座位都有一个价格,对于每个价格,可能不止一个座位有这个价格

对于每个穿梭机中的每个座位号,该座位号大于0

对于每个穿梭机中的每个座位号,该座位号小于或等于该穿梭机的MAX_SEATNUM



数据库是信息的存储库,而不是计算引擎。用SQL以外的编程语言完成任务。请给出更详细的答案?目前,我需要的数据被存储在某个地方,这个数据是动态的,管理员正在创建几个航天飞机,每个航天飞机都有不同数量的座位和不同的价格,用户可以选择他想要的航天飞机。。。没有办法实现它?在发生更改时将其存储在数据库中。每次你想要一个穿梭机,加载整个数据集,用PHP(或Java或VB或…)咀嚼它,然后给出答案。好的,用SQL也可以。但是我宁愿用其他语言编程,而不是SQL。好的,谢谢你的回答,让我看看我是否理解你的建议,只为航天飞机创建一个表,添加一个名为seats_prices的列,并以逗号分隔的格式存储?像这样:20,15,13,10?然后考虑价格,做一些PHP,然后用这种方式编程?这是一个好方法吗?顺便问一下,如何在SQL中实现它?你将如何创造这样的东西?因为我以前也遇到过类似的问题,创建一个列数未知的表,因为在本例中,有时需要为多个座位创建更多的列。
-- You will need to implement this constraint 
-- in the application code or using triggers.