제3정규형 (3NF)
핵심 인사이트 (3줄 요약)
- 본질: 제3정규형 (Third Normal Form, 3NF)은 2NF를 만족하며, 모든 비키 속성이 기본 키에 이행적으로 종속되지 않는 상태다.
- 가치: 3NF는 이행적 종속성 (Transitive Dependency)을 제거하여 데이터 중복을 더욱 줄이고, 갱�신 이상의 추가 원인을 제거한다.
- 융합: 3NF는 실무에서 가장 일반적으로 적용되는 정규형으로, 대부분의 테이블 설계에서 이 수준까지 정규화하면 충분한 경우가 많다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
개념 정의
제3정규형 (3NF)은 2NF를 만족하고, 이행적 종속성이 없는 상태다. 이행적 종속성이란 "기본 키 → X → Y"처럼 기본 키가 아닌 속성을 통해 다른 비키 속성이 간접적으로 종속되는 것을 말한다.
이행적 종속성이란?
┌─────────────────────────────────────────────────────────────────────┐
│ 이행적 종속성 예시 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ [이행적 종속성 있는 테이블: 고객] │
│ ┌────────┬────────┬────────┬──────────┐ │
│ │ 고객ID* │ 이름 │ 도시 │ 도시코드 │ │
│ ├────────┼────────┼────────┼──────────┤ │
│ │ C001 │ 김철수 │ 서울 │ 02 │ │
│ │ C002 │ 이영희 │ 부산 │ 051 │ │
│ │ C003 │ 박민수 │ 서울 │ 02 │ │
│ └────────┴────────┴────────┴──────────┘ │
│ * = 기본 키 │
│ │
│ 종속성: │
│ • 고객ID → 도시 (직접 종속) │
│ • 고객ID → 도시코드 (직접 종속) │
│ • 도시 → 도시코드 (도시가 결정되면 도시코드가 결정) │
│ │
│ 이행적 종속: │
│ • 고객ID → 도시 → 도시코드 │
│ • (고객ID가 도시를 거쳐 도시코드에 간접 종속) │
│ │
│ 문제점: │
│ • 도시코드 변경 시 도시=서울인 모든 행 수정 필요 │
│ • 새 도시 '제주'과 코드 '064'를 추가하려면 고객ID가 필요 (삽입 이상) │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 이행적 종속은 기본 키가 아닌 속성 (도시)을 경유하여 또 다른 속성 (도시코드)에 종속되는 것이다. 이 경우 도시코드 변경 시 고객ID로能找到하는 모든 행을 수정해야 하고, 도시 정보만 추가하려면 기본 키인 고객ID가 필요하므로 삽입이 불가능하다. 이러한 문제를 해결하려면 이행적 종속을 제거해야 한다.
비유
이행적 종속성은 **"학번 → 반 → 담임 선생님"**의 관계와 같다. 학번이 반을 결정하고 (직접), 반이 담임 선생님을 결정한다 (이행). 이 경우 반이 같으면 담임 선생님이 동일하므로, 선생님을別の 반으로 옮기려면 해당 반의 모든 학생 행을 수정해야 한다.
- 📢 섹션 요약 비유:"학번이 반을 결정하고, 반이 선생님을 결정하면" (이행적 종속), 선생님이 바뀌면 해당 반의 모든 학생 정보를 수정해야 하는 번거로움이 있어요.
Ⅱ. 3NF 분해 과정
분해 전 (2NF, but not 3NF)
┌─────────────────────────────────────────────────────────────────────┐
│ 3NF 분해 전 (이행적 종속성 존재) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 고객 (2NF, 이행적 종속 존재): │
│ ┌────────┬────────┬────────┬──────────┐ │
│ │ 고객ID* │ 이름 │ 도시 │ 도시코드 │ │
│ ├────────┼────────┼────────┼──────────┤ │
│ │ C001 │ 김철수 │ 서울 │ 02 │ │
│ │ C002 │ 이영희 │ 부산 │ 051 │ │
│ │ C003 │ 박민수 │ 서울 │ 02 │ │
│ └────────┴────────┴────────┴──────────┘ │
│ * = 기본 키 │
│ │
│ 종속성: │
│ • 고객ID → (이름, 도시, 도시코드) │
│ • 도시 → 도시코드 (비키 → 비키, 이행적 종속) │
│ │
└─────────────────────────────────────────────────────────────────────┘
분해 후 (3NF 충족)
┌─────────────────────────────────────────────────────────────────────┐
│ 3NF 분해 후 (3NF 충족) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ [고객] (기본 키: 고객ID) │
│ ┌────────┬────────┬────────┐ │
│ │ 고객ID* │ 이름 │ 도시 │ │
│ ├────────┼────────┼────────┤ │
│ │ C001 │ 김철수 │ 서울 │ │
│ │ C002 │ 이영희 │ 부산 │ │
│ │ C003 │ 박민수 │ 서울 │ │
│ └────────┴────────┴────────┘ │
│ │
│ [도시] (기본 키: 도시) │
│ ┌────────┬──────────────┐ │
│ │ 도시* │ 도시코드 │ │
│ ├────────┼──────────────┤ │
│ │ 서울 │ 02 │ │
│ │ 부산 │ 051 │ │
│ └────────┴──────────────┘ │
│ │
│ ※ 고객.도시는 외래 키로 도시.도시를 참조 │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 3NF 분해는 이행적 종속성 "도시 → 도시코드"를 별도 테이블로 분리하는 것이다. 도시 테이블에서 도시가 기본 키가 되고, 도시코드가 결정된다. 고객 테이블에서는 도시가 외래 키가 되어 도시 테이블을 참조한다. 이제 도시코드 변경 시 고객 테이블에 영향을 주지 않고 도시 테이블만 수정하면 된다.
Ⅲ. 3NF vs BCNF
┌─────────────────────────────────────────────────────────────────────┐
│ 3NF와 BCNF 비교 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 3NF 조건: │
│ • 2NF를 만족 │
│ • 모든 비키 속성이 기본 키에 이행적으로 종속되지 않음 │
│ │
│ BCNF 조건: │
│ • 3NF를 만족 │
│ • 모든 결정자가 후보 키이어야 함 │
│ │
│ 차이: │
│ • 3NF: 기본 키가 아닌 결정자도 허용 │
│ • BCNF: 모든 결정자가 후보 키 (모든 키는 기본 키이거나 후보 키) │
│ │
│ 상황: │
│ • 3NF에서 허용되지만 BCNF에서 허용되지 않는 경우: │
│ • A → B에서 A가 후보 키가 아닌 경우 │
│ │
└─────────────────────────────────────────────────────────────────────┘
- **📢 섹션 요약 비유:**3NF는 "학번이 반을 결정하고, 반이 선생님을 결정하면" 선생님도 별도 표로 분리하는 것이고, BCNF는 더욱 엄격하게 "결정하는 것은 모두 키어야"라는 규칙을 추가한 것입니다.
📌 관련 개념 맵 (Knowledge Graph)
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 이행적 종속성 | 기본 키 → 비키 → 비키로의 간접 종속으로, 3NF에서 제거 대상이다. |
| 결정자 | 다른 속성을 유일하게 결정하는 속성으로, BCNF에서는 반드시 후보 키어야 한다. |
| BCNF | 3NF보다 엄격한 정규형으로, 모든 결정자가 후보 키임을 요구한다. |
| 외래 키 | 3NF 분해 시 참조 무결성을 위해 필요한 키다. |
👶 어린이를 위한 3줄 비유 설명
- 3NF는 "학번→반→선생님"에서 선생님을 별도 표로 분리하는 것과 같아요.
- 이렇게 하면 선생님이 바뀌어도 해당 반 정보만 수정하면 돼요.
- 컴퓨터에서도 이렇게 분리하면 (3NF 분해) 데이터를 더 안전하게管理할 수 있어요!