前言
在關聯式資料庫設計中,主鍵約束與唯一性約束都是確保資料唯一性的關鍵機制,但它們的用途與行為有本質區別。理解這些差異,能幫助您在建模時做出更精準的選擇。
兩大核心差異
1. 參考完整性的支援程度不同
主鍵約束是外鍵約束的参照對象,兩者共同構建資料庫的參考完整性體系。當您在子表建立外鍵時,必須指向父表的主鍵(或具備唯一性約束的候選鍵)。相比之下,單純的唯一性約束雖然也能被外鍵參考,但在語義上主鍵才是實體識別的標準入口,也是關聯關係的首選錨點。
2. NULL 值處理策略截然不同
- 主鍵欄位:絕對禁止 NULL,每一列都必須包含有效值,確保實體可被唯一識別。
- 唯一性約束欄位:允許 NULL(依資料庫實作而定,大多數主流資料庫允許單一 NULL,部分允許多個 NULL)。這意味著您可以在非主鍵的業務欄位(如身分證字號、Email)上套用唯一性約束,同時保留「尚未填寫」的彈性。
實務建議
兩者皆能保證資料唯一性,但適用場景不同:
- 需建立父子表關聯、作為實體核心識別碼時 → 主鍵約束。
- 業務上需防止重複,但非實體識別碼,且可能暫時為空(如備用電話、護照號碼)時 → 唯一性約束。
正確選擇約束類型,不僅能維護資料品質,更能讓資料庫結構清晰表達業務語義。