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