Oracle约束:混合唯一和检查约束

时间:2014-03-25 09:36:55

标签: sql oracle constraints unique-constraint check-constraint

我遇到以下问题: 我想创建一个独特和检查约束的混合。

这可能比数据库的责任更多的业务逻辑,但仍然。

我有一个具有以下结构的表:

desc INSURANCE;

Name              Null     Typ           
----------------- -------- ------------- 
ID                NOT NULL NUMBER        
CUST_ID           NOT NULL NUMBER        
CONTRACT_TYPE     NOT NULL NUMBER
FROM_DATE         NOT NULL DATE          
TO_DATE           NOT NULL DATE   

设计本身可能是错误的,这只是一个例子。

我想以这种方式有一个约束:

alter table INSURANCE 
add constraint unique(CUST_ID, CONTRACT_TYPE)
and check (FROM_DATE not between FROM_DATE and TO_DATE)
and check (TO_DATE   not between FROM_DATE and TO_DATE) ;

用文字说明:只要周期不相交,就允许两个保险使用相同的CUST_ID和CONTRACT_TYPE保险。

这种问题有解决办法吗?

感谢任何提示!

干杯muellae

2 个答案:

答案 0 :(得分:1)

您可能需要基于函数的约束。我不会在这里详细介绍,因为那里已经有大量的资源 - 只是Google的“基于Oracle功能的约束”,你会得到很多。我不想推测性能影响 - 我认为你的陈述应该是业务逻辑100%是正确的。不要在您的数据库中丢弃垃圾数据,在源头拒绝它。

答案 1 :(得分:1)

您可以使用'之前'触发器。在触发器代码中执行您描述的检查,如果找到任何现有行,则引发异常。