2011-09-30 32 views
0

我有2個表之間的結構關係,一個是含有項目和它們的性質,這是整數:MySQL的創建表

項目表:

item_id, property_a, property_b, property_c 

和另一個,單排表,其中包含這些屬性允許的偏差, 也是整數:

允許偏差表:

property_a, property_b, property_c 

這工作,但有2個表,因此沒有辦法之間沒有正式的關係,以確保他們在同步時,項目表以任何方式被修改(除手動照顧它還是應用水平)。

所以我的問題是 - 這種情況的最佳做法是什麼?這兩個表的結構可以並且應該在數據庫級別之間建立某種關係,還是這樣呢?

我的一個想法是,作爲偏差是一個單行表,只是把它放在桌子的項目,賦予其特定的虛擬物品,但我與所看到的問題是:

- 僞數據,不喜歡我目前爲止的清潔數據庫 - 使與查詢有關的查詢變得複雜 - 在一張表中混合蘋果和桔子 - 如果需要多組允許的偏差,很難擴展

回答

0

我想你需要在這裏做一些規範化。

你可以用下面的方法去:

項目表

id item 
1 item1 

item_property表

id item_id, property_id 
1  1   1 
2  1   2 
3  1   3 

允許偏差表

property_id, property_type 
1    a 
2    b 
3    c 

這將允許您在引用允許的偏差表和項目表本身的item_property表上設置FK約束。它還應該允許沒有所有屬性的項目(沒有空數據),並且它還應該允許您在新屬性出現時添加新屬性(例如屬性d)。

希望這會有所幫助!當你說「我的一個想法是,因爲偏差是單列表」,你的意思是「我的想法之一是,因爲偏差是一個單獨的表」?

+0

謝謝,是的,我的意思是排,編輯的問題。我不太確定我是否完全明白你的答案 - 偏差表將把屬性定義保存爲行,這是提議嗎?如果是這樣,它的缺點是,如果需要另一組偏差,這將需要一個新的列,這可能不是組織數據的最佳做法。 – CodeVirtuoso

+0

是的。這個想法是將屬性定義保存爲行。我的想法是,如果存在另一組允許的偏差(例如d,e和f),則這意味着將3個新行插入到偏差表中,並且item_property表中將填充新的一組偏差適用的項目。它不應該要求添加新列。希望是有道理的! –