본문 바로가기
DATABASE/ORACLE

[Oracle] 무결성 제약조건

데이터 무결성







무결성 제약 조건(Data Integrity Constraint Rule)이란?

테이블에 부적절한 자료가 입력 되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러가지 규칙을 말한다.

무결성 : 데이터베이스 내에 있는 데이터의 정확성 유지

제약 조건 : 바람직하지 않은 데이터가 저장 되는 것을 밪지 하는것


데이터 무결성 제약조건의 특징

● 테이블 생성 시 무결성 제약조건을 정의하여 프로그래밍 과정을 줄여준다.

● 데이터베이스 서버에 의해 무결성 제약조건이 관리되어 데이터 오류 발생 가능성을 줄여준다.

● 테이블에 대해 정의되고 데이터 딕셔너리에 저장 된다.

● 일시적으로 활성화 또는 비활성화 할 수 있다.


무결성 제약 조건 

역할 

NOT NULL 

NULL을 허용하지 않는다 

UNIQUE 

중복된 값을 허용하지 않는다. 항상 유일한 값을 갖도록 한다 

PRIMARY KEY  (기본 키)

NULL을 허용하지 않고 중복 된 값을 허용하지 않는다

NOT NULL 조건과 UNIQUE 조건을 결합한 형태이다 

FOREIGN KEY  (외래 키)

참조되는 테이블의 칼럼의 값이 존재하면 허용한다 

CHECK 

저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용한다 



NOT NULL 제약 조건


● 특정 컬럼은 반드시 값이 입력되도록 필수 입력 컬럼으로 지정하는 것

NOT NULL은 INSERT 시 즉, 데이터 입력시에 누락이 되어서는 안되는 부분이다.

NULL 값이 들어가게 되면 오류가 난다



UNIQUE 제약조건


● 특정 컬럼에 대해 자료가 중복되지 않게 하는 것 (지정된 컬럼에는 유일한 값만이 저장되게 하는 것이다)

UNIQUE는 해당 테이블에 있어서는 존재하는 값이 유일해야 한다. 만일 INSERT 또는 UPDATE 시, 제약이 걸려 있는 컬럼에 동일한 데이터가 존재 한다면 오류가 난다. 이때, NULL 값에 대해서는 UNIQUE 제약이 적용되지 않는다. 즉, NULL 값은 데이터로 인식하지 않기 때문에 해당 컬럼에 NULL 데이터행이 여러개 존재 가능하다



PRIMARY KEY 제약조건


● UNIQUE 제약조건 + NOT NULL 제약조건

● 컬럼명과 자료형을 기술한 다음 PRIMARY KEY를 기술하면 된다

PRIMARY KEY는 하나의 테이블에 있는 데이터들을 식별하기 위한 기준으로 인식되는 제약 조건이다.

한개의 테이블에 하나만 생성이 가능하며, PRIMARY KEY는 NOT NULL + UNIQUE의 속성을 가진다. 즉, NULL 값이 있으면 안되고 해당 컬럼의 데이터는 중복되지 않고 유일해야 한다. UNIQUE에서와 같이 여러 컬럼들을 조합해서 지정 할 수 있다.



FOREIGN KEY 제약조건


해당 컬럼에 참조하는 테이블로부터 존재하는 값들만 사용한다는 의미의 제약조건이다.

만일 참조하는 테이블에 해당하는 값이 없을시에는 INSERT, UPDATE시에 오류가 나게 된다. 외래키는 여러개의 컬럼에 중복적으로 적용 가능하다.

외래키로 두 테이블이 부모 테이블과 자식 테이블로 관계를 맺고 있을시에 자식 테이블이 참조하는 데이터는 부모 테이블에서 삭제가 불가능 하다


※ 참조의 무결성은 테이블 사이의 관계에서 발생하는 개념

조인이나 서브쿼리를 할 때 사원 테이블에 없는 상세 정보는 부서 테이블에서 찾아오는데 사원 테이블에 저장된 부서번호가 테이블에 없다면 참조 할 때 무결해야 한다는 조건에 위배 된다.


참조의 무결성은 두 테이블 사이(사원 테이블, 부서 테이블)의 주종 관계에 의해서 결정 되는데, 주체가 되는 테이블은 부모 테이블이고 종속이 되는 테이블은 자식 테이블이 된다.


사원은 회사 내에 존재하는 부서에 소속되어 있어야 한다.

위와 같이 표현된다면 부서가 주체 사원이 종속이 된다.



※ 주의점 : 부모 키가 되기 위한 컬럼은 반드시 부모 테이블의 기본키(PRIMARY KEY)나 유일키(UNIQUE)로 설정되어 있어야 한다는 점이다.


부모 테이블 - PRIMARY KEY or UNIQUE

자식 테이블 - FOREIGN KEY



CHECK

조건에 부합하는 데이터만 입력이 가능하도록 하는 제약 조건이다

조건에는 기본 연산자나 비교 연산자 IN,NOT IN등등이 사용 가능하다






컬럼에 제약 설정하기


제약조건은 CREATE TABLE 명령으로 테이블을 생성 할 때 테이블에 대해서 제약을 걸 수도 있고, 컬럼에 제약을 걸 수도 있다.


컬럼 레벨의 제약조건은 컬럼을 정의 할 때 해당 컬럼별로 지정하는 제약조건으로 특히 NOT NULL제약 조건은 컬럼 레벨에서만 정의 할 수 있다


1
2
3
4
5
6
7
8
9
10
11
12
SQL> CREATE TABLE test03(
    aa NUMBER NOT NULL,
    bb NUMBER NOT NULL UNIQUE,
    cc VARCHAR(10)
    );
 
테이블이 생성되었습니다.
 
 
-- aa 컬럼에는 NOT NULL 제약이, bb 컬럼에는 NOT NULL 제약과 UNIQUE 제약이 걸려있다. 
 
-- 이런 제약을 컬럼에 대해 제약이라고 한다. 
cs



테이블에 제약 설정하기


테이블 레벨의 제약조건은 제약조건이 하나 이상의 컬럼을 사용하거나, 하나의 컬럼에 두개 이상의 제약조건을 지정하는 경우 사용한다.


1
2
3
4
5
6
7
8
9
10
SQL> CREATE TABLE test04(
  2  ee NUMBER NOT NULL,
  3  ff NUMBER NOT NULL,
  4  gg VARCHAR(10),
  5  PRIMARY KEY(ee,ff)
  6  );
 
테이블이 생성되었습니다.
 
-- 한 개의 제약(PRIMARY)을 복수의 컬럼(ee, ff)에 설정하는 테이블 제약
cs


'DATABASE > ORACLE' 카테고리의 다른 글

[Oracle] VIEW  (6) 2018.04.23
[Oracle] Transaction  (3) 2018.04.21
[Oracle] SQL DML / DDL  (2) 2018.04.21
[Oracle] SQL 서브쿼리  (2) 2018.04.21
[Oracle] SQL Outer Join / ANSI Join  (1) 2018.04.20