好的,我们有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个属性。
我想要做的是在table 1
中设置条目1的属性,以映射到table 2
中的属性1,2和3。对于表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
中的相同条目,但是,我只能将颜色指定给一个条目...我不能将每个说明的红色分配给球和立方体。
任何人都有任何想法?
答案 0 :(得分: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,则无需添加新字段进行跟踪。您还可以获取目录并添加额外的字段,如活动或库存,以跟踪产品当前是否以该颜色可用。在目录中,您还可以存储库存编号。如果你的价格根据颜色不同怎么办?白球更便宜?正常数据的所有正当理由。
规范化是为了确保每个表都有唯一的最小字段并摆脱依赖关系。 查看这个已接受的答案,以便对理论层面的规范化做出很好的解释。 Normalization in 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