产品属性的数据库模式

UAM*_*oto 6 mysql database-design

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

分类:

1. id
2. category
3. description
Run Code Online (Sandbox Code Playgroud)

产品:

1. id
2. category_id
3. product
4. image
5. price
Run Code Online (Sandbox Code Playgroud)

属性:

1. id
2. attribute
Run Code Online (Sandbox Code Playgroud)

Category_Attributes:

1. category_id
2. attribute_id
Run Code Online (Sandbox Code Playgroud)

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

创建3个表是否正常:

价值观:

1. id
2. value
Run Code Online (Sandbox Code Playgroud)

Attributes_Values:

1. attribute_id
2. value_id
Run Code Online (Sandbox Code Playgroud)

Products_Attributes_Values:

1. product_id
2. attribute_id
3. value_id
Run Code Online (Sandbox Code Playgroud)

我在最后几桌搞砸了.存储和过滤哪个更好?

Joe*_*own 10

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

但是,我已经争论(例如,这里,这里,这里这里)EAV是EVIL,除非它不是.其中一个例外情况是,在产品目录中,您跟踪产品的属性以及这些属性不是那么有趣(对您的系统而言!),除非您需要检索这些属性并将其打印出来.产品网页或比较网格等

考虑这样的设计:

在此输入图像描述

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

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