2012-08-28 53 views
0

我們添加了允許產品構建的功能。例如,用戶可以配置可以是普通值(高度,顏色等)或現有產品(可以選擇一件傢俱的旋鈕)的不同屬性。產品構建器的SQL DB設計

我正在構建數據庫設計,並且正在尋找建議。我想到的是以下內容。

產品 - 現有產品表例如:產品A

ParentProducts - idParentProduct 例如:產品B

ParentProduct_Attributes - idParentProduct,idAttribute,類型(產品/值)防爆:高度,旋鈕

ParentProduct_Attribute_Values - idAttribute,idValue,價值實施例:10"

ParentProduct_Attribute_ChildProducts - idAttribute,idChildProduct,類型(註冊。產品/兒童用品)例:ChildProductA,產品A

ChildProducts - idChildProduct

這似乎只是很多步驟來獲得實際的屬性值。

例如,我有一件傢俱ProductB。 ProductB具有高度和旋鈕。高度的選擇是10「,12」(值),旋鈕的選項是ChildProductA,ProductA(產品) - 每個都來自不同的表格。 ChildProductA是一個子產品,而ProductA是一個常規產品,同樣是兩個單獨的表。

對此的任何輸入?不同的想法?

希望我很清楚。

謝謝。

+0

每個產品是否存在明確的層次「深度」?換句話說,每個孩子是否屬於一個家長,或者兒童產品是否有其他孩子? – TelJanini

+0

現在讓我們假設只有一個級別 - 產品不能有大孩子。 – Rivka

回答

0

我建議以下結構:

Products - idProduct, type (Regular/Parent/Child) 
Product_Attributes - idAttribute, idProduct 
Product_Attributes_Values - idValue, idAttribute, value, idProduct 

這樣你只剩下3桌。 Product_Attributes_Values表的字段爲valueidProduct,它們都是NULL -able。如果設置了value,那麼它是一個簡單的值。如果設置了idProduct,那麼它是一個產品,它應該是Products的外鍵。

Regular,Parent和Child產品之間的類型區分是通過Products中的type字段進行的。如果需要,您可以在數據庫之外的應用程序中進行額外的檢查和/或驗證。

0
ParentProduct_Attributes - idParentProduct, idAttribute, Type (Product/Value) Ex: Height, Knob 

ParentProduct_Attribute_Values - idAttribute, idValue, Value Ex: 10" 

而不是爲值(ParentProduct_Attribute_Values)創建單獨的表,它應該在一個表中。非規範化有助於在某種情況下加快查詢速度。因爲每個查詢都會減少一個連接選擇值表。