무결성 제약
설명 영상 무결성 제약 · 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 | 자식의 외래키를 기본값으로 변경 | 기본 부서처럼 대체 값이 정해진 경우 |
이어지는 내용
- 7. 장단점·한계와 개선 방향
- 8. 사례 또는 계산 예제
- 9. 최근 동향과 쟁점
- 10. 흔한 실수와 채점 포인트
- 11. 암기 정리
- 12. 답안 구성 예시
- 13. 예상 변형 문항
로그인하면 하루 2페이지까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 단원 읽기