더북(TheBook)

UNIQUE 제약 조건

SQL 표준에서는 DBMS가 선택적 기능인 ‘널 허용’을 구현하지 않았다면 UNIQUE 제약 조건에 종속되는 컬럼이나 컬럼 집합은 NOT NULL 제약 조건에 종속해야 한다고 명시한다. UNIQUE 제약 조건에 추가된 일부 선택적 기능은 다음과 같다.

UNIQUE 제약 조건이 있는 컬럼에는 NOT NULL 제약 조건이 있어야 하지만, 꼭 그럴 필요는 없다.

UNIQUE 제약 조건이 있는 컬럼에 NOT NULL 제약 조건이 없다면 이 컬럼은 널 값을 여러 개 가질 수 있다(NULL <> NULL이라는 사실의 논리적인 결과다).

DBMS별 구현 내용은 다음과 같다.

DB2 : UNIQUE 제약 조건의 비선택적 부분을 따른다. ‘널 허용’ 기능은 구현되지 않았다.

액세스 : 표준을 따른다.

SQL Server : ‘널 허용’ 기능을 제공하지만 널 값을 하나만 가질 수 있다(즉, 표준의 두 번째 특징을 침해한다).

MySQL : ‘널 허용’ 기능을 포함해 표준을 따른다.

오라클 : ‘널 허용’ 기능을 제공한다. 단일 컬럼에 UNIQUE 제약 조건이 있을 때 (표준의 두 번째 특징에서 알 수 있듯이) 이 컬럼은 다수의 널 값을 가질 수 있다. 하지만 여러 컬럼에 UNIQUE 제약 조건이 명시되어 있을 때 로우 두 개가 적어도 한 컬럼에는 NULL을, 나머지 컬럼에는 NULL이 아닌 동일 값을 담고 있으면 오라클은 이 제약 조건이 침해된 것으로 본다.

PostgreSQL : ‘널 허용’ 기능을 포함해 표준을 따른다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.