MySQL数据库具有产品,产品类别和不同属性

时间:2016-04-13 07:45:17

标签: mysql database-design relational-database database-schema

我在设计一个每个产品都有很多不同属性的数据库时遇到了一些困难。

以下情况:每个产品应属于类别,每个类别都有一组不同的属性

例如:

  • 产品 iGal 7S 类别 智能手机属性 attr_phone
  • 产品 UberLaptop 类别 笔记本电脑&笔记本电脑属性 attr_laptop

I understood开始,最好避免使用EAV并继续进行类表继承。

根据这一观察,我将作为起点:

Starting design

如果我设置了一个属性,我会在attribute_id表中使用products外键并将其称为一天,但我可能会 50 + 属性集(因此 50 + 表)。

  1. CTI仍然有效吗?
  2. 如何为产品分配正确的属性?
  3. 很抱歉这个愚蠢的问题,但特别是我不明白如何在选择其他类别时分配不同的属性集。谢谢你的阅读。

2 个答案:

答案 0 :(得分:1)

  

CTI仍然有效吗?

我认为如果类别的数量是十分之一,而不是百分之一,那么是。

  

如何为产品分配正确的属性?

您可以向每个类别行添加相应的属性表的表名,并且对于每个属性表,该行的ID将是相应产品的ID(以便您可以将其定义为外键的外键)产品表)。

答案 1 :(得分:0)

在几乎所有情况下,拥有55个具有相同架构的表是“错误的”。使它成为一张桌子更好。但是它会让你陷入被称为“实体 - 属性 - 价值”的噩梦。

选择一些您通常需要搜索的“属性”。将其余部分放入单个列中的JSON字符串中。 More details

您的架构不是EAV。这是一个有趣的变种;它代表什么?我认为我不认为这是EAV的替代品。我还不知道这是否取代了EAV对一系列不同问题的问题。或者它可能更好。

您将使用哪种客户端语言?您需要将SELECT json_build_object('Locations', json_agg(t)) FROM ( SELECT DISTINCT ON (city, state) latitudes, longitudes, city, state FROM zips WHERE city ILIKE 'ORL%' ORDER by city, state, ziptype DESC LIMIT 10 ) t; 转换为category.name才能attr_laptop这意味着动态创建查询。 (在大多数客户端语言中这很容易。虽然有点笨拙,但在存储例程中也是可能的。)