0

ERD的一部分顯示3個表之間的關係。此表是否需要新的主鍵?

用戶可以通過許多用戶

在中間的表解決了多對多的關係,並具有複合主鍵擁有許多tarcks(歌曲)

的軌道可以被擁有。以及存儲關於特定用戶如何評定特定曲目的信息。

http://i.imgur.com/Rn4PnGO.png

是否採用中間表需要一個新的主鍵「User_Rating_ID」或者是好(更好?)離開它作爲一個組合鍵?

回答

0

這取決於你如何使用數據。

從嚴格的邏輯角度來看,複合主鍵說明需要說什麼,並且工作正常。有一些不尋常的情況,單獨的PK可能會有所幫助。

+0

您是否介意闡述這些情況或指引我走向正確的方向?我搜索了這個問題,但找不到任何特別有用的東西。 – user388600

0

多對多交叉表沒有任何錯誤,它具有由兩個外鍵列構成的組合主鍵,這兩個外鍵列指向通過交叉點鏈接的兩個表。

有些人可能希望將額外的候選主鍵,特別是無意義的系統生成的ID號(或GUID等)添加到這些交叉表中。

的原因,有人可以做到這包括:*

  1. 「父」(鏈接)表的一端可以改變和更新外鍵的一個(或多個)將是複雜一些原因。有些人不喜歡更新主鍵。一些ORM不允許它。
  2. 交叉點本身可能是一個或多個子表的父項,這些子表需要指向交集的外鍵。將複合鍵傳播到其他表可能會使代碼複雜化,並且可能會或可能不會被ORM支持(如果使用的話)。
  3. 有時你有一個基於用戶界面的理由,有一個單列候選鍵,就像交叉點中的記錄顯示在一個組合框中,組合框控件有一個單一列表項整數數組,可讓您識別從交叉表記錄。
  4. 您可能有某種系統約束,要求您在每個表上都有一個代理鍵,而不管其他候選主鍵是否存在。例如,您可能有一個審計日誌記錄機制,用於跟蹤諸如table_name,record_idchange_datechange_user等項目。
  5. 有些人只是覺得每張桌子都需要有代理鑰匙,因爲那是他們的世界觀。

*注意:我不主張任何這些原因。我說他們是你會發現「野外出走」的觀點。你的里程可能會有所不同,做出自己的決定等等。

1

交集表定義了兩個實體之間的關係。如果這是一個匿名關係,那麼不需要單獨的代理鍵。

例如,一個零件表和一個單位表可以有一個表,它定義了哪些零件用於製造每個單位。每個部分可以用於多個單元,每個單元由許多部分組成(有時也包括特定部分的幾個部分)。這樣的表可以是這樣的:

UnitID PartID Qty 

這樣的交集表可能不會有一個代理鍵。常見問題被問到的關係將是:

  • 哪些部分用於製造單位?
  • 用於製造Unit X的最便宜/最昂貴的部件是什麼?
  • 哪些單位包含部分P?
  • 哪些單位需要最高數量的零件P?

我想不出任何情況下,甚至會使用這種關係的單獨關鍵。所有的問題都會涉及某個特定的部分或特定的單位。

另一方面,採取課程和學期。交叉表將建立課程,課程將被授課的具體課程。這裏可能有同一學期內某個特定課程的幾個例子。 Smith教授每天可以進行1小時的Math-101課程,瓊斯教授每天可以進行1.5小時的T-th課程。

在登記和其他未來的記錄保存,它會是數學-101或將被跟蹤的學期,但將要使用的特別類。出於這個原因,需要一個單獨的代理鍵。

分析將在您的實例中確定關係是否爲匿名。