无代理键的 SCD 1 维

Posted

技术标签:

【中文标题】无代理键的 SCD 1 维【英文标题】:SCD 1 dimension without surrogate key 【发布时间】:2020-03-18 09:28:35 【问题描述】:

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

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

从技术上讲,代理键不是必需的,因为行将由自然键 (Supplier_Code) 唯一。

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

在我的情况下是否有任何理由使用代理键而不是从 xxx_code 列中生成自然键?

【问题讨论】:

【参考方案1】:

代理键有一定的优势:

它们保护数据,因此内置密钥不需要在任何地方都可见。 它们允许更改代理键。 代理键通常是数字,这比复合键或字符串更有效。

话虽如此,自然键有时可能非常有用。例如,我使用相当复杂的系统链。在每个系统中引入新密钥开始变得令人困惑——例如产品代码。

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

【讨论】:

我可以考虑的另一个场景 - 将来您可能想要更改事实维度连接逻辑。使用单独的 sr 键列会更容易,因为它只需要重新计算维度,并且可能需要重新计算部分/全部事实表。而在自然键的情况下,您将需要添加 sr 键(更改事实表架构),并且可能会更改所有基于您的维度模型的 Power BI/Tableu/其他报告/工具

以上是关于无代理键的 SCD 1 维的主要内容,如果未能解决你的问题,请参考以下文章

如何获取传入事实记录的精确代理键

自动化运维工具Ansible

代理键是如何在 hive 中处理的

SCD缓慢变化维拉链表

iOS 按住Home键的代理

SCD 类型 2 和标识列插入错误