产品属性的数据库模式

时间:2013-01-07 11:19:05

标签: mysql database-design

我想在类别中实现产品过滤,我对正确的数据库架构有疑问。 现在我有以下表格:

分类

1. id
2. category
3. description

产品

1. id
2. category_id
3. product
4. image
5. price

属性

1. id
2. attribute

Category_Attributes

1. category_id
2. attribute_id

我遇到的问题是我应该创建哪些表以及他们必须存储哪些列来存储不同类型的值,属性值,产品属性值等。

再创建3个表是否正常:

1. id
2. value

Attributes_Values

1. attribute_id
2. value_id

Products_Attributes_Values

1. product_id
2. attribute_id
3. value_id

我在最后几张桌子上搞砸了。存储和过滤哪个更好?

1 个答案:

答案 0 :(得分:9)

您要实现的目标是实体 - 属性 - 值(EAV)或可能是行建模解决方案。请注意,出于各种各样的原因,这种类型的结构在很大程度上是不受欢迎的。

但是,我认为(例如herehereherehere)EAV是邪恶的,除非它不是。其中一个罕见的例外是产品目录,您跟踪产品的属性以及这些属性不是那么有趣(到您的系统!),除非您需要检索这些并在产品网页或比较网格等上打印出来。

考虑这样的设计:

enter image description here

您在这样的模型中所做的是描述给定类别中的产品应该具有哪些属性,这些属性可能具有哪些值,然后每个特定产品对每个属性具有哪些值。

这种设计确实具有EAV强加的所有常见限制。但是,如果你想问这样的问题:“哪个珠子直径为8mm?”这很简单。