【问题标题】:Oracle Constraints: mix unique and check constraintsOracle 约束:混合唯一约束和检查约束
【发布时间】:2014-03-25 09:36:54
【问题描述】:

我面临以下问题: 我想创建一个独特的和检查约束的组合。

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

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

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 的保险,只要期间不相互交叉。

这类问题有解决办法吗?

感谢任何提示!

干杯穆埃拉

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      相关资源
      最近更新 更多