Primary-Key

如果預期主鍵的所有關聯屬性都相同,它仍然是真正的主鍵嗎?

  • May 5, 2020

我將從一個例子開始。如果我有一個person帶有預期代理主鍵的表Id

+----+------+------------+-------------+
| 身份證 | 姓名 | 出生日期 | 社會保障號 |
+----+------+------------+-------------+
| 1 | 約翰 | 1901-01-01 | 111-11-1111 |
| 2 | 簡 | 1902-02-02 | 222-22-2222 |
| 3 | 約翰 | 1901-01-01 | 111-11-1111 |
+----+------+------------+-------------+

注意Ids 1 & 3 具有相同的屬性;他們都代表同一個人。

現在,根據我們對構成主鍵的理論的了解,我認為這裡總結得很好:

  • 主鍵必須唯一標識每條記錄。
  • 記錄的主鍵值不能為空。
  • 創建記錄時,主鍵值必須存在。
  • 主鍵必須保持穩定——您不能更改主鍵欄位。
  • 主鍵必須緊湊並且包含盡可能少的屬性。

考慮第一個項目符號,“主鍵必須唯一標識每條記錄。 ”在我的範例中,我認為每個記錄是否Id代表唯一性取決於真正應該被視為唯一的內容。不同的數據庫記錄?是的。另一個人(記錄應該代表什麼)?不。

因此,多個Ids 表示生成數據的功能相同的主題,存在於 2 條記錄中。一種“二對一的身份”。我沒有讀過任何直接解決我的範例說明的場景的內容,因為這與什麼是或不是 PK 有關。

  1. 這個例子是否違反了構成主鍵的理論?

  2. 如果不是,這個例子是否說明違反了任何更大的數據庫架構原則,或者這個概念是否可以簡化為“數據重複 - 清理它”這樣簡單的東西?

非常感謝。

這個模型的問題是您沒有辨識關係中的所有候選鍵,並且沒有強制那些您沒有辨識的鍵的唯一性。實際上{SSN},並且可能{Name, DoB, SomethingElse}會構成額外的候選鍵。

儘管如此,Id它仍然是該關係的主鍵,但它不能辨識您期望(ed)它的實體。它不辨識“人”,而是辨識其他事物,例如“某人輸入個人數據的事件”。

引用自:https://dba.stackexchange.com/questions/266548