首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL,是否有可能在一个表中有多个外键值来查看不同表中的值?

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

Stack Overflow用户
提问于 2011-03-03 07:38:17
回答 2查看 3.2K关注 0票数 1

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

EN

回答 2

Stack Overflow用户

发布于 2011-03-03 07:42:26

是。这是完全允许的。只要列和外键的名称不同,同一个表就可以有任意多个外键。

但是,对于您所描述的情况,这不一定是一个好主意。它破坏了normalisation,如果一台PC有4条相同的内存,而另一台有8条,或者一台PC有3个CPU,但另一台有1个,你会如何处理这种情况?如果使用外键,则需要不断更改表以适应所有不同的情况。

拥有一个包含两列PcID和PartID的PC_Build_Part表可能会更好。然后,您可以使用joins来简单地计算出哪些部件属于哪台PC。

下面是一个示例模式:

PC (PcID,BuildCost)

Part (PartID、PartName、PartCost)

PC_Part(PcID,PartID)

这称为many-to-many relationship

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

代码语言:javascript
运行
复制
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

这将允许您灵活地处理许多不同的PC配置,而不必更改您的模式。

票数 5
EN

Stack Overflow用户

发布于 2011-03-03 07:47:48

如果每个部件都属于某个PC,那么您需要向Parts表中添加一个PcID列,并从PC_Build表中删除该PartID。如果您有一个固定的零件目录,并且每台PC可以由多个零件组成,并且每个零件可以在多台PC上使用,那么您需要一个附加表(PC_to_Part),其中您有一个PcID和一个PartID。

是的,假设使用前一种方法,您可以使用如下查询找到每台PC的成本

代码语言:javascript
运行
复制
SELECT PcID, SUM(Cost)
FROM PC_Build
JOIN Parts ON (Parts.PcID = PC_Build.PcID)
GROUP BY PcID
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5174897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档