2013-02-20 25 views
0

我目前正在使用PDO PHP和MySQL構建一個汽車預訂系統,但我正在努力構建我的表以滿足用戶可能添加到其預訂中的任何汽車附加功能。用於替代在單個MySQL字段中存儲陣列的表結構

我公司目前已在此刻它使用reservation_table與car_id的booking_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)分配給特定的預訂?

將被創建鏈接正好與extra_ID的booking_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

您的'selected_extras_table'是我建議的做法。如果每輛車只能有一輛可用的額外車輛,則可以取消代用鑰匙「ID」,並在「booking_ID」和「car_extra_ID」上有一個複合索引。 – Sammitch 2013-02-20 15:59:40

回答

1

你是完全正確:創建selected_extras_table每個額外的行是最好的解決方案。當您查詢該表格時,您將獲得所有您感興趣的booking_ID中的所有附加信息的列表,並且您不需要從單個字段解析出多個值(例如,「[2,3]」 )。讓數據庫保持獨立的值。你在正確的軌道上。

+0

完美,謝謝你的洞察力 – 2013-02-20 16:10:06

相關問題