【问题标题】:correct way to store properties of a certain product using MySql database [duplicate]使用MySql数据库存储某个产品属性的正确方法[重复]
【发布时间】:2019-01-19 06:56:10
【问题描述】:

我知道问这种问题可能很奇怪,但我很高兴听到您对此案的编辑和建议。

假设我有名为 products 和 properties 的表,诸如 color 、 size 、 volume 和 ... 存储在 properties 表中。 我无法存储我的产品的属性,例如蓝色、绿色和大小尺寸的 T 恤。

我已经尝试过的方法是在产品表中使用 JSON,如下所示:

{color : 'red' , size : 'large' , available : 1} , {color : 'red' , size : 'small' , available : 0 } , {color :blue : size : Medium , available : 1}, ...

但这似乎不太好,因为属性会有很多属性,而且 JSON 变得太大 欢迎任何建议

附:我正在使用 laravel 开发我的应用程序。

【问题讨论】:

  • 属性数量是否固定?所有产品都具有相同的属性吗?
  • @fancyPants 不,它不是固定的,产品具有不同的属性,例如产品 A 具有属性 A 和 B,而产品 B 具有属性 A 、 C 和 D
  • json 方法似乎不太可能变得“太大”——毕竟它是一种流行的方法。如果您决定改用 EAV 模型,我建议您根据值数据类型拆分属性。
  • @Strawberry 谢谢你的建议。

标签: mysql laravel database-design entity-attribute-value


【解决方案1】:

JSON 不会变得“太大”。

有一个表,其中 一些 字段作为常规列,以及所有其他杂项的 JSON 字段。

常规列使搜索变得容易一些。根据典型搜索选择哪些列。使用 MySQL 搜索它们,然后使用 JSON 测试(如果您有足够新的 MySQL,或者使用客户端代码挖掘 JSON 以完成过滤。

您的示例 JSON 代表 3 种不同的产品,而不是一种。作为一个单独的步骤(可能还有另一个表格),您可以将这 3 种“产品”归类为“T 恤”。显然,Tshirt(等)将在其自己的列中,不一定在 JSON 中。

More

【讨论】:

    【解决方案2】:

    您需要处理数据库关系才能完成此操作。

    1. 创建一个表格“尺寸”

      |编号   |姓名    |
      +----+------------+
      | 1   |大号      |
      | 2   |小      |
      | 3   |中等  |

    2. 创建一个表格“颜色”

      |编号   |姓名   |
      +----+----------+
      | 1    |红色     |
      | 2    |绿色 |
      | 3   |蓝色   |

    3. 创建一个表格“产品”

      | id   |名称    |
      +----+------------+
      | 1    | T 恤    |
      | 2    |裤子   |
      | 3   |夹克    |

    4. 最后创建表格“股票”

      |编号 |尺寸 ID | color_id |产品编号 |数量 |
      +----+---------+------------+--------------+------+ | 1   | 1     | 1                                                    1        | 100 | (红色大号 T 恤 - 100 件)
      | 1   | 3     | 2                                         2       | 200 | (绿色长裤中号 - 200 件)
      | 1   | 2     | 3                                                    3       | 150 | (蓝色夹克小号 - 150 件)

    【讨论】:

    • 属性的数量是动态的而不是静态的,以便创建表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多