9

我是数据库设计的新手。cms的产品属性数据库设计有什么更好的选择?(也请提出其他选择)。

选项 1:1 表

products{
id
product_name
color
price
attribute_name1
attribute_value1
attribute_name2
attribute_value2
attribute_name3
attribute_value3
}

选项 2:3 张桌子

products{
id
product_name
color
price
}

attribute{
id
name
value
}

products_attribute{
products_id
attribute_id
}
4

4 回答 4

30

您在数据库设计中犯了一个常见错误,将名称存储在一列中,将值存储在另一列中。这不是关系数据库设计。

每个属性都应以列名命名。颜色、页面、衬衫尺寸、发布日期,应该是列名

如果每种产品类型都有一组不同的属性,那么还有其他解决方案。请参阅我对以下内容的回答:

另外,阅读以下故事:Bad CarRMa:在您实施围绕名称-值对设计的数据库之前介绍 Vision 。

于 2010-05-31T17:41:31.323 回答
4

我认为您可以获得的产品属性的最佳实现是

Product_Tbl [
    ID
    Name
    more columns
]

Attribute_Tbl [
   ID
   Att_Name
]

Product_Attribute_Tbl [
    Product_ID
    Attribute_ID
    Value
]

如果您的产品没有相同的属性,您可以使用此结构

于 2011-10-18T18:09:19.440 回答
1

这取决于您想从数据库中获得什么。如果您所有的产品都属于同一类型并具有相同的属性,那么您只需要执行以下操作:

产品{id:整数,产品名称:字符串,颜色:字符串,属性名称1:字符串,属性名称2:字符串...}。Attribute_name{} 应该是一个有意义的词,就像“颜色”(它也是一个属性)一样。

于 2010-05-31T17:32:48.813 回答
0

这是一个古老的话题,但考虑一下它是如何演变的可能会很有趣(尤其是处理速度更快意味着性能有时可以赌博)。

您是否考虑过将每个属性作为单独的项目存储在表中......让我们说表“2”,其中返回产品的键将是一个 id:

    Product (table 1)
{
    Product ID
    Product Name
}

    Tags (table 2)
{
    Tag ID
    Higher Level tag ID
    Description
    Value
    Product ID
}

并且该表还将包含一个名为“更高级别”的字段,因此您可以在此表中找到该属性的唯一 ID,该属性被创建为该特定产品的更高级别。这样你就有了一种叫做“全方位标记”的东西。

希望这可以帮助

于 2017-01-21T13:07:29.883 回答