Database-Design

外鍵是否必須是另一個表中的主鍵?為什麼?

  • May 20, 2021

我是數據庫實現的新手。我想知道外鍵是否需要成為另一個表的主鍵。

外鍵不是唯一的——它可能有重複的條目。如果它必須是另一個表的主鍵,那麼為什麼有必要呢?

我認為任何列都可以是外鍵,因為您可以在任何列上放置條件。

正如您所指出的,引用列可能不是唯一的。如果引用的列也不是唯一的,那麼您已經創建了多對多關係,實現起來很痛苦,並且可能會導致維護數據完整性的問題。

例如,我在表 1 中有兩行,在引用的列中具有相同的值。我在表 2 中也有兩行,在引用列中具有相同的值。然後我更改表1中的一行;表 2 中的哪些行也應該更新?

如果引用的列是唯一的,但不是主鍵,那麼您的表可能處於“異常形式”,並且附加的唯一列可能是多餘的。對此的測試是問自己兩個問題:

  1. 如果我將唯一列設置為新的主鍵,並刪除舊的主鍵列,我會失去有關實體的任何數據嗎?如果不是,則您的表格處於異常狀態。
  2. 唯一列可以在實體的生命週期內更改嗎?如果不是,則列構成關鍵候選鍵。

在實踐中,有時對錶進行非規範化有很好的理由,但必鬚根據具體情況仔細考慮這些理由。

請注意,可以引用唯一非主鍵列或列組。但是,由於從概念上講,主鍵是行的“ The ”規範標識符,因此引用主鍵更有意義。

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