OLAP:为啥事实表和维度表之间的所有外键都应该是代理键?
Posted
技术标签:
【中文标题】OLAP:为啥事实表和维度表之间的所有外键都应该是代理键?【英文标题】:OLAP: Why should all foreign keys between fact and dimension tables be surrogate keys?OLAP:为什么事实表和维度表之间的所有外键都应该是代理键? 【发布时间】:2011-12-21 04:54:14 【问题描述】:我正在阅读一篇关于 OLAP 和 OLAP Fact Tables 的 Wikipedia 文章,文章指出
事实表和维度表之间的所有外键都应该是代理项 键,而不是操作数据中重复使用的键。
但它没有说明原因。 那么,为什么要
事实表和维度表之间的所有外键都应该是代理项 键,而不是操作数据中重复使用的键。
?
【问题讨论】:
【参考方案1】:来自***对Dimension Table的详细解释:
建议key field是一个简单的整数,因为key value没有意义,只用作事实表和维度表的连接字段。 代理维度键的使用带来了以下几个优点:
性能 - 如果使用单个字段代理键,连接处理效率会更高, 从操作密钥管理实践中缓冲 - 防止在长时间休眠后可能重新使用或重新分配其自然密钥时,已删除的数据行可能重新出现的表单情况, 映射以集成不同的来源, 处理未知或不适用的连接, 跟踪维度属性值的变化。【讨论】:
【参考方案2】:来之不易的知识。
运营数据中的密钥可能随时更改格式。这样更容易。
这就像问“我应该使用 SSN 作为users
表的主键吗?”。虽然你(理论上)可以,但这不是一个好主意。
但我承认,我真的不知道我在说什么。我只记得我们的 Oracle 人员对此事有非常强烈的意见。 :-)
【讨论】:
【参考方案3】:我永远不会使用 SSN 作为任何表的主键。这些信息需要大量保护。将其用作 PK 意味着它将作为外键连接出现在其他表中。即使是公司独有的员工 ID,也不应使用其他方面不受影响的员工 ID。代理键工作得更快。它们允许将维度设置为 SCD 类型 2。即使您认为只需要类型 1,也可能会发生一些变化。
【讨论】:
以上是关于OLAP:为啥事实表和维度表之间的所有外键都应该是代理键?的主要内容,如果未能解决你的问题,请参考以下文章