表结构替代在单个MySQL字段中存储数组

时间:2013-02-20 15:52:13

标签: php mysql database pdo

我目前正在使用PDO PHP和MySQL构建汽车预订系统,但我正在努力构建我的表格,以便用户可能已将其添加到预订中。

我目前有以下表格,使用reservation_table链接booking_id和car_id(取自他们各自的表格):

car_table:

ID     | car_make | car_name
1      | Ford     | Focus
2      | BMW      | Z3
3      | Audi     | A5

booking_table:

booking_ID  | booking_time | total_cost | etc..
125674      | 2013-02-02   | 91.55     
887463      | 2013-01-19   | 52.00     
209930      | 2013-01-11   | 23.99     

reservation_table:

ID     | booking_ID | car_ID
1      | 125674     | 2
2      | 887463     | 2
3      | 209930     | 1

extras_table:

ID     | car_extra     | extra_price
1      | GPS           | 22.99
2      | Baby Seat     | 12.99
3      | Car Charger   | 15.99

最初我打算使用所选汽车附加组件的数组在reservation_table中添加一个额外的列,以便将它们与预订链接起来,如下所示: booking_table:

ID     | booking_ID | car_ID | car_extras
1      | 125674     | 2      | [2,3]
2      | 887463     | 2      | [1]
3      | 209930     | 1      | [1,3]

但我读过这是不好的做法。如何构建我的表格,以便我可以将选定的汽车额外ID(范围从用户选择0到12)分配到特定预订?

以下工作是通过创建一个仅将booking_ID与extra_ID相关联的新表(这将意味着同一个预订ID的多行):

selected_extras_table:

ID     | booking_ID | car_extra_ID
1      | 125674     | 2
2      | 125674     | 3
3      | 887463     | 1
4      | 209930     | 1
5      | 209930     | 3

1 个答案:

答案 0 :(得分:1)

你是完全正确的:创建带有每行额外行的selected_extras_table是最好的解决方案。当您查询该表时,您将获得您感兴趣的任何booking_ID中的所有额外内容的列表,并且您不需要从单个字段中解析出多个值(例如,“[2,3]” )。让数据库保持值分开。你走在正确的轨道上。