스물두줄

정보관리기술사 · 개념서 · 데이터베이스

무결성 제약

설명 영상 무결성 제약 · 2:26

왜 배우는가: 무결성 제약은 DBMS가 데이터의 일관성과 정확성을 스스로 지키는 기본 장치이며, 설계와 구현을 함께 묻는 문제로 2개 회차에 반복 출제되었다. 유형(도메인·개체·참조·사용자 정의)을 구분하고 각 유형을 SQL 구문으로 구현하는 방법을 연결해 알아야 답안을 완성할 수 있다.

출제 이력: 제135회 4교시 2번, 제108회 2교시 6번

1. 한 줄 정의와 핵심 키워드

릴레이션 무결성 제약은 데이터베이스에 저장되는 데이터의 정확성과 일관성을 보장하기 위해 DBMS가 강제하는 규칙이다.

핵심 키워드

  • 무결성 제약(Integrity Constraint)
  • 도메인 무결성(Domain Integrity)
  • 개체 무결성(Entity Integrity)
  • 참조 무결성(Referential Integrity)
  • 사용자 정의 무결성(User-defined Integrity)
  • 기본키(Primary Key)
  • 외래키(Foreign Key)
  • CHECK 제약

2. 개념 풀이

쉬운 말로 하면 무결성 제약은 "데이터베이스에 잘못된 값이 들어오지 못하게 막는 규칙"이다. 예를 들어 학번이 비어 있거나 같은 학번이 두 번 들어가면 학생 정보를 구별할 수 없다. 이런 상황을 막는 것이 무결성 제약의 역할이다.

정식 정의는 다음과 같다. 무결성 제약은 릴레이션에 저장될 수 있는 튜플의 집합을 제한하는 조건이며, 이 조건을 만족하지 않는 삽입·갱신·삭제 연산은 거부되거나 보정된다. 제약은 단일 속성, 튜플(속성 조합), 릴레이션 전체에 걸쳐 정의될 수 있다.

관계형 모델에는 세 가지 고유 무결성이 있다. 도메인 무결성은 열의 값이 정의된 도메인(타입·범위) 안에 있어야 한다는 규칙이다. 개체 무결성은 기본키가 NULL이 아니고 유일해야 한다는 규칙이다. 참조 무결성은 외래키 값이 참조 릴레이션의 기본키 값과 같거나 NULL이어야 한다는 규칙이다. 여기에 업무 규칙을 표현하는 사용자 정의 무결성이 더해진다.

개체 무결성에서 기본키는 NULL을 허용하지 않는다. 참조 무결성에서 외래키 NULL은 "관계가 없거나 알 수 없음"을 뜻하므로 허용될 수 있다. 이 차이를 구분해서 쓰는 것이 답안의 정확성을 높인다.

3. 등장 배경과 필요성

초기 파일 시스템에서는 같은 데이터가 여러 프로그램에 중복 저장되었고, 각 응용 프로그램이 자기 방식으로 검증했다. 그 결과 검증 로직이 흩어지고 빠진 곳에서 잘못된 값이 쌓였다. 관계형 모델은 무결성 규칙을 데이터 모델의 일부로 정의하고, DBMS가 모든 응용에 대해 한 곳에서 강제하도록 했다.

데이터 무결성 규칙을 데이터베이스가 책임지면 응용 프로그램이 달라도 같은 결과를 얻는다. 데이터베이스가 이 기능을 지원하지 않으면 무결성 보장은 애플리케이션의 책임이 된다. 따라서 DBMS 차원의 제약 정의는 데이터 품질과 보안의 기반으로 평가된다.

또한 외래키 참조 동작은 CASCADE·RESTRICT·NO ACTION·SET NULL·SET DEFAULT 5가지로 SQL:2003에 규정되어 있다. 이 동작을 정하지 않으면 부모 행 삭제 시 자식 행이 고아 행으로 남아 참조 무결성이 깨진다.

4. 구성요소·원리·절차

릴레이션 무결성 제약은 DBMS가 데이터 입력·변경 때마다 검사하는 규칙 묶음이다. 구성요소는 도메인 제약, 개체 무결성, 참조 무결성, 사용자 정의 무결성으로 나뉜다. 각 구성요소는 속성, 튜플, 관계 단위로 적용 범위가 다르다.

구성요소적용 단위검사 내용대표 구현
도메인 제약속성(열)값이 도메인에 속하는가데이터 타입, NOT NULL, CHECK
개체 무결성튜플(행)기본키가 유일하고 NULL이 아닌가PRIMARY KEY
참조 무결성관계(릴레이션 간)외래키 값이 부모 기본키에 있거나 NULL인가FOREIGN KEY, 참조 동작
사용자 정의 무결성업무 규칙업무 조건을 만족하는가CHECK, TRIGGER, ASSERTION

도메인 제약은 도메인(Domain) 이 정한 값 집합을 벗어난 값을 막는다. 예를 들어 성별 열에 '남', '여' 외의 값을 넣지 않도록 한다. 개체 무결성은 행을 구별하는 기본키(Primary Key) 의 유일성과 NOT NULL을 보장한다. 참조 무결성은 외래키(Foreign Key) 가 부모 테이블의 기본키 값과 일치하거나 NULL이어야 한다는 규칙이다. 자식 행이 있는 부모 행의 삭제는 막히거나 연쇄 처리된다.

원리는 세 가지다. 첫째, 제약은 스키마에 선언되어 모든 응용 프로그램에 공통으로 적용된다. 둘째, 위반 연산은 거부되어 트랜잭션 전체가 롤백된다. 셋째, 참조 동작은 삭제·갱신 시 처리 방식을 정한다. SQL:2003은 CASCADE, RESTRICT, NO ACTION, SET NULL, SET DEFAULT 다섯 가지를 규정한다.

무결성 제약은 DBMS가 선언된 규칙을 모든 입력·갱신에서 강제하는 장치다

참조 동작의 선택 절차는 다음과 같다.

  • 자식 테이블이 부모 키를 참조하는 관계를 식별한다.
  • 부모 행 삭제 시 자식 행을 어떻게 할지 정한다. 자식 행을 함께 지우면 CASCADE, 막으면 RESTRICT 또는 NO ACTION, 빈 값으로 두면 SET NULL을 쓴다.
  • 부모 키 갱신 시 같은 방식을 정한다.
  • 외래키 열을 NULL 허용 여부와 기본값을 설계한다.
  • CHECK 또는 TRIGGER로 업무 규칙을 표현하고, 트랜잭션 격리 수준으로 동시 실행 중 위반을 막는다.
무결성 제약 검사 흐름

5. 관련 법령·기준·표준

릴레이션 무결성은 법령 기준이 아니라 관계형 모델의 이론과 SQL 표준으로 정해진다. 국내 공공 데이터 관련 기준은 무결성 규칙을 직접 수치로 정하지 않는다. 아래 표는 규칙과 구현 기준을 정리한 것이다.

기준내용값·조건근거
개체 무결성기본키는 NULL 불가, 유일기본키 NULL 값 허용 안 함관계형 모델 이론
참조 무결성외래키는 부모 기본키 값 또는 NULL외래키 NULL 허용 가능(업무 규칙에 따름)관계형 모델 이론
도메인 무결성열 값은 정의된 도메인 내타입·NOT NULL·CHECK로 선언관계형 모델 이론
참조 동작삭제·갱신 시 처리CASCADE, RESTRICT, NO ACTION, SET NULL, SET DEFAULT 다섯 가지SQL:2003
제약 위반 처리연산 거부위반 시 작업 중단SQL 표준 일반 동작
기본키 개수테이블당 기본키는 하나기본키 1개만 허용관계형 모델 이론

참조 동작 중 CASCADE는 부모 행 삭제 시 자식 행도 함께 삭제한다. RESTRICT는 자식 행이 있으면 삭제를 거부한다. NO ACTION은 검사 시점에 위반이 남아 있으면 거부한다. 구현별 세부 차이가 있으므로 사용하는 DBMS 설명서를 함께 확인한다.

개정 연혁: SQL:2003은 참조 동작 다섯 가지를 규정한 표준이다. 국내 무결성 기준의 개정 사항은 이 문서에서 다루지 않는다.

6. 유형과 비교

무결성 제약은 적용 대상과 표현 수단에 따라 나뉜다. 관계형 모델의 핵심 규칙은 개체 무결성, 참조 무결성, 도메인 무결성이며, 여기에 업무 규칙을 담는 사용자 정의 무결성이 더해진다. 아래 표는 네 범주의 대상과 대표 구현을 비교한 것이다.

구분대상대표 제약위반 시 기본 동작
도메인 무결성속성(열) 값NOT NULL, CHECK, DEFAULT삽입·갱신 거부
개체 무결성튜플(행) 식별PRIMARY KEY, UNIQUE중복·NULL 삽입 거부
참조 무결성릴레이션 간 연결FOREIGN KEY부모 없는 자식 삽입 거부
사용자 정의 무결성업무 규칙TRIGGER, ASSERTION규칙에 따라 거부 또는 보정

이 표는 제약이 걸리는 단위가 열, 행, 릴레이션 간, 업무 규칙 순으로 넓어짐을 보여 준다. 도메인 제약은 한 열의 값 범위를, 개체 제약은 행의 유일성을 정한다. 참조 제약은 두 릴레이션을 잇고, 사용자 정의 제약은 여러 열과 테이블을 가로지르는 규칙을 담는다.

참조 무결성은 외래키 값이 부모 릴레이션의 기본키 값과 같거나 NULL이어야 한다는 규칙이다.

외래키 NULL 허용 여부는 업무 규칙에 따라 정한다. NULL이 허용되면 관계가 없거나 알 수 없는 상태를 나타낸다. 한 릴레이션이 자기 자신을 참조하는 자기참조(Self-Reference) 도 같은 규칙을 따른다.

참조 동작부모 행 삭제 시 자식 처리적합한 경우
CASCADE자식 행도 함께 삭제 또는 갱신주문과 주문항목처럼 종속이 강한 경우
RESTRICT자식이 있으면 삭제 거부기준 코드 테이블처럼 함부로 지우면 안 되는 경우
NO ACTION검사 시점에 자식이 남아 있으면 거부RESTRICT와 유사하나 지연 검사가 가능한 경우
SET NULL자식의 외래키를 NULL로 변경관계 해제가 허용되는 경우
SET DEFAULT자식의 외래키를 기본값으로 변경기본 부서처럼 대체 값이 정해진 경우

이어지는 내용

로그인하면 하루 2페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 단원 읽기