MySQL,是否有可能在一个表中有多个外键值来查看来自不同表的值?

1 mysql

我有两个表PC_Build表,包括PcID(主键),FinalCost和PartID.我还有一个Parts表,它有PartID(主键),Part_Name,Cost.我的PC_Build是否可以有多个PartID,链接到Parts表??? 我也可以通过从部件中获取成本,并将其添加到PC_Build中的FinalCost变量,从构建中使用的部件总和计算PC_Build的成本.

Rob*_*ett 5

是.这是完全允许的.只要列和外键的名称不同,您就可以拥有任意数量的外键到同一个表.

但是,对于您描述的情况,这不一定是个好主意.它打破了规范化,你会遇到问题,例如,如果PC中有4个相同的RAM,而另一个有8个,或者PC有3个CPU但另一个有1.你将如何处理这种情况?如果您使用外键,则需要不断更改表以适应所有不同的情况.

拥有一个包含两列PcID和PartID的PC_Build_Part表可能会更好.然后,您可以使用联接来简单地确定哪些部件属于哪台PC.

这是一个示例模式:

PC(PcID,BuildCost)

Part(PartID,PartName,PartCost)

PC_Part(PcID,PartID)

这被称为多对多关系.

要计算BuildCost列,您可以执行如下查询:

SELECT SUM(p.PartCost) as TotalCost
FROM Part p
JOIN PC_Part pcp ON pcp.PartID = p.PartID
JOIN PC pc ON pc.PcID = pcp.PcID
Run Code Online (Sandbox Code Playgroud)

这将允许您灵活地处理许多不同的PC配置,而无需更改您的架构.