業務主鍵
由真實世界中的屬性構成的鍵
在關係型資料庫設計中,業務主鍵是一個由以及真實存在於世界中的屬性構成的鍵。舉例來說,一個美國公民的社會安全號碼可以被用作一個業務主鍵。在其他的表達方式中,一個業務主鍵是和行內屬性具有邏輯關係的候選鍵。
業務主鍵對於邏輯主鍵的主要優勢在於(邏輯主鍵在脫離資料庫環境時沒有任何意義)業務主鍵已經存在,因此沒有必要去添加新的人工的列到定義中。使用業務主鍵(當存在一個可以被識別的業務主鍵時)也會簡化數據的質量:業務主鍵確保了對於每個只會存在唯一一條對應的行;「真相只有一個版本」這點是可以被驗證的,因為業務主鍵是基於對真實世界的觀察結果。
選擇業務主鍵的主要不足在於業務主鍵的值可能會發生改變,並且關係型資料庫引擎可能不能夠通過關聯的外鍵來擴散這種改變。舉例來說,如果 person_name 被用作 person 表的主鍵。然後一個 person 記錄的 name 由於結婚而發生了改變(在傳統西方國家,女性婚後會改為丈夫的姓),然後所有的一對多的關聯表都因此需要更新。次級的不足在於選擇業務主鍵是在識別主鍵。主鍵必須包含可以唯一識別某一行的屬性。然而,在一張表上創建一個業務主鍵可能是困難的或者會導致更多的約束。舉例來說,如果 person_name 被用作 person 表的主鍵,許多 person 可能會使用相同的名字,因此除了第一條記錄以外的數據都會因為重複性被拒絕添加到表中。唯一性約束可以通過添加額外的列(比如 street_address)到主鍵中以提高唯一性來克服。