【问题标题】:MYSQL - multiple many to many selectionMYSQL - 多个多对多选择
【发布时间】:2021-10-28 05:55:55
【问题描述】:

我有多个与一个主要实体相关的多对多关系。

表格(名称不同,但更容易演示):

products
    - id
    - every other data


colors
    - id
    - every other data

sizes
    - id
    - every other data

product_color
    - product_id
    - color_id

product_size
    - product_id
    - size_id

我想在某处存储一个数字,例如50件绿色和XXL尺寸的T恤产品,但只有20件绿色和M尺寸的T恤产品。我将把这个号码存储在哪里?我的数据库结构对那个有效吗?我正在使用 eloquent + mysql。

【问题讨论】:

  • 写出一些你需要的SELECTs。 -- 让这可以帮助您了解架构的好坏。

标签: php mysql database-design eloquent entity-attribute-value


【解决方案1】:

我会丢失 product_colorproduct_size 表,并添加一个带有外键的 stock 表到产品、尺寸和颜色:

stock
  - id         -- May be redundant, depends on your application
  - product_id -- FK to products.id
  - color_id   -- FK to colors.id
  - size_id    -- FK to sizes.id
  - amount

【讨论】:

  • 星型模式的搜索速度非常慢。
【解决方案2】:

你需要创建 4 个表 -

  1. 产品表 - 与产品相关的信息,例如名称、图片、描述、状态
  2. 选项表 - 与选项相关的信息,例如尺寸、颜色
  3. 期权价值 - 与期权价值相关的信息,例如 XL、XXL、RED、GREEN、BLUE
  4. 依赖选项 - 用于选项
products
    - product_id (Primary key)
    - every other data
option 
    - option_id (Primary key)
    - option_name(color|size)
option_value
    - option_value_id
    - option_id
    - name

product_option
    - product_id
    - option_id
    - Quantity
Product - 
| product_id | name         |
| -------- | -------------- |
| 1        | Tshirt         |
| 2        | Jeans          |


Option
| option_id | option_name   |
| -------- | -------------- |
| 5        | Size           |
| 6        | Color          |


Option_value
| option_value_id | option_id      |option_name| 
| --------        | -------------- |-----------|
| 8               | 5              |   XXL     | 
| 9               | 5              |   L       | 
| 10              | 6              |   RED     |
| 11              | 6              |   BLUE    |



dependent_option
| id | parent_option_value_id| child_option_value_id|   Qty     | 
|----| --------------------- | -------------------- |-----------|
| 1  | 8                     | 10                   |   200     | XXL-RED 
| 2  | 8                     | 11                   |   9       | L-RED
| 3  | 9                     | 10                   |   300     | XXL-BLUE
| 4  | 9                     | 11                   |   4999    | L-BLUE




【讨论】:

  • 这是一个充满问题的“实体-属性-值”的变体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2013-11-08
相关资源
最近更新 更多