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:为啥事实表和维度表之间的所有外键都应该是代理键?的主要内容,如果未能解决你的问题,请参考以下文章

维度与事务数据库?

数据库——事实表和维度表

“常规”数据透视表和 olap 类型数据透视表之间的区别

结合事实表和维度表的SQL语句?

没有FK时如何找到维度表和事实表之间的关系?

SSAS CUBE 2 个事实表和 1 个维度