Database-Design

關於選擇主鍵的問題

  • March 2, 2015

我的場景是我有一個名為 PERSON 的超級類型和兩個子類型 EMPLOYEE 和 CUSTOMER。我在 EMPLOYEE 和 CUSTOMER 中都使用 PERSON 的主鍵 PersonID 作為外鍵。但是,我沒有將它用作 EMPLOYEE 和 CUSTOMER 中的主鍵,而是在它們各自的表中創建了一個名為 EmployeeNum 和 CustomerNum 的新代理主鍵。我想知道如果我這樣做會破壞某種格式良好/規範化的規則嗎?例如,在EMPLOYEE中,我認為personID–>(employeeid,hiredate,hourlywage)和employeeid–>(personid,hiredate,hourlywage)很明顯,基本上這兩個鍵都可以唯一地標識一個唯一的行。在實踐中可以嗎?(還假設我不想要復合主鍵)。

由於 PersonID 和 EmployeeID 都是候選鍵(並且可能會通過唯一性約束實現),因此您提出的表設計滿足 Boyce Codd 範式,因此也滿足第 3 範式。這並不一定是個好主意。原則上,為事物提供替代標識符並不是一件壞事,但在這種情況下,我看不到這樣做的邏輯。

您似乎在說 PersonID 和 EmployeeID 都是“代理”鍵,但在這種情況下,您將在業務域中使用什麼自然鍵?我猜至少其中一個實際上是員工的域密鑰(“自然”密鑰),但是另一個是什麼?如何使用附加密鑰來增強數據完整性或可用性?

代理鍵意味著某些成本:額外的索引;執行數據訪問和操作時的額外查找和連接;更多的程式碼複雜性。使用代理人的決定應謹慎並考慮其優點和缺點。不應該預設假設每個表都需要另一個代理。

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