본문 바로가기
카테고리 없음

[DB] 무결성 제약조건

by 라이프리 2021. 8. 29.

 무결성은 무엇이고 왜 지켜야 할까?

데이터 무결성integrity이란 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말합니다. 여기서 키워드는 "일관성"과 "정확성"입니다. 이 두가지가 없는 데이터베이스는 신뢰할 수 없기 때문입니다.

 

무결성 제약조건이란 쉽게말해 이 "무결성"을 지키기 위해 DBMS가 사용자의 삽입, 삭제, 수정 행위에 제약을 거는 것입니다. 예를 들어, DB관리자가 졸업한 학생의 데이터를 삭제했다고 가정한다면, "설립일부터 졸업한 학생을 포함한 경영학과의 학생 수는 몇명인가?"라는 물음에 답할 수 없게 됩니다. 현재 DB에 있는 데이터를 뽑으면 재학중인 학생의 데이터만 나오게 될 것이기 때문입니다. 만약 DB관리자가 삭제 쿼리를 실행했을 때, 무결성 제약조건에 의해 삭제할 데이터가 보존되었다면 이러한 일은 발생하지 않았겠죠?

 

 무결성 제약조건의 종류

무결성 제약조건에는 다음의 세가지가 있습니다.

1) 도메인 무결성 제약조건

2) 개체 무결성 제약조건

3) 참조 무결성 제약조건

 

 도메인 무결성 제약조건

도메인 제약domian constraint이라고도 합니다. 릴레이션 내의 투플(행)들이 각 속성(열)에 지정된 도메인(VARCHAR, INTEGER, STRING ...)에 해당하는 값만 가져와야 한다는 제약조건입니다.

 

TYPE, NULL/NOT NULL, DEFAULT, CHECK 등을 사용하여 지정할 수 있습니다.

 

 개체 무결성 제약조건

기본키 제약primary key const. 라고도 합니다. 기본키는 빈 값이 아니어야(NOT NULL)하며 다른 키와 구분되는 유일한 값(UNIQUE)이어야 합니다.

CREATE TABLE BOOKS(
	ID INT NOT NULL PRIMARY KEY
    NAME VARCHAR(50) NOT NULL
    PRICE INT NOT NULL
)

 

 참조 무결성 제약조건

외래키 제약조건foregin key const.라고도 합니다. 릴레이션(테이블)간의 참조 관계를 선언하는 제약조건입니다.

참조되는(제공하는) 부모 릴레이션(테이블)과 참조하는(제공받는) 자식 릴레이션이라고 하는데, (자식 릴레이션의 외래키, 도메인) = (모 릴레이션의기본키, 도메인) 의 관계가 성립해야 합니다.이유는 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 값도 영향을 받기 때문입니다. 만약, 자식 릴레이션이 참조하고있는 부모 릴레이션의 값을 수정하면 참조 무결성 제약조건에 의해 쿼리가 실행되지 않습니다.

 

아래 표는 부모 릴레이션에서 투플을 삭제할 경우에 각 명령어별로 수행되는 동작입니다.

명령어 동작
RESTRICTED 자식 릴레이션이 참조하고 있으면 부모 릴레이션의 삭제 작업 거부
CASCADE 해당 기본키를 참조하고 있는 자식 릴레이션 관련 투플을 같이 삭제함
DEFAULT 자식 릴레이션의 관련 투플을 미리 설정해 둔 값으로 변경함
NULL 자식 릴레이션의 관련 투플을 NULL 값으로 설정(이때, NOT NULL인 경우 에러 발생)

 

 

 

참고: SQL Server로 배우는 데이터베이스 개론과 실습 2판(박우창, 남송휘, 이현룡/ 한빛아카데미)

댓글