gpt4 book ai didi

database - 在数据仓库中表示时间间隔的最佳做法是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:44:38 25 4
gpt4 key购买 nike

特别是我正在处理 2 型 Slowly Changing Dimension并且需要表示特定记录处于事件状态的时间间隔,即对于每条记录,我都有一个 StartDate 和一个 EndDate。我的问题是关于是使用封闭 ([StartDate,EndDate]) 还是半开放 ([StartDate,EndDate)) 间隔来表示这一点,即是否在间隔中包括最后一个日期。举一个具体的例子,假设记录 1 从第 1 天到第 5 天处于事件状态,从第 6 天开始记录 2 开始事件。我是否将记录 1 的 EndDate 设置为 5 或 6?

最近我开始接受一种想法,即半开区间最好基于,除其他外,Dijkstra:Why numbering should start at zero。以及数组切片的约定和 Python 中的 range() 函数。将其应用于数据仓库上下文,我会看到半开区间约定的优势如下:

  • EndDate-StartDate 给出记录处于事件状态的时间
  • 验证:下一条记录的开始日期将等于上一条记录的结束日期,这很容易验证。
  • 面向 future :如果我以后决定将我的粒度从每天更改为更短的时间,那么切换日期仍然保持精确。如果我使用闭区间并存储时间戳为午夜的 EndDate,那么我将不得不调整这些记录以适应这一点。

因此,我更喜欢使用半开区间方法。但是,如果有一些广泛采用的使用闭区间方法的行业惯例,那么我可能会动摇而宁愿采用它,特别是如果它基于实现此类系统的实践经验而不是我的抽象理论。

最佳答案

我见过封闭式和半开放式两种版本。出于您所说的原因,我更喜欢半开。

在我看来,半开版本使预期行为更清晰并且“更安全”。谓词 ( a <= x < b ) 清楚地表明 b 打算在区间之外。相反,如果您使用闭区间并在 SQL 中指定 (x BETWEEN a AND b),那么如果有人不明智地使用一行的结束日期作为下一行的开始,您会得到错误的答案。

将最新的结束日期默认为您的 DBMS 支持的最大日期,而不是 null。

关于database - 在数据仓库中表示时间间隔的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4264947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com