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

前端之家收集整理的这篇文章主要介绍了数据库 – 在数据仓库中表示时间间隔的最佳做法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
特别是我正在处理类型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给出记录活动的时间
>验证:下一条记录的StartDate将等于上一条记录的EndDate,该记录易于验证.
>未来打样:如果我后来决定将我的粒度从每日更改为更短的时间,那么切换日期仍然保持精确.如果我使用一个封闭的间隔并将EndDate存储为午夜的时间戳,那么我将不得不调整这些记录以适应这种情况.

因此,我倾向于采用半开区间法.然而,如果有一些广泛采用的使用闭区间方法的行业惯例,那么我可能会倾向于使用它,特别是如果它是基于实现这样的系统的实际经验而不是我的抽象理论.

提前感谢任何见解或评论.

解决方法

我已经看到使用的是封闭版和半开放版.出于你所说的理由,我更喜欢半开放.

在我看来,半开放版本使预期的行为更清晰,更“安全”.谓词(a< = x< b)清楚地表明b意图在区间之外.相反,如果您使用闭合间隔并在sql中指定(x BETWEEN a AND b),那么如果某人不明智地使用一行的结尾作为下一行的开头,则会得到错误的答案. 使最新结束日期默认为DBMS支持的最大日期,而不是null.

猜你在找的MsSQL相关文章