2013-01-16 15 views
0

好了,所以我们必须Table 1(T1)和Table 2(T2)分配从一个表中的多个行的单元在第二个表(MySQL的)

结构:

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包含所有可用的COLORS。

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

我通常会做的是创建第三个表来跟踪哪些产品可用于哪种颜色。我们说一个目录表。它存储的所有信息都是主要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 

这样做,您可以根据需要将多个属性连接到产品。它需要更多的工作来跟踪你的目录,但从长远来看使事情变得更容易。从产品中删除可用的颜色,并仅在该表中存储产品标识和产品名称。其他任何与描述一样的标准,不一定会随着颜色而改变。这样,如果将可用颜色从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 

更多信息 - http://en.wikipedia.org/wiki/Join_%28SQL%29

+0

真棒!感谢你的回应,这正是我要做的! – TechnIckS

+0

当你不得不向商品目录添加新的字段和属性(如价格或需要多种颜色或其他)时,它使事情变得更加容易。 – donlaur

相关问题