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

时间:2016-07-19 13:20:34

标签: 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个或任何其他数量的座位取决于管理员希望添加的座位数。

现在,我想到了一些方法,我认为两者都不够好。

1。我的第一个想法是为座位创建一个最多16列的表,所有这些都是NULLable,然后管理员插入需要多少座位的新班车,其余的将为NULL。我觉得这是一个非常糟糕的主意。 如果管理员想要添加超过16个席位,这是一个巨大的缺点,让我们忽略这种情况,这就是表格的样子:

Table: shuttle
Columns: id, name, num_of_seats, seat_1_price, seat_2_price, seat_3_price..., seat_16_price

然后此表中的一行可能如下所示:

1, Florida Shuttle, 8, 20, 15, 10, 8..., 5, NULL, NULL, NULL

我100%确定这种方法是错误的。

2。我的第二个想法是创建2个表,一个存储穿梭细节将被称为“穿梭机”,第二个存储shuttle_seats_price关系,例如:

table: shuttles
columns: id, name, num_of_seats

table2: shuttle_seats_price
columns: id, shuttle_id, seat_number, seat_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列的好方法,每个列的每列都开始用NULL值充气。

提前致谢!我希望我说得很清楚!

2 个答案:

答案 0 :(得分:1)

我会创建2个表:Shuttle和Seat。

你这样看,班车可以有多个座位,但座位只能连接1个班车。

所以你创建一个班车,并添加你想要的座位数量。

我已制作了UML图表,您可以自己查看

enter image description here

编辑:调整图片

EDIT2:同时删除" RowId"航天飞机的属性,这是我的错误。

EDIT3:#seats也不是真的需要。例如,如果您想要ID为3的班车座位数,您可以这样做:

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

此查询的结果将是该班车中的座位数量。

答案 1 :(得分:0)

| 按号码mxConstants.DEFAULT_MARKERSIZE标识的班车有最多SHTNUM个席位。

对于每个班车,该班车只有一个最大座位数; 多个班车可以拥有相同的最大座位数。

MAX_SEATNUM


| Shuttle Shuttle {SHTNUM, MAX_SEATNUM} KEY {SHTNUM} 座位号SHTNUM的价格为SEATNUM美元。

对于每个班车,该班车有多个座位号。

对于每个座位号,该号码可能存在于多个班车中。

每个座位都由SHTNUM,SEATNUM的组合识别。

每个座位只有一个价格,每个价格可能有多个座位有这个价格。

对于每个班车中的每个座位号,该座位号都大于0.

PRICE

对于每个班车中的每个座位号,该座位号小于或等于该班车的MAX_SEATNUM。

ShuttleSeat {SHTNUM, SEATNUM, PRICE}
        KEY {SHTNUM, SEATNUM}
FOREIGN KEY {SHTNUM} REFERENCES Shuttle {SHTNUM}

CHECK SEATNUM > 0

enter image description here