当前位置: 首页 > 面试题库 >

与直接存储日期相比,使用日期维度表有什么优势?

严元白
2023-03-14
问题内容

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


问题答案:

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

另一个是,如果您仅将DATE存储在表中,则只有一个选项可以指示缺少的日期(NULL),或者您需要开始制作无意义的令牌日期(例如1900-01-01)来表示一件事(因为(不知道)和1899-12-31来表示另一个(由于任务仍在运行,此人仍在世等而丢失)。如果使用维度,则可以有多行代表DATE未知/缺失的特定原因,而没有任何“魔术”值。

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



 类似资料:
  • 这是我的Firebase结构 我想在每个用户的第二个名字下面的“预订”下存储一天中的日期和时间,然后选择一天中的日期和时间。 这是我到目前为止用错误的方法得到的结果。它在名为“MyBookings”的单独子节点下设置日期 基本上,我所做的是单击一个显示日期和时间选择器的EditText,我需要将该日期存储在Firebase实时数据库中。 这是我的Firebase参考,我知道它是错误的,但不知道如何

  • 假设我有一些账单,上面有开始日期和结束日期。 我要检查的商业规则是 例如,3月10日到4月9日大约相隔一个月,所以我用它来检查任何两个连续的账单开始日期(4月10日和3月10日)是否相隔一个月。 现在我的问题是求周期的长度。例如,假设我有以下数据集 我正在使用JodaTime库,所以我说类似这样的话 它返回0,这是正确的,但没有用处。 结果是1,尽管相隔一天。 有什么更好的方法来做到这一点?我可以

  • 问题内容: 用…实现事情 似乎 已经 很简单 了… 与 ngResource相比 ,使用Restangular 有哪些优点/缺点? 1.1.3 将返回承诺,并且可以使用[最新的PRcommit来实现。将来会提供支持来支持Restangular所做的其他动词吗?如果发生这种情况,Restangular似乎将消失并变得不耐烦。 问题答案: 我是Restangular的创建者。 我已经在自述文件中创建了

  • 问题内容: 这篇文章几乎为我回答了这个问题,但是我有特定的需求,没有找到我想要的东西。这就是我的经验。我无法完全绕开它,所以我真正需要的只是指向正确方向的一个点。 假设我有一个如下数组: 我想有一种方法来提供日期(例如“ 2013-02-04 14:11:16”),并有一个函数确定数组中与此日期最接近的匹配项(即为“ 2013-02” -0516:25:07“)。 我将不胜感激任何提示。谢谢!:)

  • 基于egg 封装公共上传类 配置上传路径 config.default.js // 上传文件类型限制 config.multipart = { fileExtensions: [ '.apk' ] // 增加对 apk 扩展名的文件支持 } // add your user config here const userConfig = { // 上传路径配置 upload_path: 'ap

  • 问题内容: 我有一些需要带到合并表(事实)的列。我有一个变更捕获表,它捕获每天记录的变更,如下所示: 在第一次插入期间,End_Date是时间的结束。将具有新Start_Date和Value的新记录添加到源中时,它将被捕获为新条目,并且具有相同Key的先前记录将End_Date更新为新记录的Start_Date。 我正在使用DATE维度,该维度具有Month_Start_Date和Month_En