Php 表结构,用于替代在单个MySQL字段中存储数组
我目前正在使用PDO PHP和MySQL构建一个汽车预订系统,但我正在努力为用户可能添加到预订中的任何额外汽车构建我的表 目前,我有以下表格,它们使用预订表格将预订id与汽车id链接(取自各自的表格): 车表:Php 表结构,用于替代在单个MySQL字段中存储数组,php,mysql,database,pdo,Php,Mysql,Database,Pdo,我目前正在使用PDO PHP和MySQL构建一个汽车预订系统,但我正在努力为用户可能添加到预订中的任何额外汽车构建我的表 目前,我有以下表格,它们使用预订表格将预订id与汽车id链接(取自各自的表格): 车表: ID | car_make | car_name 1 | Ford | Focus 2 | BMW | Z3 3 | Audi | A5 预订表: booking_ID | booking_time | total_co
ID | car_make | car_name
1 | Ford | Focus
2 | BMW | Z3
3 | Audi | A5
预订表:
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
ID | booking_ID | car_ID | car_extras
1 | 125674 | 2 | [2,3]
2 | 887463 | 2 | [1]
3 | 209930 | 1 | [1,3]
预订表:
ID | booking_ID | car_ID
1 | 125674 | 2
2 | 887463 | 2
3 | 209930 | 1
附加表格:
ID | car_extra | extra_price
1 | GPS | 22.99
2 | Baby Seat | 12.99
3 | Car Charger | 15.99
ID | booking_ID | car_extra_ID
1 | 125674 | 2
2 | 125674 | 3
3 | 887463 | 1
4 | 209930 | 1
5 | 209930 | 3
最初,我打算在预订表中添加一个额外的列,使用所选的额外车辆数组将其与预订链接,如下所示:
预订表:
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
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链接(这意味着相同booking ID的多行),以下操作是否有效:
所选的附加表:
ID | car_extra | extra_price
1 | GPS | 22.99
2 | Baby Seat | 12.99
3 | Car Charger | 15.99
ID | booking_ID | car_extra_ID
1 | 125674 | 2
2 | 125674 | 3
3 | 887463 | 1
4 | 209930 | 1
5 | 209930 | 3
您完全正确:使用每额外一行创建所选的_extras_表是最好的解决方案。当您查询该表时,您将得到您感兴趣的任何预订ID中的所有附加值的列表,并且您不需要从单个字段中解析出多个值(例如“[2,3]”)。让数据库将这些值分开。您走对了。我建议您使用您的
选择的\u extras\u表。如果每辆车只能有一个可用的备用钥匙,您可以取消代理钥匙ID
,并在booking\u ID
和car\u extra\u ID
上建立一个综合索引。