我有兩個表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. MySQL檢查行是否包含來自另一個表的值
- 3. 來自同一個表的多個外鍵
- 4. MySQL - 檢查同一IN子句中是否有多個值
- 5. 來自一個表的兩個外鍵
- 6. 是否有可能創建一個具有多個值的列的sqlite表?
- 7. MySQL中的MusicDB對同一個表的多個外鍵
- 8. 是否有可能有一個MySQL表引用外部數據庫中的表?
- 9. 檢查列表中是否存在某個值以外的值
- 10. 來自一個表的同一列上的兩個外鍵
- 11. 是否有可能在一個表中創建兩個主鍵
- 12. 如何搜索一個表中的字段值,並查看該值是否在VBA中的另一個表中
- 13. 使用來自同一個表的值更新sql表的值
- 14. MySQL不會將外鍵多於一個外鍵添加到同一個表
- 15. NHibernate/SQL Server多個外鍵到同一個表...可能嗎?
- 16. 檢查一個值是否存在於多個表中SQL Server
- 17. 是否可以在同一查詢中使用另一個表中的值?
- 18. 來自表的兩個獨立列的不同值的MySQL COUNT
- 19. Sequelize許多一對多表具有相同的外鍵只選擇一個值
- 20. 引用同一個表的兩個外鍵的mysql查詢
- 21. MySQL的:插入一排用於表在外國表中的每個鍵爲每個不同的值
- 22. 是否可以在MapReduce中的同一個鍵下輸出多個值?
- 23. 查看所有對錶中某個列有外鍵的表?
- 24. 來自一個表的兩個外鍵的SQL查詢
- 25. SQL - 查找某個列是否有多個不同的值
- 26. 是否有可能有一個空的MySQL數值字段?
- 27. MySQL指向同一個表的多個外鍵
- 28. 是否有一個本地php函數來查看一個值的數組是否在另一個數組中?
- 29. Cassandra的哈希值是否在多個表中具有相同的值?
- 30. MySQL查詢根據另一表中的一個表來改變值的值
需要多對多的關係。 http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php – 2011-03-02 23:47:53
@Imre添加此鏈接到我的答案,因爲它是很好的信息。 – 2011-03-03 09:32:50