Korean only
This page is available in Korean only. An English version will be added later.
정규화 (Normalization)
I. 개요
- 정의: 관계형 DB에서 데이터 중복을 줄이고 이상현상(Anomaly)을 제거하기 위해, 함수 종속성을 기준으로 릴레이션을 작고 잘 구조화된 단위로 분해하는 과정.
- 배경 / 필요성: 한 테이블에 모든 데이터를 몰아넣으면 중복 저장, 갱신 누락, 삽입·삭제 시 부작용이 발생한다.
II. 이상현상 (Anomaly)
| 종류 | 설명 |
|---|---|
| 삽입 이상 | 불필요한 데이터까지 있어야 삽입 가능 |
| 갱신 이상 | 중복된 값 중 일부만 수정되어 불일치 |
| 삭제 이상 | 한 데이터를 지울 때 필요한 정보까지 삭제 |
III. 정규화 단계
| 단계 | 조건 | 제거 대상 |
|---|---|---|
| 1NF | 모든 속성이 원자값(더 못 나눔) | 반복 그룹·다중값 |
| 2NF | 1NF + 부분 함수 종속 제거 | 기본키 일부에만 종속 |
| 3NF | 2NF + 이행 함수 종속 제거 | 키가 아닌 속성에 종속 |
| BCNF | 3NF + 모든 결정자가 후보키 | 결정자이지만 후보키 아닌 경우 |
이후 4NF(다치 종속), 5NF(조인 종속)도 있으나 실무에선 보통 3NF~BCNF까지.
비정규 → 1NF(원자값) → 2NF(부분종속 제거)
→ 3NF(이행종속 제거) → BCNF(결정자=후보키)
IV. 특징 · 장단점
| 구분 | 내용 |
|---|---|
| 장점 | 중복·이상현상 제거, 데이터 일관성, 저장공간 절약 |
| 단점 | 테이블 분해 → 조인 증가 → 조회 성능 저하 가능 |
| 고려사항 | 조회 많은 시스템은 성능과의 균형 필요 |
V. 비교 — 정규화 vs 반정규화
| 구분 | 정규화 | 반정규화(Denormalization) |
|---|---|---|
| 목적 | 일관성·무결성 | 조회 성능 |
| 중복 | 최소화 | 의도적 허용 |
| 조인 | 많음 | 줄임 |
| 적용 | OLTP(트랜잭션) | OLAP·조회 위주, 대량 집계 |
VI. 적용 · 실무 관점
- 기본은 3NF까지 정규화 후, 성능 병목이 확인되면 선택적 반정규화(집계 컬럼, 이력 테이블 등).
- 무결성 제약(PK·FK·UNIQUE)과 함께 설계해야 정규화 효과가 유지된다.
VII. 결론
- 정규화는 무결성을, 반정규화는 성능을 위한 것. 둘은 trade-off 관계.
- "일단 정규화하고, 필요할 때 근거를 갖고 반정규화"가 원칙이다.