MySQL - 如何为一个产品存储多种颜色组合?
MySQL - How to store multiple combinations of colors for one product?
我正在寻找以下问题的最佳解决方案:
我有三个表:
- 产品
id
productName
1
Tshirt
2
Pullover
3
Jacket
- 基色
id
baseColorName
allowedExtraColorIds
1
Green
1,2
2
Blue
2,3
3
Red
3
- 额外颜色
id
extraColorName
1
Purple
2
Orange
3
Black
如您所见,基本颜色表和额外颜色表之间存在依赖关系。
- 因此并非每种额外颜色都可以与每种基本颜色一起使用。对于基本颜色“绿色”,仅允许选择 ID 为“1 和 2”的额外颜色。
现在 Table 产品包含产品。但是我现在想要一个表单,用户可以首先 select 产品,然后他可以将基本颜色和额外颜色的组合映射到该产品。
示例:
- 用户select将“T 恤”作为产品
- 现在他创造了组合:
- 他 select 设置了基本颜色“绿色”,他 select 设置了允许的额外颜色“紫色”
- 他 select 设置了基本颜色“红色”,他 select 设置了允许的额外颜色“黑色”
现在我想知道如何保存此信息,以便在 MySql 数据库中映射单个产品的基本颜色和额外颜色的不同组合。
有人知道如何实现吗? :)
详细说明@RiggsFolly 已经建议的内容:
- 使用 1 table 种颜色。有两个只会使情况复杂化
- 创建一个 table,其中所有可能的组合都列为单独的项目 - 您甚至可以考虑添加产品以允许并非所有颜色都适用于所有产品的情况。
像这样
Product
Basecolor
Extracolor
1
1
1
1
1
2
这样一来,所有检查都变成了一个简单的单例查询,要么给出结果(允许组合)要么不给出结果(不允许组合)
这会稍微改变您的方法,但如前所述,这就是您使用 RDBMS 的方式。之后它会让你省去很多麻烦。
是的,要提出所有可能的组合,您将检索到一个结果集而不是一条记录,但这很容易解决。
您必须像下面那样创建 table 来存储生成的组合。
selected_products
id
product_id
user_id
1
1
1
2
2
1
selected_product_combinations
id
selected_product_id
base_color_id
extra_color_id
1
1
1
1
2
1
3
3
这里,selected_product_id是对selected_productstable的主键的foreign-key引用。
我正在寻找以下问题的最佳解决方案:
我有三个表:
- 产品
id | productName |
---|---|
1 | Tshirt |
2 | Pullover |
3 | Jacket |
- 基色
id | baseColorName | allowedExtraColorIds |
---|---|---|
1 | Green | 1,2 |
2 | Blue | 2,3 |
3 | Red | 3 |
- 额外颜色
id | extraColorName |
---|---|
1 | Purple |
2 | Orange |
3 | Black |
如您所见,基本颜色表和额外颜色表之间存在依赖关系。
- 因此并非每种额外颜色都可以与每种基本颜色一起使用。对于基本颜色“绿色”,仅允许选择 ID 为“1 和 2”的额外颜色。
现在 Table 产品包含产品。但是我现在想要一个表单,用户可以首先 select 产品,然后他可以将基本颜色和额外颜色的组合映射到该产品。
示例:
- 用户select将“T 恤”作为产品
- 现在他创造了组合:
- 他 select 设置了基本颜色“绿色”,他 select 设置了允许的额外颜色“紫色”
- 他 select 设置了基本颜色“红色”,他 select 设置了允许的额外颜色“黑色”
现在我想知道如何保存此信息,以便在 MySql 数据库中映射单个产品的基本颜色和额外颜色的不同组合。
有人知道如何实现吗? :)
详细说明@RiggsFolly 已经建议的内容:
- 使用 1 table 种颜色。有两个只会使情况复杂化
- 创建一个 table,其中所有可能的组合都列为单独的项目 - 您甚至可以考虑添加产品以允许并非所有颜色都适用于所有产品的情况。
像这样
Product | Basecolor | Extracolor |
---|---|---|
1 | 1 | 1 |
1 | 1 | 2 |
这样一来,所有检查都变成了一个简单的单例查询,要么给出结果(允许组合)要么不给出结果(不允许组合)
这会稍微改变您的方法,但如前所述,这就是您使用 RDBMS 的方式。之后它会让你省去很多麻烦。
是的,要提出所有可能的组合,您将检索到一个结果集而不是一条记录,但这很容易解决。
您必须像下面那样创建 table 来存储生成的组合。
selected_products
id product_id user_id 1 1 1 2 2 1 selected_product_combinations
id selected_product_id base_color_id extra_color_id 1 1 1 1 2 1 3 3
这里,selected_product_id是对selected_productstable的主键的foreign-key引用。