【问题标题】:What is the advantage of using a date dimension table over directly storing a date?与直接存储日期相比,使用日期维度表有什么优势?
【发布时间】:2014-01-23 15:38:16
【问题描述】:

我需要存储相当大的历史数据。我一直在研究存储此类档案的最佳方法。似乎数据仓库方法是我需要解决的问题。似乎强烈建议使用日期维度表而不是日期本身。谁能向我解释为什么单独的桌子会更好?我不需要总结任何数据,只需在过去的任何一天快速有效地访问它。我确定我遗漏了一些东西,但我只是看不出将日期存储在单独的表中比仅将日期存储在我的存档中更好。

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

【问题讨论】:

    标签: sql sql-server database-design


    【解决方案1】:

    嗯,一个优点是,作为一个维度,您可以将日期的许多其他属性存储在另一个表中 - 是假期,是工作日,是哪个财政季度,一个 UTC 偏移量是多少特定(或多个)时区等。其中一些您可以在运行时计算,但在很多情况下,最好(或仅可能)预先计算。

    另一种情况是,如果您只是将 DATE 存储在表中,则只有一个选项可以指示丢失的日期 (NULL),或者您需要开始编造无意义的标记日期,例如 1900-01-01 来表示一件事(因为你不知道而失踪)和 1899-12-31 表示另一个(失踪是因为任务仍在运行,人还活着等)。如果您使用维度,则可以有多个行来表示 DATE 未知/缺失的具体原因,而无需任何“神奇”值。

    就个人而言,我更喜欢只存储一个 DATE,因为它比 INT (!) 小,并且它保留了各种与日期相关的属性、执行日期数学的能力等。如果日期丢失的原因很重要,我总是可以在表格中添加一列来表明这一点。但我在回答别人的数据仓库问题。

    【讨论】:

    • 如果您沿着 SSAS 路径构建多维数据集/表格模型,另一个优势是能够使用时间智能功能。
    【解决方案2】:

    假设您去年每天有 1000 个条目。如果您有日期维度,您的查询将获取日期维度中的日期,然后使用连接来收集您感兴趣的一千个条目。如果没有日期维度,您的查询将读取所有 365,000 行以找到一千你要。更快、更高效。

    【讨论】:

    • 您的意思是您的查询不能使用日期列上的索引来查找和忽略其他 364,000 行?
    • 当然可以,我只是大致介绍一下数据仓库的结构。
    • 那是我不太了解的。如果您可以首先将日期作为 pk 的一部分进行索引,那么为什么还要在单独的表上使用 char(8) pk 和 fk 呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2010-12-27
    • 2015-04-06
    • 2013-05-09
    • 2017-05-29
    • 2017-11-24
    相关资源
    最近更新 更多