제 3 정규화(3NF)는 이행적 종속(Transitive Dependency)을 제거하여 데이터를 보다 효율적으로 관리하는 단계이다.
제 3 정규화는 테이블 내에서 기본 키가 아닌 컬럼이 다른 비키(non-key) 컬럼을 결정하지 않도록 만드는 것이다. 즉, 기본 키에 대해서만 종속성을 갖도록 하여 데이터의 중복을 줄이고, 이상 현상(Anomalies)을 방지하는 것이 목적이다.
학생 테이블에서 기본 키가 학생 ID라고 할 때, 학생 ID → 학과 ID → 학과 이름과 같은 형태가 이행적 종속이다. 이 경우 학생 ID는 학과 이름을 직접 결정하지 않고, 중간의 학과 ID를 통해서 결정하는 관계가 발생한다.| 학생 ID | 학생 이름 | 학과 ID | 학과 이름 |
|---|---|---|---|
| 101 | 김철수 | D01 | 컴퓨터공학과 |
| 102 | 이영희 | D02 | 기계공학과 |
| 103 | 박민수 | D01 | 컴퓨터공학과 |
위 테이블에서는 학생 ID가 기본 키다. 학과 ID는 학생 ID에 종속되어 있지만, 학과 이름이 학과 ID에 종속되는 이행적 종속이 발생하고 있다.
학생 테이블
| 학생 ID | 학생 이름 | 학과 ID |
|---|---|---|
| 101 | 김철수 | D01 |
| 102 | 이영희 | D02 |
| 103 | 박민수 | D01 |
학과 테이블
| 학과 ID | 학과 이름 |
|---|---|
| D01 | 컴퓨터공학과 |
| D02 | 기계공학과 |
이제 학생 테이블에서 학과 이름 컬럼을 분리하여 학과 테이블을 생성함으로써 이행적 종속을 제거했다. 이제 학생 테이블에서는 모든 속성이 기본 키인 학생 ID에 대해서만 직접적으로 종속되어 있으며, 학과 테이블에서도 학과 ID가 학과 이름을 결정하게 되어 중복을 줄이고 데이터의 일관성을 유지할 수 있게 된다.
이처럼 제 3 정규화를 통해 데이터베이스가 보다 깔끔하고 효율적인 구조를 가지게 된다.