【问题标题】:Use of natural key in date dimension在日期维度中使用自然键
【发布时间】:2015-08-07 08:31:23
【问题描述】:

我正在努力理解在日期维度表中具有自然键的概念。

我总是看到在维度表中创建了一个随机代理键。但是我最近读到,在日期维度中使用自然键,例如 20150806 用于 Aug-06-2015 效果更好,并且在查找和反向查找时具有可观的性能提升 与自然代理键 int 相比时的事实表。

我不明白它会如何提高性能。即使我们将这个花哨的键用于日期维度,我们仍然需要在事实和维度之间使用join

如果有人对此有任何见解,请介意分享知识。如果你能跟进一个例子,我将不胜感激。

【问题讨论】:

  • 它可以很容易地按日期对大事实表进行分区。这将提高性能。也可以避免 ETL 期间的代理键值查找

标签: sql-server data-modeling dimension fact primary-key-design


【解决方案1】:

没有性能提升——密钥只是日期记录的任意标识符。在商业应用程序中,我通常使用从 2000 年 1 月 1 日开始的日期偏移量作为 smallint。使用较小的整数有一些好处,因为日期键存在于很多记录中,它有助于减小记录大小(从而增加可缓存记录的数量)。

对日期使用“自然”键值的唯一真正优势是,可以使用或浏览该表,而不必加入日期维度表,并且具有一些可见的“词法”含义。

但在数据仓库的上下文中它根本没有帮助。

【讨论】:

  • 你提出的第二点正是我无法理解的。我的意思是确定如果在 Fact 中有一个日期外键为 20150806 的条目,我会知道日期而无需返回日期维度,我完全明白这一点。但是,如果我对像哪一周这样的事情感兴趣怎么办。如果我想切片和切块更多,我将不得不回到日期维度。你明白我的意思吗??
  • 在 Curt 的回复中,他说“......无需加入日期维度......”换句话说,如果您只按单个日期或日期范围进行过滤。如果您按周过滤或排序或聚合,则需要加入。即使按单个日期过滤,也不一定保证查询计划不会加入。
猜你喜欢
  • 2012-08-25
  • 2012-01-14
  • 2019-11-27
  • 1970-01-01
  • 2021-05-26
  • 2023-03-19
  • 1970-01-01
  • 2011-06-23
  • 2016-10-14
相关资源
最近更新 更多