[DB] 04. 무결성과 제약조건
1. 무결성(Integrity)이란?
무결성은 데이터가 논리적으로 올바르게 유지되는 상태를 의미한다. 저장은 됐는데 믿을 수 없는 데이터가 쌓이는 순간부터 서비스는 유지가 어려워진다.
그래서 DB는 데이터를 그냥 받아들이지 않고, “지켜야 할 규칙”을 정해두고 그 규칙을 위반하면 저장 자체를 막는다.
2. 무결성을 DB에서 보장하는 이유
애플리케이션 코드에서도 검증을 할 수 있다. 하지만 코드 검증만 믿으면 빈 구멍이 생긴다.
- 다른 프로그램/관리 툴이 DB에 접근할 수 있다
- 실수로 잘못된 쿼리를 실행할 수 있다
- 검증 로직이 분산되면 일관되게 유지하기 어렵다
그래서 중요한 규칙은 DB 차원에서 한 번 더 막아두는 편이 안전하다.
3. 개체 무결성(Entity Integrity)
개체 무결성은 각 행이 고유하게 식별되어야 한다는 규칙이다. 이를 보장하는 가장 기본 장치가 PK다.
- PK는 중복될 수 없다
- PK는 NULL이 될 수 없다
PK가 없으면 “이 행이 무엇인지”를 DB가 확신할 수 없다. 그래서 PK는 설계의 출발점이 된다.
4. 참조 무결성(Referential Integrity)
참조 무결성은 테이블 간 관계가 깨지지 않도록 보장하는 규칙이다. 예를 들어 orders.user_id가 users.id를 참조한다면, orders에 존재하지 않는 회원 ID가 들어오면 안 된다.
FK 제약을 걸어두면 DB가 이를 자동으로 검사한다.
5. 도메인 무결성(Domain Integrity)
도메인 무결성은 컬럼에 들어올 수 있는 값의 범위를 제한하는 규칙이다.
- 데이터 타입(INT, VARCHAR 등)
- NULL 허용 여부
- 값의 범위(CHECK)
예: 나이는 음수가 될 수 없고, 이메일은 특정 형식만 허용할 수 있다. 이런 규칙이 없으면 데이터는 금방 의미를 잃는다.
6. 제약조건(Constraint)
무결성을 실제로 구현하는 장치가 제약조건이다. 대표적인 제약조건은 다음과 같다.
| 제약조건 | 의미 |
|---|---|
| NOT NULL | 값이 반드시 존재해야 함 |
| UNIQUE | 중복 불가 |
| PRIMARY KEY | 개체 무결성 보장(중복/NULL 불가) |
| FOREIGN KEY | 참조 무결성 보장(참조 대상 존재 필요) |
| CHECK | 값의 범위/규칙 제한 |
| DEFAULT | 값이 없을 때 기본값 설정 |
7. 제약조건을 어디까지 DB에 둘 것인가
모든 규칙을 DB에 넣을 필요는 없다. 하지만 기준은 있다.
- 데이터 구조 자체와 관련된 규칙(중복, NULL, 참조)은 DB에서 보장하는 편이 안정적이다
- 자주 바뀌는 비즈니스 규칙은 코드에서 처리하는 편이 유연하다
8. 정리
- 무결성은 데이터가 말이 되게 유지되는 상태다
- PK는 개체 무결성, FK는 참조 무결성을 보장한다
- 타입/NULL/CHECK는 도메인 무결성을 보완한다
- 제약조건은 DB 차원의 검증 장치다
'Computer Science > Database' 카테고리의 다른 글
| [DB] 06. SQL 기본 구조와 SELECT 실행 순서 (0) | 2026.02.07 |
|---|---|
| [DB] 05. 정규화(Normalization) (0) | 2026.02.04 |
| [DB] 03. 키(Key)와 테이블 간 관계 (PK / FK) (0) | 2026.02.04 |
| [DB] 02. 관계형 데이터베이스 구조와 테이블 (0) | 2026.02.04 |
| [DB] 01. 데이터베이스 기초 개념 (0) | 2026.02.04 |