您如何在SQL中表示时间多对多关系?在非时间环境下,人们会使用连接表(也就是链接/桥/地图)来连接双方.
添加时间跟踪就像在联结表上包含ValidStart和ValidEnd列一样简单吗?如果你这样做了,你遇到了什么问题(如果有的话)?在这种关系中,是否有更好的方法来跟踪随时间的变化?
如果它有帮助,在我的情况下,我专门使用SQL 2008,时间数据不是双时态的,因为我只跟踪有效时间.
我正在研究一个项目(现在已有几年了),它同时使用时态数据和时间多对多关系.每个表都有ValidFrom和ValidUntil列(仅存储日期).
首先,您必须定义Valid*列的语义,即ValidUntil是否包含在有效范围内或从有效范围中排除.您还需要指定NULL日期是否有效以及它们的含义.
接下来,您需要一些函数,例如dbo.Overlaps2()和dbo.Overlaps3(),它们分别接收2和3个日期范围,如果日期范围重叠则返回1,否则返回0.
最重要的是,我使用dbo.Overlap3(...)= 1定义了多对多关系的视图.
另一点是具有一组函数,这些函数基于2或3个相关表中的日期来计算有效有效范围.
最近我不得不添加功能以允许用户显示所有可用数据,或仅显示当前有效数据.我将此设置保存在users表中,在打开连接时将SPID与用户关联,并在另一组视图中过滤记录.