Primary-Key
如果預期主鍵的所有關聯屬性都相同,它仍然是真正的主鍵嗎?
我將從一個例子開始。如果我有一個
person
帶有預期代理主鍵的表Id
:+----+------+------------+-------------+ | 身份證 | 姓名 | 出生日期 | 社會保障號 | +----+------+------------+-------------+ | 1 | 約翰 | 1901-01-01 | 111-11-1111 | | 2 | 簡 | 1902-02-02 | 222-22-2222 | | 3 | 約翰 | 1901-01-01 | 111-11-1111 | +----+------+------------+-------------+
注意
Id
s 1 & 3 具有相同的屬性;他們都代表同一個人。現在,根據我們對構成主鍵的理論的了解,我認為這裡總結得很好:
- 主鍵必須唯一標識每條記錄。
- 記錄的主鍵值不能為空。
- 創建記錄時,主鍵值必須存在。
- 主鍵必須保持穩定——您不能更改主鍵欄位。
- 主鍵必須緊湊並且包含盡可能少的屬性。
考慮第一個項目符號,“主鍵必須唯一標識每條記錄。 ”在我的範例中,我認為每個記錄是否
Id
代表唯一性取決於真正應該被視為唯一的內容。不同的數據庫記錄?是的。另一個人(記錄應該代表什麼)?不。因此,多個
Id
s 表示生成數據的功能相同的主題,存在於 2 條記錄中。一種“二對一的身份”。我沒有讀過任何直接解決我的範例說明的場景的內容,因為這與什麼是或不是 PK 有關。
這個例子是否違反了構成主鍵的理論?
如果不是,這個例子是否說明違反了任何更大的數據庫架構原則,或者這個概念是否可以簡化為“數據重複 - 清理它”這樣簡單的東西?
非常感謝。
這個模型的問題是您沒有辨識關係中的所有候選鍵,並且沒有強制那些您沒有辨識的鍵的唯一性。實際上
{SSN}
,並且可能{Name, DoB, SomethingElse}
會構成額外的候選鍵。儘管如此,
Id
它仍然是該關係的主鍵,但它不能辨識您期望(ed)它的實體。它不辨識“人”,而是辨識其他事物,例如“某人輸入個人數據的事件”。