정규화와 반정규화
정규화
정규화(Normalization)는 관계형 데이터베이스에서 데이터의 중복을 최소화하고, 데이터 무결성을 보장하기 위해 테이블 구조를 체계적으로 분해하는 과정이다.
정규화를 통해 이상 현상(Anomaly) 을 방지하고, 데이터 구조의 안정성과 유지보수성을 향상시킬 수 있다.
정규화 단계 요약
| 정규형 | 핵심 조건 |
|---|---|
| 1NF (제1정규형) | 모든 속성 값은 원자값(Atomic Value) 이어야 한다. |
| 2NF (제2정규형) | 1NF를 만족하고, 부분 함수 종속을 제거해야 한다. (완전 함수 종속) |
| 3NF (제3정규형) | 2NF를 만족하고, 이행 함수 종속을 제거해야 한다. |
| BCNF (보이스-코드 정규형) | 3NF를 만족하고, 모든 결정자가 후보키여야 한다. |
| 4NF (제4정규형) | BCNF를 만족하고, 다치 종속(Multi-valued Dependency)을 제거해야 한다. |
| 5NF (제5정규형) | 4NF를 만족하고, 조인 종속(Join Dependency)이 후보키를 통해서만 성립되어야 한다. |
제1정규형 (1NF)
제1정규형은 릴레이션의 모든 속성 값이 원자값(Atomic Value) 으로만 구성되어야 한다는 규칙이다.
하나의 속성 값에 여러 개의 값이 들어갈 수 없다.
[정규화 전]
| 학번 | 이름 | 수강과목 |
|---|---|---|
| 1001 | 김철수 | 자료구조, 알고리즘 |
| 1002 | 이영희 | 운영체제 |
[1NF 정규화 후]
| 학번 | 이름 | 수강과목 |
|---|---|---|
| 1001 | 김철수 | 자료구조 |
| 1001 | 김철수 | 알고리즘 |
| 1002 | 이영희 | 운영체제 |
제2정규형 (2NF)
제2정규형은 릴레이션이 1NF를 만족하고 부분 함수 종속(Partial Funcional Dependency) 을 모두 제거한 상태여야 한다.
모든 속성이 기본키 전체에 완전 함수 종속되어야 한다.
[정규화 전] [수강 테이블]
| 학번 | 과목코드 | 교수명 | 성적 |
|---|---|---|---|
| 1001 | CS101 | 김교수 | A+ |
| 1001 | CS202 | 이교수 | A0 |
| 1002 | CS101 | 김교수 | B+ |
[2NF 정규화 후]
[수강 테이블]
| 학번 | 과목코드 | 성적 |
|---|---|---|
| 1001 | CS101 | A+ |
| 1001 | CS202 | A0 |
| 1002 | CS101 | B+ |
[과목 테이블]
| 과목코드 | 교수명 |
|---|---|
| CS101 | 김교수 |
| CS202 | 이교수 |
제3정규형 (3NF)
제3정규형은 릴레이션이 2NF를 만족하고, 이행 함수 종속(Transitive Functional Dependency) 을 모두 제거한 상태여야 한다.
[정규화 전]
| 학번 | 이름 | 학과코드 | 학과명 |
|---|---|---|---|
| 1001 | 김철수 | CS | 컴퓨터과학 |
| 1002 | 이영희 | EE | 전자공학 |
| 1003 | 김철수 | CS | 컴퓨터과학 |
| 1004 | 김철수 | EE | 전자공학 |
[3NF 정규화 후]
[학생 테이블]
| 학번 | 이름 | 학과코드 |
|---|---|---|
| 1001 | 김철수 | CS |
| 1002 | 이영희 | EE |
| 1003 | 김철수 | CS |
| 1004 | 김철수 | EE |
[학과 테이블]
| 학과코드 | 학과명 |
|---|---|
| CS | 컴퓨터과학 |
| EE | 전자공학 |
BCNF (Boyce-Codd Normal Form)
BCNF는 3NF보다 강력한 정규형으로, 릴레이션의 모든 결정자가 후보키(Candidate Key)여야 한다는 규칙이다.
[BCNF 정규화 전]
| 수업 | 교수 | 강의실 | 시간대 |
|---|---|---|---|
| 데이터베이스 | 김교수 | A101 | 월 1교시 |
| 데이터베이스 | 김교수 | A101 | 수 2교시 |
| 네트워크 | 이교수 | B202 | 월 1교시 |
| 알고리즘 | 김교수 | A101 | 화 3교시 |
[BCNF 정규화]
[교수-강의실 테이블]
| 교수 | 강의실 |
|---|---|
| 김교수 | A101 |
| 이교수 | B202 |
[수업-교수 테이블]
| 수업 | 교수 |
|---|---|
| 데이터베이스 | 김교수 |
| 네트워크 | 이교수 |
| 알고리즘 | 김교수 |
[수업-시간 테이블]
| 수업 | 시간대 |
|---|---|
| 데이터베이스 | 월 1교시 |
| 데이터베이스 | 수 2교시 |
| 네트워크 | 월 1교시 |
| 알고리즘 | 화 3교시 |
제4정규형 (4NF)
다치 종속(Multi-valued Dependency, MVD) 을 제거한 정규형
제5정규형 (5NF)
조인 종속(Join Dependency, JD) 이 후보키를 통해서만 성립되어야 하는 정규형
반정규화 (Denormalization)
반정규화는 정규화된 테이블 구조를 의도적으로 통합하거나 중복을 허용하여 데이터베이스의 성능을 향상 시키는 과정이다.
주요 기법:
- 테이블 통합, 테이블 분할(수평/수직), 중복 속성 추가 등