2012-05-09 22 views
2

我正在使用一個表格來存儲同一個表格中的所有餐廳數據。 有用於容納area_idarea_nameMySql:在同一個表中映射表或所有數據?

有六個字段,它是問題源我區一個單獨的表。 它們是:

delivery_area_1 , delivery_area_2, delivery_area_3 
minimum_order_1, minimum_order_2 and minimum_order_3 

delivery_area_1字段包含一個昏迷(「」)分開的所有area_id的其中餐廳提供以最小順序1等用於遞送區域2和3

的列表

當用戶搜索area_id並且結果包含所有在該area_id中提供的餐館時,相應的最小訂單將與結果一起顯示以及其他詳細信息。

我提出對本交付區域數據移動到單獨的映射表將包含:

restaurant_id, area_id and the minimum order

但是這樣做會導致映射表中的條目數量超過20,000,000餐館的1000,000。目前有1000家餐廳,但從現在起數量將迅速增加。每家餐廳都提供約30-80個區域。

這是一個很好的舉措嗎?這將是一個重大決定。所以請幫助我的方法。

有沒有更好的方法來簡化和優化搜索?

它是一個PHP網站。

+0

規範化你的數據結構和存儲您的逗號分隔的列表作爲另一個表中的相關記錄。 – eggyal

回答

2

簡而言之:,改變(這稱爲database normalization)。

只有3列的表中有100萬行並不是什麼大不了的事。你可以選擇添加兩個表,而不是一個:

minimum_order (restaurant_id, minimum_order_id, amount) 

delivery_area (restaurant_id, area_id, minimum_order_id) 

這會給你的優點是一組方面的變化,只是量量在minimum_order需要被更新,而不是多行(每個區域一個)minimum_order

+0

很棒...一步之外,更好地管理和更新數據..!謝謝oezi! –

+0

不客氣。如果這解決了您的問題,請考慮通過點擊它左側的勾號來接受它(也可能是投票)。 – oezi

+0

早些時候我沒有足夠的積分投票答案...現在我有! –

0

這絕對是一個好的舉措。對數據庫進行解規一化以減少行數是不可取的。這樣做會有幾個不利之處。看起來你目前正在存儲Area Id逗號分隔。在這種情況下,按區域ID搜索時無法使用索引。或者,您可能已對delivery_area_1,delivery_area_2,delivery_area_3字段使用了「全文索引」。

如果行數增加,那麼您可以嘗試分區技術。

請參閱http://dev.mysql.com/tech-resources/articles/partitioning.html

相關問題