代码之家  ›  专栏  ›  技术社区  ›  smellerbee

在apache配置单元的维度表中最好有一个代理项密钥或nk+有效时间

  •  0
  • smellerbee  · 技术社区  · 7 年前

    将代理项密钥设置为usavirginarichmond20110101还是使用配置单元中的row_number()创建实际的数字密钥更好?

    为什么一种方法比另一种更好?

    2 回复  |  直到 7 年前
        1
  •  0
  •   RADO    7 年前

    (注意术语:自然键的组合称为“组合键”,而不是代理键,它仍然是“自然键”。代理密钥(也称为合成密钥)是一个序列整数,没有业务含义。

    简而言之:既然你的维度是SCD2,那么一定要使用代理/合成键。使用自然/复合密钥处理SCD是一种痛苦。

    更长的答案: 代理(SK)与自然密钥(NK)的设计是一个正在进行的争论。各有利弊。我的方法是 总是

    1. SCD的处理要容易得多。如果你有scd,使用自然密钥是相当麻烦和丑陋的。合成钥匙没有问题;

    2. 全系统一致性:由于SCD的原因,您很可能必须在数据仓库中使用SKs,至少在某些表中是这样。因此,在所有表中始终使用它们是有意义的。混合SK和NK设计是丑陋的;

    3. 复合NKs通常可以是大型复杂的字母数字字符串。这意味着它们可能会大大增加表的大小,而连接可能会更慢。SK是一个简单的整数,具有可预测的大小和一致的连接速度;

    还有其他一些考虑,但是根据我的经验,系统地使用代理键可以使DW设计更可靠和高效。

        2
  •  1
  •   leftjoin    7 年前

    还有像这样的代理密钥 usavirginarichmond20110101 会给你吗?完全扫描,因为筛选将在substr上。所以,保持 country, state, city and effective_date 分别作为密钥和分区 effective_date .

    推荐文章