我想在类别中实现产品过滤,并且对正确的数据库架构有疑问。
现在我有下表:
类别:
1. id
2. category
3. description
Products:
1. id
2. category_id
3. product
4. image
5. price
属性:
1. id
2. attribute
类别_属性:
1. category_id
2. attribute_id
我的问题是我应该创建哪些表以及哪些列必须存储不同类型的值、属性值、产品属性值等。
多创建3张表是否正常:
Values:
1. id
2. value
属性_值:
1. attribute_id
2. value_id
产品_属性_值:
1. product_id
2. attribute_id
3. value_id
我把最后几张桌子搞砸了。什么会更好地存储和过滤?
你想要实现的是实体-属性-值(EAV)或可能是行建模解决方案。请注意,由于各种很好的理由,这种类型的结构在很大程度上不受欢迎。
然而,我已经争论过(例如here https://stackoverflow.com/questions/17231834/if-eav-is-evil-what-to-use-for-dynamic-values/17233204#17233204, here https://stackoverflow.com/questions/10010992/database-design-for-ecommerce-project-should-i-use-eav-approach/10027905#10027905, here https://stackoverflow.com/questions/11779252/entity-attribute-value-table-design/11972029#11972029, and here https://dba.stackexchange.com/questions/15199/inventory-database-structure-when-inventory-items-have-varying-attributes/15211#15211)EAV 是邪恶的,除非它不是。这些罕见的例外之一是在产品目录的情况下,您正在跟踪产品的属性,而这些属性并不是那么有趣(到您的系统!)除非您需要检索这些内容并将其打印在产品网页或比较网格等上。
考虑这样的设计:
您在这样的模型中所做的就是描述给定类别中的产品应该具有哪些属性、这些属性可能具有哪些值,以及每个特定产品的每个属性具有哪些值。
这种设计确实具有 EAV 所施加的所有常见限制。然而,如果你想问这样的问题:“哪颗珠子的直径是8毫米?”这非常简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)