我需要存储相当大的数据历史。我一直在研究存储此类文件的最佳方法。似乎数据仓库方法是我需要解决的问题。似乎强烈建议使用日期维度表而不是日期本身。谁能向我解释为什么单独的 table 会更好?我不需要总结任何数据,只需在过去的任何一天快速有效地访问它。我确定我遗漏了一些东西,但我看不出将日期存储在单独的表中比将日期存储在我的文件中更好。
我找到了这些有启发性的帖子,但没有什么能完全回答我的问题。
最佳答案
嗯,一个优点是,作为一个维度,您可以在另一个表中存储日期的许多其他属性 - 它是假日,是工作日,它在哪个财政季度,特定(或多个)时区等。其中一些您可以在运行时计算,但在很多情况下,最好(或仅可能)预先计算。
另一个是,如果您只是将 DATE 存储在表中,那么您只有一个选项来指示丢失的日期 (NULL),或者您需要开始编写无意义的标记日期,例如 1900-01-01 来表示一件事(丢失是因为您不知道)和 1899-12-31 表示另一个(因为任务仍在运行而丢失,该人还活着等)。如果使用维度,则可以有多个行来表示 DATE 未知/缺失的特定原因,而没有任何“魔法”值。
就我个人而言,我更愿意只存储一个 DATE,因为它比一个 INT (!) 小,并且它保留了各种与日期相关的属性、执行日期数学的能力等。如果日期丢失的原因很重要,我总是可以在表格中添加一列来表明这一点。但我是带着别人的数据仓库帽子回答的。
关于sql - 与直接存储日期相比,使用日期维度表有什么优势?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21312739/