2015-10-21 55 views
2

我對錶格的正確設計有疑問。比方說,我有一張名爲漢堡包的表,這個漢堡可以有很多調味品,比如奶酪,番茄醬等。我想把這些信息放在一組表格中。每種調味品必須放在自己的桌子上,因爲每種調味品都有不同的列。多表格的數據庫設計

以下是我有:

漢堡 - (ham_id,標題等)

ham_condiments(ham_id,condiment_id,parent_condiment_id,condiment_type)

奶酪(cheese_id,姓名,奶酪具體列)

肉(meat_id,名稱,一些牛肉特定的列)

梅奧(mayo_id,名稱,一些特定的蛋黃醬列)

因此,ham_condiments顯示的是漢堡表中的一對多,而且在ham_condiments表的condiment_id列中使用了mayo_id,meat_id和cheese_id。

所有這些的原因是parent_condiment_id會顯示漢堡包中調味品的正確順序。

所以,如果你想看到所有的佐料上一個漢堡包,你會:

select ham.title, c.name, m.name, mo.name, condiment_type 
hamburger ham, 
ham_condiments hc, 
cheese c, 
meat m, 
mayo mo 
where 
ham.ham_id = hc.ham_id and 
hc.condiment_id = c.cheese_id and 
hc.condiment_id = m.meat_id and 
hc.condiment_id = mo.mayo_id 
order by hc.parent_condiment_id 

(parent_condiment_id可能只是用1,2,3,4開始以及值的排序順序列)

我只是想過這裏嗎?我基本上增加了另一張桌子,以保持漢堡包內調味品的順序,但我很難將它們放在一起。謝謝你的幫助。

回答

1

首先,您要了解Type/SubType數據庫模式 - 在這些主題上搜索SO答案,或者在線獲取詳細文章。下面是我貼兩個這樣的問題,在過去的:

Foreign Key Referencing Multiple Tables

Derived concepts - database design considerations

總的想法是,你有一個「主」表,定義所有可能的調味品,那麼你有另一個表中的每個調味品類型,其中每個作爲「主調味品」表作爲其父母。細節很微妙,實施可能會很棘手。

其次,你描述爲「parent_condiment_id」聽起來更像是「調味品訂單」,這是漢堡包和調味品之間連接的一個屬性。 (或者它實際上是否引用另一個表?)

+0

感謝您的快速響應。你是對的,parent_condiment_id應該只是調味品。我正試圖將太多的東西推到子表上,你又是對的。我只需要將flow_condiments表格作爲主調用來爲每個調味品細節保存具有子表格的調味品的基本信息。再次感謝菲利普。 – EricW