【问题标题】:OLAP: Why should all foreign keys between fact and dimension tables be surrogate keys?OLAP:为什么事实表和维度表之间的所有外键都应该是代理键?
【发布时间】:2011-12-21 04:54:14
【问题描述】:

我正在阅读一篇关于 OLAPOLAP Fact Tables 的 Wikipedia 文章,文章指出

事实表和维度表之间的所有外键都应该是代理项 键,而不是操作数据中重复使用的键。

但它没有说明原因。 那么,为什么要

事实表和维度表之间的所有外键都应该是代理项 键,而不是操作数据中重复使用的键。

?

【问题讨论】:

    标签: olap


    【解决方案1】:

    来自维基百科对Dimension Table的详细解释:

    建议key field是一个简单的整数,因为key value没有意义,只用作事实表和维度表的连接字段。 代理维度键的使用带来了以下几个优点:

    • 性能 - 如果使用单个字段代理键,连接处理效率会更高,
    • 从操作密钥管理实践中缓冲 - 防止在长时间休眠后可能重新使用或重新分配其自然密钥时,已删除的数据行可能重新出现的表单情况,
    • 映射以集成不同的来源,
    • 处理未知或不适用的连接,
    • 跟踪维度属性值的变化。

    【讨论】:

      【解决方案2】:

      来之不易的知识。

      运营数据中的密钥可能随时更改格式。这样更容易。

      这就像问“我应该使用 SSN 作为users 表的主键吗?”。虽然你(理论上)可以,但这不是一个好主意。

      但我承认,我真的不知道我在说什么。我只记得我们的 Oracle 人员对此事有非常强烈的意见。 :-)

      【讨论】:

        【解决方案3】:

        我永远不会使用 SSN 作为任何表的主键。这些信息需要大量保护。将其用作 PK 意味着它将作为外键连接出现在其他表中。即使是公司独有的员工 ID,也不应使用其他方面不受影响的员工 ID。代理键工作得更快。它们允许将维度设置为 SCD 类型 2。即使您认为只需要类型 1,也可能会发生一些变化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-28
          • 2013-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-21
          相关资源
          最近更新 更多