【问题标题】:MySQL database with products, products categories and different attributes具有产品、产品类别和不同属性的 MySQL 数据库
【发布时间】:2019-02-12 07:20:32
【问题描述】:

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

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

例如:

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

I understood 看来,最好避免 EAV 并继续类表继承。

在这个观察中,我会以此为出发点:


如果我只有一个属性集,我会在 products 表中使用 attribute_id 外键并收工,但我可能会设置 50+ 属性(因此有 50+ 个表格)。

  1. CTI 作为方法仍然有效吗?
  2. 如何将正确的属性集分配给产品?

很抱歉这个愚蠢的问题,但特别是我不明白如何在选择不同类别时分配不同的属性集。感谢阅读。

【问题讨论】:

  • 很少见到写得这么好的问题。我希望有人会帮助你。
  • 已回复here

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


【解决方案1】:

CTI 作为方法仍然有效吗?

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

如何将正确的属性集分配给产品?

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

【讨论】:

    【解决方案2】:

    在几乎所有情况下,拥有 55 个具有相同架构的表都是“错误的”。使它成为 1 个表更好。但随后它会让你陷入名为“实体-属性-值”的噩梦。

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

    您的架构不完全是 EAV。这是一个有趣的变体;它代表什么?我不认为我认为这是 EAV 的替代品。对于这是否会用一组不同的问题取代 EAV 的一组问题,我还没有意见。或者也许它更好。

    您将使用哪种客户端语言?您需要将category.name 转换为attr_laptop 以便SELECT ... from attr_laptop ... 这意味着动态创建查询。 (这在大多数客户端语言中都很容易。在存储例程中也可以,虽然有点笨拙。)

    【讨论】:

    • 我有一个名为“产品”的表,它有不同的类别类型,即压缩机、冷凝器等[总类别至少 30]。现在 Compressors 具有诸如“Family,Type,Volts”之类的属性,而电容器具有诸如“Height,Width,Depth”之类的属性。而在 30 个类别中,可能只有 10 个类别具有属性。那么在“产品”表中存储属性的最佳方法是什么。我应该为每个属性(30-40 列)制作列。或者,如果我想稍后添加属性,如何使其成为动态的。并按照您所说的那样存储在JSON中?我们可以在哪里存储这个 JSON 字符串 - 在“产品”表中?
    • @VirenPanchal - 我添加到我的答案中。对于“笔记本电脑”,JSON 将具有颜色、操作系统、hdmi,但不可重新填充等。至于 30-40 列,“否”。明天你需要 45 个。
    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多