SQL Server时态数据库的时间间隔


SQL #sql server #时态2012-10-23 16:58
时态数据库是包含历史数据或同时也包含当前数据的数据库。如果说数据是事实信息的一种编码表达形式,那么时态数据就是与时间相关事实信息的编码表达形式。

我们现在就开始开发一些合适的表示符号。最初的,同时也是最基本的步骤是将时间间隔定义为一个基本单位,而不是像前文中作为一对分离值处理。

时间间隔到底是什么?可以在时间间隔(从日期4到日期1 0)中供应零件P 1。但“从日期4到日期1 0”指的是什么呢?很显然,它包括日期5,6,7,8和9—那么起始终止日期(日期4和日期1 0)是否包含在内呢?有时我们希望时间间隔包含起始终止日期,而有时则希望它不包括起始终止日期。如果时间间隔包含开始日期4,那么我们说时间间隔对于起始日期是封闭的;否则说它对于起始日期是开放的。同样,如果时间间隔包含日期1 0,那么我们说时间间隔对于终止日期是封闭的;否则说它对于终止日期是开放的。

按照惯例,用括号把起始终止日期括起来表示时间间隔,圆括号表示时间间隔在此点上

是开放的,方括号则表示时间间隔在此点上是封闭的;例如,从日期4到日期10的时间间隔有如下四种:

[d 0 4,d 1 0]
[d 0 4,d 1 0)
(d 0 4,d 1 0]
(d 0 4,d 1 0)

注意:可能认为半开半闭的时间间隔有点奇怪,不过这四种时间间隔各有实际意义,实际上常常会用到这种半开半闭的时间间隔。全封闭的时间间隔则很直观,我们会在下文中经常使用。

如果用诸如[d 0 4,d 1 0]的形式来表示时间间隔,那么就可以将S P F R O M TO中的属性F ROM和TO合并起来,用单个属性D U R I N G来表示,它的值域为interval type。这样做的一个直接好处是避免了从{ S #,F R O M }和{ S #,TO }
中随意选择一个作为主码;另一个直接好处是不会对起始终止时间是否封闭产生歧义,因为
可以用[d 0 4,d 1 0]、[d 0 4,d 1 0)、(d 0 4,d 1 0]、(d 0 4,d 1 0)四种形式来表示时间间隔。还有一个好处是不再需要时间间隔约束“在FROM - TO中TO对应的时间点不能早于F R O M对应的时间点”,因为已经在时间间隔类型中隐含地包括了约束“ F R O M≤TO”。第4个好处是不需要讨论哪些是非真正码的“时态码”,很多约束也可以得到简化。

相关文章

粤ICP备11097351号-1