为单个记录存储许多属性

时间:2011-12-12 04:39:12

标签: mysql ruby-on-rails

我有一个名为product的模型和表。每个产品都有大约100个属性。每个属性都是一个字符串。我应该简单地将所有这些属性添加到产品表中吗?或者更好的是创建几个子模型并通过has_many / belongs_to关联访问它们?我计划有一个页面来加载所有这些属性。我将是唯一设置这些属性的人。还有其他方法可以考虑这样做吗?也许我可以将所有内容保存到单个文本数据类型行中,并以某种方式将其格式化,甚至只需将其全部写入常规HTML中。

2 个答案:

答案 0 :(得分:0)

我想建议以下设计。

Attribute Table -- AttributeId (primary key), AttributeName
Product Table   -- ProductId   (primary key), 
                   other product related informations(except attributes).
ProductAttribute Table -- ProductId(foreign key), AttributeId(foreign key)

如果每个产品的每个属性都有不同的值,那么您可以考虑这样的ProductAttribute表:

ProductAttribute Table -- ProductId(foreign key), AttributeId(foreign key), 
                          AttributeValue

修改

您不需要制作100张桌子。根据我的概念你需要3张桌子。现在,Attribute表将有100行,每个属性一个。假设您有5个属性a1, a2, a3, a4, a5和两个产品p1,p2。然后,表格将如下所示:

Attribute
---------

AttributeId | AttributeName
---------------------------
1           | a1
2           | a2
3           | a3
4           | a4
5           | a5


Product
-------

ProductId | ProductName
-----------------------
1         | p1
2         | p2


ProductAttribute
----------------

ProductId | AttributeId | Value
--------------------------------
1         | 1           | value1
1         | 2           | value2
1         | 3           | value3
1         | 4           | value4
1         | 5           | value5
1         | 1           | value6
1         | 2           | value7
1         | 3           | value8

答案 1 :(得分:0)

XML是最好的答案。您仍然可以为每一行提供不同的属性。 并且数据将在单个查询中提供。