0

好的,所以我们有Table 1(T1) 和Table 2(T2)

结构:

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

T2 (properties table):
ID
Property Name

假设table 1有两个条目。Table 2有4个属性。我想要做的是将条目 1 in 的属性设置table 1为映射到属性 1、2 和 3 in table 2。对于表 1 中的条目 2,我想将其映射到表 2 中的属性 2、3 和 4。

例如,假设我们有两个产品,一个 BALL 和一个 CUBE。这些将列在table 1. 现在假设table 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 条目。

通常,如果我只需要为一个项目分配一种颜色,并且该颜色不能在另一个项目中使用,我只需在table 2“属于”或类似的内容中添加一个列,这样我就可以将多种颜色设置为匹配中的相同条目table 1,但是,我只能以这种方式为一个条目分配颜色...我不能将每个说红色分配给球和立方体。

有人知道吗?

4

1 回答 1

0

我通常做的是创建第三个表来跟踪哪些产品有哪些颜色。比方说一个目录表。它只存储一个主 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,则无需添加新字段进行跟踪。您还可以获取目录并添加额外的字段,例如跟踪产品当前是否有该颜色的有效或库存。在目录中,您还可以存储库存编号。如果您的价格因颜色而异怎么办?白球更便宜?数据正常的所有充分理由。

规范化是为了确保每个表都有唯一的最小字段并摆脱依赖关系。查看这个公认的答案,以便在理论水平上很好地解释归一化。 MYSQL 中的规范化

然后,您可以使用 JOINS 将它们全部连接起来以遍历目录表。

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

更多关于 JOINS 的信息可以在这里找到 - http://en.wikipedia.org/wiki/Join_%28SQL%29

于 2013-01-16T18:23:12.560 回答