无代理键的 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 维的主要内容,如果未能解决你的问题,请参考以下文章