将一个表中的多行分配给第二个表(MySQL)中的一个单元格

将一个表中的多行分配给第二个表(MySQL)中的一个单元格,mysql,normalization,multiple-value,Mysql,Normalization,Multiple Value,好的,我们有表1(T1)和表2(T2) 结构: T1 (main table): ID (Auto-Increment) Name Properties T2 (properties table): ID Property Name 假设表1有两个条目表2有4个属性。 我要做的是将表1中条目1的属性设置为映射到表2中的属性1、2和3。对于表1中的条目2,我想将其映射到表2中的属性2、3和4 例如,假设我们有两个乘积,一个球和一个立方体。这些将列在表1中。现在让我们假设表2包含所有可用的颜色

好的,我们有
表1
(T1)和
表2
(T2)

结构:

T1 (main table):
ID (Auto-Increment)
Name
Properties

T2 (properties table):
ID
Property Name
假设
表1
有两个条目<代码>表2有4个属性。 我要做的是将
表1
中条目1的属性设置为映射到
表2
中的属性1、2和3。对于表1中的条目2,我想将其映射到表2中的属性2、3和4

例如,假设我们有两个乘积,一个球和一个立方体。这些将列在
表1
中。现在让我们假设
表2
包含所有可用的颜色

Table 2:
ID COLOR
1  RED
2  BLUE
3  GREEN
4  YELLOW

Table 1:
ID NAME AVAILABLE_COLORS
1  BALL (TABLE 2 ENTRY 1, TABLE 2 ENTRY 2, TABLE 2 ENTRY 3, in other words RED BLUE GREEN)
2  CUBE (TABLE 2 ENTRY 2, TABLE 2 ENTRY 3, TABLE 2 ENTRY 4, in other words BLUE GREEN YELLOW)
如何获取可用颜色以指向颜色表?基本上,我想确保如果我更改了一个属性(比如说红色->黑色),它会自动为所有表1条目更改

通常,如果我只需要为一个项目指定一种颜色,而该颜色不能在另一个项目中使用,我只需在
表2中添加一列“属于”或类似的内容,这样我就可以设置多种颜色以匹配
表1中的同一条目,我只能通过这种方式为一个条目指定一种颜色。。。我不能同时给球和立方体分配红色


有人知道吗

我通常会创建第三个表来跟踪哪些产品有哪些颜色。比如说目录表。它存储的所有内容都是主ID、产品ID和颜色ID

Table 3:  Catalog
ID ColorsID ProductsID
1 1 1  // row one connects with colors and products and this is a red ball 
2 2 1  // blue ball
3 1 2  // red cube
4 4 2  // yellow cube
通过这种方式,您可以根据需要将任意多个属性连接到产品。它需要更多的工作来跟踪您的目录,但从长远来看,这会使事情变得更容易。从产品中删除可用颜色,并仅在该表中存储产品ID和产品名称。任何其他类似标准的描述都不一定会随颜色而改变。这样,如果您将可用颜色从3更改为10,则无需添加新字段来跟踪。您还可以获取目录并添加额外字段,如“活动”或“库存”,以跟踪当前是否有该颜色的产品。在目录中,您还可以存储库存编号。如果你的价格因颜色不同怎么办?白球更便宜?所有正常数据的充分理由

规范化是确保每个表只有最小的字段,并消除依赖关系。 从理论层面来看,这个公认的答案很好地解释了规范化。

然后可以使用联接将它们全部连接到目录表中的循环

SELECT Colors.ColorID as Color, Products.ProductID as Product
FROM Catalog
    INNER JOIN Colors
        ON Catalog.ColorsID = Colors.ColorID
    INNER JOIN Products 
        ON Catalog.ProductsID = Products.ProductID

更多关于连接的信息可以在这里找到-

Awesome!谢谢你的回复,这正是我要做的!当您必须向目录中添加新字段和属性(如价格)或需要多种颜色或其他任何颜色时,它使事情变得更加容易。