programing

Oracle DB의 조건부 고유 제약 조건

bestprogram 2023. 6. 21. 22:51

Oracle DB의 조건부 고유 제약 조건

다른 열 값에 따라 열[속성]에 고유한 제약 조건을 적용해야 하는 상황이 있습니다.

예를 들어 테이블(ID, EID, 이름, ISDeleted)과 같은 테이블이 있습니다.

ISDeleted는 null 또는 'y'(활성 또는 삭제됨) 값만 가질 수 있으며, I는 ISDeleted = null일 때만 EID, ISDeleted에 고유한 제약 조건을 만들고 싶습니다. 동일한 ID의 삭제된 레코드가 여러 개 있어도 상관 없기 때문입니다.EID는 null 값을 가질 수 있습니다.

저는 이를 위해 Oracle DB를 사용하고 있습니다.

제약 조건을 만들 수 없습니다.그러나 고유한 기능 기반 인덱스를 만들 수 있습니다.이는 Oracle이 NULL 값을 인덱싱하지 않는다는 점을 활용합니다. 즉, 다음과 같은 모든 행이isDeleted이라NOT NULL인덱스에 포함되지 않으므로 고유 제약 조건이 적용되지 않습니다.

CREATE UNIQUE INDEX one_not_deleted
    ON table_name( (CASE WHEN isDeleted IS NULL
                         THEN eid
                         ELSE null
                      END) );

언급URL : https://stackoverflow.com/questions/10317774/conditional-unique-constraint-in-oracle-db