具有多个属性的产品库存

问题描述:

在我的产品表中,我有一个表示属性集的字段。具有多个属性的产品库存

属性集是属性(大小,颜色等)的集合。

每个属性有多个值,如蓝色,绿色,红色等

我怎么会去存储库存信息产品有多个(和不固定的量)的属性?

+0

我想我可以设置每3个属性的限制属性集,并使库存表如下所示:(product_id,attribute1value,attribute2value,attribute3value,itemsinstock)。这可能是最简单的选择? – OMGKurtNilsen 2011-04-05 23:33:37

我会建议,而不是打破NF1使用Entity Value Attribute模型。这也不是没有问题。维基百科文章解释了这一点,并且包括了替代方案,包括使用稀疏列或XML字符串。

你可以这样做:

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

你可以得到产品之间的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