为什么需要代理密钥?

时间:2016-07-21 12:28:28

标签: data-warehouse database-administration surrogate-key

我正在阅读有关DW建模的内容,并开始想知道为什么会使用代理键?

我理解有时候商业密钥不是整数,这会使生活(以及joiing和索引)变得更难。 但是,我不明白为什么通过添加额外的列来管理唯一标识符来解决DW或RDBMS的局限性?

这种功能对DW / RDBMS用户是否透明不是更合适,并且条目将自动从系统获取内部标识符?例如,创建整行的SHA-1摘要或其子集(可以某种文本格式表示的那些字段)。

1 个答案:

答案 0 :(得分:1)

使用代理键的原因是您可以控制数据仓库,但很可能无法控制源系统。您今天所做的关于自然键稳定性的假设可能会在将来引发您的问题。

不使用自己的代理键可能会遇到的问题:

  1. 源中的大型或复杂自然键 - 正如您已经提到的,源系统可能使用的自然键效果不如简单的整数
  2. 自然密钥可以在源代码中重用 - 一旦达到整数可以容纳的最大值,源系统将从1开始再循环密钥时遇到问题(对于应用程序而言)有道理)。数据仓库必须认识到重复的密钥是全新的记录。
  3. 合并 - 想象一下两家公司合并在一起。每个公司都有一个Employee表,其中一个自动递增整数用作键。每家公司都有一名员工#1。 DW仓库需要一个代理键来区分共享相同ID的两个人。