Database-Design

使用代理鍵有什麼缺點?

  • March 25, 2019

我正在使用 MS SQL Server,但在一般數據庫設計中,我想知道當數據庫中的每一行都有其自動生成的代理鍵值時會出現什麼問題。

我知道一些優點,例如不需要為主鍵標識沒有NULL的唯一列,也不需要管理複合主鍵,範式更易於管理,並且保證了唯一性。

我想知道,關於性能或索引結構等是否有任何充分的理由讓我們使用真實世界的事實鍵而不是代理鍵?

謝謝。

使用代理鍵有很多缺點,恕我直言,最重要的是:

  1. 使用自然鍵可以顯著減少查詢需要執行的連接數量。使用代理鍵,您將始終必須連接回原始表才能獲得有意義的值。
  2. 代理鍵從優化器中“抽象”了使用者正在尋找的實際值,這極大地阻礙了統計數據的有用性。
  3. 自然鍵強制執行邏輯一致性並防止重複。代理鍵經常被濫用為一種神奇的解決方案,而不考慮候選鍵,這反過來會導致數據的邏輯重複。

雖然有(罕見的)案例證明使用代理鍵是合理的,但最先進的是,我見過的 99.9% 的數據庫只是使用這種“神奇的一刀切”解決方案,對性能、模組化和數據一致性產生不利影響。

要了解更多資訊,請觀看我在 2017 年矽谷程式碼訓練營上就該主題發表的課程。

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