使用代理键的缺点是什么?

ige*_*elr 0 database-design primary-key surrogate-key candidate-key

我正在使用 MS SQL Server,但在一般数据库设计中,我想知道当数据库中的每一行都有其自动生成的代理键值时会出现什么问题。

我知道一些优点,比如主键不需要标识没有NULL的唯一列,不需要管理复合主键,范式更容易管理,唯一性有保证。

我想知道,是否有任何关于性能或索引结构等的充分理由应该使我们使用真实世界的事实键而不是代理键?

谢谢。

SQL*_*tor 5

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

  1. 使用自然键可以显着减少查询需要执行的连接数。使用代理键,您将始终必须连接回原始表以获得有意义的值。
  2. 代理键“抽象”了用户从优化器中寻找的实际值,这显着阻碍了统计数据的有用性。
  3. 自然键强制逻辑一致性并防止重复。代理键作为一种神奇的解决方案经常被滥用,而不考虑候选键,从而导致数据的逻辑重复。

虽然有(罕见的)案例证明使用代理键是合理的,但最先进的是我见过的 99.9% 的数据库只是使用这种“神奇的一刀切”解决方案,对性能、模块化和数据一致性产生不利影响。

要了解更多相关信息,请观看在 2017 年硅谷代码夏令营上就该主题进行的会议