没有代理键的 SCD 1 维

SCD 1 dimension without surrogate key

This reference to Kimball group 声明所有维度都应该有代理键,除了一些非常可预测的维度,例如日期维度。

我的情况与 SCD Type 1 Wiki page 中描述的情况完全相同:

Technically, the surrogate key is not necessary, since the row will be unique by the natural key (Supplier_Code).

数据是在没有代理键的情况下从操作系统加载的,而我在 ETL 中基于单个且唯一的 xxx_code 列计算代理键。 SCD 类型 1,满载。

是否有任何理由在我的案例中使用代理键而不是从 xxx_code 列创建自然键?

代理键有一定的优势:

  • 它们保护数据,因此内置密钥不需要随处可见。
  • 它们允许更改代理键。
  • 代理键通常是数字,比复合键或字符串更有效。

综上所述,自然键有时可能非常有用。例如,我使用相当复杂的系统链。在每个系统中引入新密钥只会让人感到困惑——例如,这是产品代码。

尽管我偏向代理键,但在这种情况下自然键还是很有用的。重要的是这些键是主键,它们确实不能更改值,并且它们 - 最好 - 数字(对于外键关系更有效)。