使用日期维度表而不是直接存储日期有什么好处?

Rub*_*uck 4 sql sql-server database-design

我需要存储相当大的数据历史.我一直在研究存储这种存档的最佳方法.似乎数据仓库方法是我需要解决的问题.强烈建议使用日期维度表而不是日期本身.任何人都可以向我解释为什么一个单独的表会更好?我没有必要总结任何数据,只需在过去的任何一天快速有效地访问它.我确定我错过了一些东西,但我只是看不出如何将日期存储在一个单独的表格中比在我的档案中存储日期更好.

我找到了这些有启发性的帖子,但没有什么能完全回答我的问题.

Aar*_*and 7

那么,一个优点是,作为一个维度,您可以在另一个表中存储日期的许多其他属性 - 它是假日,是工作日,它是什么财政季度,特定的UTC偏移是什么(或多个)时区等等.其中一些你可以在运行时计算,但在很多情况下,它更好(或唯一可能)预先计算.

另一个是如果你只是将DATE存储在表中,你只有一个选项用于指示缺少日期(NULL),或者你需要开始编写像1900-01-01这样无意义的令牌日期来表示一件事(因为你丢失了)不知道)和1899-12-31意味着另一个(因为任务仍在运行而失踪,该人还活着等).如果您使用维度,则可以有多行代表DATE未知/缺失的具体原因,而没有任何"魔术"值.

就个人而言,我宁愿只存储DATE,因为它小于INT(!)并且它保留了各种与日期相关的属性,能够执行日期数学等.如果缺少日期的原因很重要,我总是可以在表格中添加一列来表明这一点.但我正在回答其他人的数据仓库帽子.