본문 바로가기

Domain/데이터베이스

[데이터베이스] 6. 무결성 제약 조건

무결성 제약 조건

데이터베이스 스키마에 대하여 지정되는 조건으로 데이터 베이스에 저장되는 데이터들이 반드시 만족해야할 조건을 의미한다. 부적절한 정보 입력을 방지하기 위함.

 

RDBMS의 무결성 제약 조건1 - 도메인 무결성 제약 조건

 CHECK, DEFAULT, NOT NULL 등을 활용하여 각 속성의 도메인을 지정하여 입력 오류를 방지

grade_type이라는 학생의 가능한 학점에 대한 도메인 생성

CREATE DOMAIN grade_type AS CHAR
	CHECK (VALUE IN('A','B','C','D','F'));
    
CREATE TABLE course_taken( ...
	student_id CHAR(4) NOT NULL, #NULL 값을 방지
	grade grade_type, # 지정한 학점만 가능
    gpa INTEGER DEFAULT 0.0, # 기본 값을 지정
    ...)
    ;

RDBMS의 무결성 제약 조건2 - 개체 무결성 제약 조건

하나의 테이블에 중복된 값이 존재하지 않게 하기 위함이다. 기본키(PRIMARY KEY)가 중복이 있으며 NULL을 허용하지 않는다. 이외에도 UNIQUE를 이용하여 중복을 방지할 수 있다.

CREATE TABLE student(
	_id CHAR(8) NOT NULL,
    ssn CHAR(13) NOT NULL,
    name CHAR(10) NOT NULL,
    major CHAR(4),
    gpa FLOAT DEFAULT 0.0,
    UNIQUE (ssn), #유니크 지정
    PRIMARY KEY(_id)); #기본키 지정

 

 

RDBMS의 무결성 제약 조건3 - 참조 무결성 제약 조건(외래키 제약 조건)

타 테이블과 연관된 데이터가 입력,수정,삭제 시에도 정확토록 참조관계를 유지하여야 한다. 외래키(FOREIGN KEY)를 지정할 경우 참조 테이블의 기본키이거나 NOT NULL의 조건인 경우에만 가능하다.

CREATE TABLE student(
	_id CHAR(8) NOT NULL,
    ssn CHAR(13) NOT NULL,
    name CHAR(10) NOT NULL,
    major CHAR(4),
    gpa FLOAT DEFAULT 0.0,
    UNIQUE (ssn), #유니크 지정
    PRIMARY KEY(_id),
 	FOREIGN KEY(major) REFERENCES Department(_id) #major는 Department 테이블의 _id 컬럼과 연관   
 ); #기본키 지정

- 참조 무결성 제약 조건 위반의 예시

  • Department에 없는 전공 값을 student에 입력할 경우: child table에서 위반
  • student에서 참조하는 전공의 값을 Department에서 삭제/변경할 경우: parent table에서 위반

위의 참조 무결성 제약 조건 위반 시 DBMS의 관리 정책

  • Child table에서의 위반 시 student 테이블 에서의 거부
  • Parent table에서의 위반 시
    • No action: parent의 갱신/삭제를 허용하지 않음 - 가장 기본적인 처리 방법
    • Set Null: parent가 갱신/삭제 되면  child의 외래키를 Null로 설정한다.
    • Set Defualt: parent가 갱신/삭제 되면 child의 외래키를 default 값으로 설정한다.
    • Cascade: parent의 갱신/삭제 작업을 child에 적용시킨다.
...
FOREIGN KEY(major) REFERENCES Department(_id)
					ON DELETE SET NULL # _id 값의 삭제 시 major는 NULL
                    ON UPDATE CASCADE # _id 값의 갱신 시 해당 major도 같은 값으로 갱신