小编Dav*_*ock的帖子

如何强制确保与时间维度关联的唯一性?

我有一个数据库表AB,它跟踪AB随着时间的推移的关联:

create table AB columns (
   ARef ...,  -- FK of A
   BRef ...,  -- FK of B
   Since as Timestamp,
   Until as Timestamp,
   SomeAttrib1 ...,
   SomeAttrib2 ...
);
Run Code Online (Sandbox Code Playgroud)

我想声明一个唯一的键,以便相同的 A 和 B在相同的时间间隔内只能关联一次

我可以使用什么策略来表达这种约束?显然,仅进行 PK 是ARef,BRef,Since,Until不够的 - 这只会防止完全相同间隔的重复。我需要考虑一行的间隔如何与表中其他行的间隔重叠或不重叠。

要考虑的参数:

  • 我使用的是 SQL Server 2012,但我也很想知道其他 RDBMS 中有哪些可用的工具。
  • 虽然我意识到保留这个“历史”或“时间维度”可以被认为是对数据库的“分析”使用,但我不想要一个使用“维度”或“立方体”的解决方案......这是一个普通的需要为不同时间发生的关联分配不同属性的应用程序的事务数据库。
  • 我并没有特别关注时间戳……如果它们有帮助,我很乐意考虑“间隔”数据类型。

database-design datatypes unique-constraint

6
推荐指数
1
解决办法
2846
查看次数