業務主鍵

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