我有两个表,一个由PcID (主键)、FinalCost和PartID组成的PC_Build表。我还有一个零件表,其中包含PartID (主键)、Part_Name、Cost。我的PC_Build是否可以有多个零件it,链接到零件表?我还可以通过从部件中获取成本,并将其添加到PC_Build中的FinalCost变量,从构建中使用的部件的总和来计算PC_Build的成本。
发布于 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列,您可以执行如下查询:
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配置,而不必更改您的模式。
发布于 2011-03-03 07:47:48
如果每个部件都属于某个PC,那么您需要向Parts表中添加一个PcID列,并从PC_Build表中删除该PartID。如果您有一个固定的零件目录,并且每台PC可以由多个零件组成,并且每个零件可以在多台PC上使用,那么您需要一个附加表(PC_to_Part),其中您有一个PcID和一个PartID。
是的,假设使用前一种方法,您可以使用如下查询找到每台PC的成本
SELECT PcID, SUM(Cost)
FROM PC_Build
JOIN Parts ON (Parts.PcID = PC_Build.PcID)
GROUP BY PcIDhttps://stackoverflow.com/questions/5174897
复制相似问题