具有多个属性的产品库存

时间:2011-04-05 23:03:08

标签: php mysql sql

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

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

每个属性都有几个值,如蓝色,绿色,红色等。

如何存储具有多个(而非固定数量)属性的产品的库存信息?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:0)

通过引入“many-to-many”(此处称为ProductAttribute)来保存junction table,您可以在关系数据库中获得产品和属性之间的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