我有两个表PC_Build表由PcID(主键),FinalCost和PartID组成。我还有一个PartID(主键),Part_Name,Cost的Parts表。我的PC_Build可能有多个PartID,链接到Parts表吗?我也可以通过从部件中获取成本,并将其添加到PC_Build中的FinalCost变量中,从构建中使用的部件总和中计算PC_Build的成本。MySQL,是否有可能在一个表中查看来自不同表的值的多个外键值?
回答
是。这是完全允许的。只要列和外键的命名方式不同,您可以根据需要为同一个表创建多个外键。
然而,对于您所描述的情况,这不一定是个好主意。它打破normalisation,你将有问题,如果可以是PC的RAM在它同枝的4和其他具有8或PC具有3级的CPU,但另一个具有1.您将如何处理这种情况?如果您使用外键,则需要不断更改表格以适应所有不同的情况。
它可能会更好,以有有两列,PCID和PARTID一个PC_Build_Part表。然后,您可以使用连接来简单地确定哪些部件属于哪个PC。
下面是一个例子模式:
PC(PCID,BuildCost)
部分(PARTID,零件名称,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
这将让您可以灵活处理多种不同的电脑配置,而无需改变你的架构。
所以你说的是什么,如果我只是做了柱的每个部分,所以让我们说,例如,一个CPU列,只要给它的产品编号,在零件表中的CPU的之一。它会打破正常化。你的建议是有第三个表,将PC_Build链接到PC_Build_Part到零件。我如何获得与PC构建相关的部分的成本,以增加PC的最终成本,只有在查询中才有可能? – 2011-03-02 23:45:57
不要为每个零件制作一个列。看我的示例架构。 – 2011-03-02 23:47:38
你未必需要BuildCost栏,你可以做到这一点与查询 - 我添加了答案。 – 2011-03-02 23:48:23
如果每个零件都属于某个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 PcID
谢谢:)我会试试看看它是否能完成这项工作! – 2011-03-02 23:50:01
在这种架构中的一部分只能属于一台PC,这不一定是错的,只是为了说清楚。 – 2011-03-02 23:53:51
如何将多个部件链接到一台PC?因为个人电脑需要一个CPU,主板,电源,拉姆等...我应该有一个桌子,每种类型的零件链接到一个电脑表? – 2011-03-03 00:10:54
- 1. mysql表有两个来自另一个同一表的外键
- 2. 一个列的多个表外键..是否有可能?
- 3. 是否有可能让MySQL计算来自同一个表中两个不同行的值?
- 4. 来自一个表的多个外键
- 5. MySQL检查行是否包含来自另一个表的值
- 6. 是否有可能在同一个表中创建多发的MySQL查询?
- 7. 查看列表中的值是否具有相同的值〜Python
- 8. 来自同一个表的多个外键
- 9. 同一表中有多个外键
- 10. mysql - 从表中选择值来自另一个表的LIKE值
- 11. 具有多个(条件)可能值的MySQL外键
- 12. MySQL - 检查同一IN子句中是否有多个值
- 13. 用mysql的外键有可能有一个基于列值的外键?
- 14. 是否有可能创建一个具有多个值的列的sqlite表?
- 15. 来自一个表的两个外键
- 16. 是否有可能有一个MySQL表引用外部数据库中的表?
- 17. 来自两个不同表的两个不同主键的外键引用是否有效?
- 18. MySQL中的MusicDB对同一个表的多个外键
- 19. 检查列表中是否存在某个值以外的值
- 20. 选择其中来自一个值是在表B的MySQL
- 21. 检查是否所有的值在一个表中的列在另一个表
- 22. mySQL - 多个表的外键?
- 23. 来自同一个表的多个MySQL查询
- 24. 来自一个表的同一列上的两个外键
- 25. 来自多个表的复合外键
- 26. 是否有可能在一个表中创建两个主键
- 27. 比较(可能)来自2个表格的多个值
- 28. 如何搜索一个表中的字段值,并查看该值是否在VBA中的另一个表中
- 29. MySQL中,三个表:UPDATE多行(每一个不同的值)
- 30. 使用来自同一个表的值更新sql表的值
需要多对多的关系。 http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php – 2011-03-02 23:47:53
@Imre添加此链接到我的答案,因为它是很好的信息。 – 2011-03-03 09:32:50