MYSQL - 多个多对多选择

MYSQL - multiple many to many selection

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

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

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.

我会丢掉 product_colorproduct_size tables,并添加一个 stock table,其中包含产品、尺寸和颜色:

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

您需要创建 4 个 table -

  1. 产品table - 与产品相关的信息,如名称、图片、描述、状态
  2. 选项table - 与大小、颜色等选项相关的信息
  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