MySQL - 如何为一个产品存储多种颜色组合?

MySQL - How to store multiple combinations of colors for one product?

我正在寻找以下问题的最佳解决方案:

我有三个表:

  1. 产品
id productName
1 Tshirt
2 Pullover
3 Jacket
  1. 基色
id baseColorName allowedExtraColorIds
1 Green 1,2
2 Blue 2,3
3 Red 3
  1. 额外颜色
id extraColorName
1 Purple
2 Orange
3 Black

如您所见,基本颜色表和额外颜色表之间存在依赖关系。

现在 Table 产品包含产品。但是我现在想要一个表单,用户可以首先 select 产品,然后他可以将基本颜色和额外颜色的组合映射到该产品。

示例:

  1. 用户select将“T 恤”作为产品
  2. 现在他创造了组合:

现在我想知道如何保存此信息,以便在 MySql 数据库中映射单个产品的基本颜色和额外颜色的不同组合。

有人知道如何实现吗? :)

详细说明@RiggsFolly 已经建议的内容:

  • 使用 1 table 种颜色。有两个只会使情况复杂化
  • 创建一个 table,其中所有可能的组合都列为单独的项目 - 您甚至可以考虑添加产品以允许并非所有颜色都适用于所有产品的情况。

像这样

Product Basecolor Extracolor
1 1 1
1 1 2

这样一来,所有检查都变成了一个简单的单例查询,要么给出结果(允许组合)要么不给出结果(不允许组合)

这会稍微改变您的方法,但如前所述,这就是您使用 RDBMS 的方式。之后它会让你省去很多麻烦。

是的,要提出所有可能的组合,您将检索到一个结果集而不是一条记录,但这很容易解决。

您必须像下面那样创建 table 来存储生成的组合。

  1. selected_products

    id product_id user_id
    1 1 1
    2 2 1
  2. 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引用。