7

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

分类

1. id
2. category
3. description

产品

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

属性

1. id
2. attribute

类别属性

1. category_id
2. attribute_id

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

再创建3个表是否正常:

价值观

1. id
2. value

属性值

1. attribute_id
2. value_id

Products_Attributes_Values

1. product_id
2. attribute_id
3. value_id

我在最后几张桌子上搞砸了。什么会更好地存储和过滤?

4

1 回答 1

13

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

但是,我曾争论过(例如, herehereherehere)EAV 是邪恶的,除非它不是。这些罕见的例外之一是在产品目录的情况下,您正在跟踪产品的属性并且这些属性不是那么有趣(对您的系统而言!)除非您需要检索这些属性并将它们打印出来产品网页或比较网格等。

考虑这样的设计:

在此处输入图像描述

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

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

于 2013-01-07T22:21:36.890 回答