본문 바로가기

DB/Oracle

Oracle DB #9 데이터 무결성을 위한 제약조건

1. 데이터 무결성을 위한 제약조건

1) 무결성 제약 조건의 개념과 종류

- 데이터 무결성 제약 조건(Data Integrity Constraint Rule)이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러 가지 규칙을 말함

무결성 제약 조건 역할
NOT NULL NULL을 허용하지 않는다.
UNIQUE 중복된 값을 허용하지 않는다. 항상 유일한 값을 갖도록 한다.
PRIMARY KEY NULL을 허용하지 않고 중복된 값을 허용하지 않는다.
NOT NULL 조건과 UNIQUE 조건을 결합한 형태이다.
FOREIGN KEY 참조되는 테이블의 칼럼의 값이 존재하면 허용한다.
CHECK 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용한다.

 

2) 제약 조건 확인하기

- OWNER는 제약 조건을 소유한 사용자명을 저장하는 컬럼

- CONSTRAINT_NAME은 제약 조건 명을 저장하는 컬럼

- CONSTRAINT_TYPE는 제약 조건 유형을 저장하는 컬럼

CONSTRAINT_TYPE은 P, R, U, C 4가지 값 중에 하나를 갖음

CONSTRAINT_TYPE        의미
P PRIMARY KEY
R FOREIGN KEY
U UNIQUE
C CHECK, NOT NULL

- 제약 조건은 5개라고 했는데 제약 조건 유형은 4가지

- 제약 조건 중에 NOT NULL 은 컬럼에 NULL 값이 저장되어서는 안 된다는 조건

- 즉, NOT NULL 조건은 컬럼에 NULL 값을 체크하는 조건으로 처리되기 때문에 CHECK 를 나타내는 C로 표현

- C는 CHECK 조건과 NOT NULL 조건을 모두 포함

 

- 제약 조건 유형은 제약 조건의 이니셜로 표현되지만 FOREIGN KEY 만은 R로 표현

- 이는 FOREIGN KEY는 PRIMARY KEY 를 참조하기 때문에 참조 무결성을 지켜야 함

- 그러므로 참조 무결성(REFERENCE INTEGRITY)의 이니셜인 R을 FOREIGN KEY 의 제약 조건 유형으로 FOREIGN KEY 의 제약 조건 유형이 R인 이유가 REFERENCE INTEGRITY 의 이니셜로 인한 것이라는 것까지만 이해하기 바람

 

- TABLE_NAME은 각 제약 조건들이 속한 테이블의 이름 , 제약 조건 유형이 C인 경우에는 NOT NULL 조건과 CHECK 조건이 모두 포함되는데 NOT NULL 조건인 경우에는 따로 언급되는 내용이 없지만 CHECK 조건일 경우에는 어떤 내용이 조건으로 사용되었는지를 기록하고 있어야 하는데, SEARCH_CONDITION은 제약 조건 유형이 C인 경우 각 행에 대한 조건을 설명

- R_CONSTRAINT_NAME은 제약 조건이 FOREIGN KEY인 경우 어떤 PRIMARY KEY를 참조했는지에 대한 정보를 갖음

 

3) 필수 입력을 위한 NOT NULL 제약조건

- 새로운 사원이 입사하여 사원의 정보를 입력하는데 사원번호와 사원 명이 불 분명하여 데이터가 저장되지 않았다면 누구의 직급인지, 누구의 부서번호인지를 모르게 되므로 자료로서의 의미를 갖기 어렵다.

 

- 따라서 사원의 정보를 입력할 때 반드시 입력해야하는 선택이 아닌 필수 입력을 요구하는 컬럼이 있다면 위와 같이 NULL 값이 저장되지 못하도록 제약 조건을 설정해야 함

- 따라서 사원의 정보를 입력할 때 반드시 입력해야하는 선택이 아닌 필수 입력을 요구하는 컬럼이 있다면 위와 같이 NULL 값이 저장되지 못하도록 제약 조건을 설정해야 함

- NOT NULL 제한 조건은 해당 컬럼에 데이터를 추가하거나 수정할 때 NULL 값이 저장되지 않게 제약을 걸어주는 것으로서 사원번호와 사원명과 같이 자료가 꼭 입력되게 하고 싶을 때 사용

 

a. 칼럼 레벨 정의 방법으로 제약 조건 지정하기

- NOT NULL 제약 조건을 지정하지 않으면 위 예에서처럼 NULL 값이 저장

- 특정 컬럼에 NULL 값이 저장되지 못하도록 하려면 NOT NULL 제한 조건을 설정

- 제약 조건을 설정하는 방법은 컬럼 레벨과 테이블 레벨 두 가지 방식이 있습니다. NOT NULL 제약 조건은 컬럼 레벨로만 정의

 

column_name data_type constraint_type

 

4) 유일한 값만 허용하는 UNIQUE 제약 조건

- UNIQUE 제약 조건이란 특정 칼럼에 대해 자료가 중복되지 않게 하는 것

- 지정된 칼럼에는 유일한 값이 수록되게 하는 것

 

UNIQUE 제약 조건을 설정하여 테이블 생성하기

 

CREATE TABLE EMP03(

EMPNO NUMBER(4) UNIQUE,

ENAME VARCHAR2(10) NOT NULL,

JOB VARCHAR2(9),

DEPTNO NUMBER(2)

);

 

5) 컬럼 레벨로 제약 조건명을 명시해서 제약 조건 설정하기

 

column_name data_type CONSTRAINT constraint_name constraint_type

- 사용자 제약 조건 명을 설정하기 위해서는 CONSTRAINT라는 키워드와 함께 제약 조건 명을 기술하면 됩니다는 것을 확인할 수 있음

- 제약 조건 명(constraing_name)은 다음과 같은 명명 규칙을 준수해서 작성하는 것이 좋음

 

[테이블명]_[칼럼명]_[제약 조건 유형]

 

칼럼 레벨로 제약 조건명 명시하기

 

CREATE TABLE EMP04(

EMPNO NUMBER(4) CONSTRAINT EMP04_EMPNO_UK UNIQUE,

ENAME VARCHAR2(10) CONSTRAINT EMP04_ENAME_NN NOT NULL,

JOB VARCHAR2(9),

DEPTNO NUMBER(2)

);