我在设计一个每个产品有很多不同属性的数据库时遇到了一些困难 .
这是情况:每个 product 应属于 category ,每个类别都有一组不同的 attributes .
例如 . :
-
产品 iGal 7S →类别 Smartphones →属性 attr_phone
-
产品 UberLaptop →类别 Notebooks & Laptops →属性 attr_laptop
从I understood开始,最好避免使用EAV并继续进行类表继承 .
根据这一观察,我将以起点为出发点:
如果我有一个属性集,我会在 products
表中使用 attribute_id
外键并将其称为一天,但我可能会设置 50+ 属性(因此 50+ 表) .
-
Is CTI still valid as approach?
-
How could I assign the correct attributes set to a product?
抱歉这个愚蠢的问题,但特别是我不明白如何在选择其他类别时分配不同的属性集 . 谢谢阅读 .
2 回答
我认为,如果类别的数量是十分之一,而不是百分之一,那么是的 .
您可以向每个类别行添加相应的属性表的表名,并且对于每个属性表,该行的id将是相应产品的id(以便您可以将其定义为products表的外键) ) .
在几乎所有情况下,拥有55个具有相同模式的表是“错误的” . 使它成为一张 table 更好 . 但随后它会让你进入一个名为“实体 - 属性 - Value ”的梦魇 .
选择一些你通常需要搜索的"attributes" . 将其余部分放入单个列中的JSON字符串中 . More details
您的架构不是EAV . 这是一个有趣的变种;它代表什么?我认为我不认为这是EAV的替代品 . 我还不知道这是否取代了EAV对一系列不同问题的问题 . 或者它可能更好 .
您将使用哪种客户端语言?您需要将
category.name
转换为attr_laptop
才能SELECT ... from attr_laptop ...
这意味着动态创建查询 . (在大多数客户端语言中这很容易 . 虽然有点笨拙,但在存储例程中也是可能的 . )