2011-04-05 84 views
4

在我的產品表中,我有一個表示屬性集的字段。具有多個屬性的產品庫存

屬性集是屬性(大小,顏色等)的集合。

每個屬性有多個值,如藍色,綠色,紅色等

我怎麼會去存儲庫存信息產品有多個(和不固定的量)的屬性?

+0

我想我可以設置每3個屬性的限制屬性集,並使庫存表如下所示:(product_id,attribute1value,attribute2value,attribute3value,itemsinstock)。這可能是最簡單的選擇? – OMGKurtNilsen 2011-04-05 23:33:37

回答

1

我會建議,而不是打破NF1使用Entity Value Attribute模型。這也不是沒有問題。維基百科文章解釋了這一點,並且包括了替代方案,包括使用稀疏列或XML字符串。

0

你可以這樣做:

products 
-------- 
id 
name 

attributes 
---------- 
id 
name 
value 

product_attributes 
------------------ 
id 
product_id 
attribute_id 

或者

products 
-------- 
id 
name 

attributes 
---------- 
id 
name 

product_attributes 
------------------ 
id 
product_id 
attribute_id 
value 


SELECT * FROM products, 
(SELECT * FROM product_attributes LEFT JOIN products ON products.id = 
product_attributes.product_id) AS prod_attr 
LEFT JOIN attributes ON prod_attr.attribute_id = attributes.id 
+0

我爲你所描述的一切設置了表格。我正在尋找最佳解決方案,以便在產品具有多個屬性時跟蹤庫存。 – OMGKurtNilsen 2011-04-05 23:20:32

+0

也許你可以用一個例子來解釋一下嗎?該模式允許產品具有任意數量的屬性。 – Raisen 2011-04-05 23:24:58

+0

是的,但我想根據其屬性跟蹤產品的庫存。說5個綠色XL的T恤,7個藍色的小T恤。但是我不知道每個產品會擁有多少屬性。 – OMGKurtNilsen 2011-04-05 23:28:45

0

你可以得到產品之間的many-to-many關係,並通過引入「junction table」(這裏稱爲ProductAttribute)在關係數據庫屬性持有associative entities

Product <--one-to-many--> ProductAttribute <--many-to-one--> Attribute 
--------     ----------------      --------- 
PK: id      PK: id        PK: id 
    name     FK: product_id       name 
          FK: attribute_id 
相關問題