Dav*_*ock 6 database-design datatypes unique-constraint
我有一个数据库表AB
,它跟踪A
和B
随着时间的推移的关联:
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
不够的 - 这只会防止完全相同间隔的重复。我需要考虑一行的间隔如何与表中其他行的间隔重叠或不重叠。
要考虑的参数:
小智 5
我在想,因为这是一个计算,它必须是一个触发器,但在进行一些谷歌搜索时,有更好的选择。
重叠间隔看起来可以被特定的约束模式阻止(http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/03/08/storing-intervals-of-time-with-no-overlaps.aspx )
此幻灯片演示了 PostgreSQL 9.0 及更高版本中的“排除”约束,还涉及触发器等方法的陷阱(http://www.slideshare.net/pgconf/not-just-unique-exclusion-constraints)
这篇题为“非重叠日期约束”的帖子涵盖了 Oracle 的几种方法(http://jeffkemponoracle.com/2012/08/30/non-overlapping-dates-constraint/)
我的 Google 搜索查询是“唯一的时间间隔约束数据库”