【问题标题】:Why surrogate keys are needed?为什么需要代理键?
【发布时间】:2016-07-21 12:28:28
【问题描述】:

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

我了解有时业务键不是整数,这会使生活(以及连接和索引)变得更加困难。 但是,我不明白为什么要通过添加额外的列来管理唯一标识符来解决 DW 或 RDBMS 的限制?

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

【问题讨论】:

  • 代理键通常是 32 位长的自动递增整数。由于您必须在适用的情况下将行标识符复制为外键,因此与复制长字符串或多列相比,这通常可以节省大量空间。
  • 明白。我不明白为什么 DW 用户必须担心这一点,以及为什么它没有集成 DW 或 RDBMS 软件的功能?
  • 我的猜测是,RDBMS 不想在不必要的情况下强加代理键占用的额外空间。 RDBMS 提供的是一种机制,供 DB 开发人员在需要时定义此类键。
  • 在为 DWH 使用 Data Vault 2.0 方法时,您实际上是使用您提供的想法创建了一个哈希摘要。

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


【解决方案1】:

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

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

  1. 源中的大或复杂自然键 - 正如您已经提到的,源系统可能使用的自然键的性能不如简单整数
  2. 自然键可以在源代码中重复使用 - 我曾经遇到过一个问题,即一旦达到整数可以容纳的最大值,源系统将再次从 1 开始回收键(对于应用程序来说这是有意义的) .数据仓库必须认识到重复的键是全新的记录。
  3. 合并 - 想象两家公司合并在一起。每个公司都有一个Employee 表,其中一个自动递增的整数用作键。每家公司都会有一名员工#1。 DW 仓库将需要一个代理键来区分具有相同 ID 的两个人。

【讨论】:

  • 好点!但是,您的所有观点都归结为我(部分)提到的:不对源系统中使用的键做任何假设,并在 DB SW 级别维护唯一标识符。与每次都重新发明轮子相比,这不是处理问题的正确方法吗?
  • 是的,不对源系统中的键做任何假设,并且很可能使用自动递增整数字段在数据库级别维护唯一标识符。我不确定您所说的“每次都重新发明轮子”是什么意思。
  • 重新发明轮子=让 DB 用户为记录实现唯一 ID,而不是在 DB 软件中对其进行标准化。
  • 不要忘记 Type2 渐变维度 - 如果您采用自然键路线,您的自然键中会自动拥有 +1 字段。
猜你喜欢
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多