MYSQL - 多个多对多选择
Posted
技术标签:
【中文标题】MYSQL - 多个多对多选择【英文标题】:MYSQL - multiple many to many selection 【发布时间】: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
。 -- 让这可以帮助您了解架构的好坏。
【参考方案1】:
我会丢失 product_color
和 product_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 个表 -
-
产品表 - 与产品相关的信息,例如名称、图片、描述、状态
选项表 - 与选项相关的信息,例如尺寸、颜色
期权价值 - 与期权价值相关的信息,例如 XL、XXL、RED、GREEN、BLUE
依赖选项 - 用于选项
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
【讨论】:
这是一个充满问题的“实体-属性-值”的变体。以上是关于MYSQL - 多个多对多选择的主要内容,如果未能解决你的问题,请参考以下文章