2013-06-21 2 views
1

필드 a, b 및 c에 대해 고유 제한 조건이있는 테이블을 고려하십시오.예외가있는 고유 제약 조건을 구성하는 방법은 무엇입니까?

create table my_tbl (
    a number, 
    b number, 
    c varchar2(10), 
    ... 
    constraint constr_name_u unique(a,b,c) 
); 

같은 예를 들어 뭔가를 들어 지금은 B < A가 필요하지 않습니다 행이 고유 할 수 있도록 제약 조건을 수정할. 즉, 행에 대해서만 non-uniqueness를 허용하려는 경우 b < a. 다른 모든 행은 여전히 ​​고유해야합니다.

어떻게 '편안한'고유 제한 조건을 만들 수 있습니까?

+0

함수 기반 고유 인덱스의 다른 예 : http://stackoverflow.com/questions/6702367/oracle-function-based-index-selective- uniqueness – maxschlepzig

답변

3

제약 조건에 해당 논리를 코딩 할 수 없습니다.

당신은 아마 같은 작업을 수행 할 수있는, 그러나 고유 기능 기반 인덱스를 생성 할 수 있습니다

CREATE UNIQUE INDEX idx_my_table 
    ON my_table (CASE WHEN a <= b THEN a ELSE NULL END, 
        CASE WHEN a <= b THEN b ELSE NULL END, 
        CASE WHEN a <= b THEN c ELSE NULL END); 

이 오라클은 인덱스 구조에 완전히 NULL 값을 저장하지 않는다는 사실을 활용 . 이렇게하면 b <이 원하는만큼 많은 행을 가질 수 있으며 인덱스 구조에 저장되는 행이 없습니다.

관련 문제