"데이터베이스에 잘못된 값이나 존재하지 않는 부서 번호가 들어가는 것을 어떻게 막을 수 있을까요?"
"정보처리기사나 전산직 시험에서 항상 출제되는 CASCADE, SET NULL 옵션의 차이는 무엇일까요?"
데이터 무결성(Data Integrity)이란 데이터베이스에 저장된 데이터의 정확성, 일관성, 유효성을 유지하고 보장하는 성질을 의미합니다. 데이터의 신뢰도를 유지하기 위해 DBMS는 다양한 무결성 제약조건을 강제합니다.
이번 글에서는 3대 무결성 제약조건의 개념과 외래키 변경/삭제 시 참조 무결성을 유지하는 핵심 옵션들을 완벽하게 정리해 드립니다!
1. 데이터 무결성 제약조건의 개요
무결성 제약조건(Integrity Constraints)은 데이터베이스에 권한이 있는 사용자만 접근하도록 허용하고, 허용된 작업 중에서도 데이터 오류가 발생하는 것을 사전에 차단하기 위한 규약입니다.\

2. 3대 핵심 무결성 제약조건
데이터베이스 시험과 면접에서 가장 중요하게 다루는 3가지 기본 무결성 제약조건입니다.
기본키(Primary Key) 제약조건입니다.
릴레이션에서 기본키로 지정된 속성은 절대 NULL 값을 가질 수 없으며, 중복된 값을 가질 수 없습니다. (NOT NULL + UNIQUE)
외래키(Foreign Key) 제약조건입니다.
외래키 값은 참조하는 다른 릴레이션의 기본키 값과 동일하거나, 또는 NULL 값이어야만 합니다. 존재하지 않는 기본키 값을 외래키로 참조하려고 하면 오류가 발생합니다.
속성 값의 범위 제약조건입니다.
각 속성(Column)의 값은 정의된 **도메인에 속한 원자값(Atomic Value)**이어야 합니다. 예를 들어 '성별' 속성에는 '남', '여'만 들어갈 수 있거나, '점수' 속성에는 0~100 사이의 숫자만 입력되도록 제한(CHECK 제약조건)하는 것을 말합니다.
3. 참조 무결성을 지키기 위한 외래키(FK) 제약 옵션
부모 테이블(참조되는 테이블)의 기본키가 수정되거나 삭제될 때, 이를 참조하고 있는 자식 테이블(외래키를 가진 테이블)의 데이터를 어떻게 처리할지 결정하는 옵션입니다.
[ 부모 테이블 데이터 삭제 시 자식 테이블의 대응 동작 ]
부모 테이블: [ 부서 코드: 10 (개발팀) ] <--- 삭제 시도!
│
▼ (외래키 참조 중)
자식 테이블: [ 사원 A (부서 10) ], [ 사원 B (부서 10) ]
│
├── CASCADE ---> 자식 사원 A, B 데이터도 함께 삭제
├── SET NULL ---> 자식 사원의 부서 코드를 NULL로 변경
└── RESTRICT ---> 삭제 명령 자체를 거부 (에러 발생)
외래키 동작 옵션 세부 설명
| 옵션명 | 의미 | 상세 동작 방식 |
| CASCADE | 연쇄 반응 | 부모 테이블의 행이 삭제/수정되면, 이를 참조하는 자식 테이블의 관련 행도 함께 삭제/수정됨 |
| SET NULL | NULL로 설정 | 부모 테이블의 행이 삭제/수정되면, 이를 참조하는 자식 테이블의 외래키 값을 NULL로 변경함 |
| SET DEFAULT | 기본값 설정 | 부모 테이블의 행이 삭제/수정되면, 자식 테이블의 외래키 값을 지정된 기본값(Default)으로 변경함 |
| RESTRICT | 동작 제한 | 자식 테이블에서 참조하고 있는 경우, 부모 테이블의 삭제/수정 명령을 **즉시 거부(제한)**함 |
| NO ACTION | 미조치 (기본값) | RESTRICT와 유사하게 동작하며, 트랜잭션 종료 시점까지 참조 무결성을 위반하는지 검사함 |
💡 한눈에 보는 무결성 종류 및 관련 키 요약표 (시험 필수!)
| 무결성 종류 | 대상 속성 / 키 | 핵심 규칙 |
| 개체 무결성 | 기본키 (Primary Key) | NULL 불가, 중복 불가 |
| 참조 무결성 | 외래키 (Foreign Key) | 참조 릴레이션의 기본키 값과 일치하거나 NULL이어야 함 |
| 도메인 무결성 | 일반 속성 (Column) | 데이터 타입, 길이나 CHECK 조건 등 지정된 도메인 범위를 만족해야 함 |
| 키 무결성 | 후보키 / 기본키 | 한 릴레이션에는 최소한 하나의 키가 존재해야함 |
| ** 사용자 정의 무결성** | 모든 속성 | 사용자가 정의한 업무 규칙을 만족해야 함 |
📌 핵심 기출 포인트 체크
- 개체 무결성 조건: 기본키는 NOT NULL + UNIQUE이어야 한다는 점을 무조건 기억하세요.
- 참조 무결성의 NULL 허용 여부: 외래키는 기본적으로 NULL 값을 가질 수 있습니다 (단, 외래키가 동시에 기본키의 일부인 경우는 제외).
- CASCADE vs SET NULL: 부모 데이터를 삭제할 때 자식 데이터도 함께 지우는 옵션은 CASCADE, 자식 데이터의 값을 빈값으로 만드는 옵션은 SET NULL입니다.