핵심 인사이트 (3줄 요약)
- 본질: 제3정규형 (3NF, Third Normal Form)은 테이블 내의 모든 일반 속성이 오직 기본키(PK)에만 직접 종속되도록 이행적 함수 종속을 제거하는 과정이다.
- 가치: 2NF(제2정규형)를 통과한 상태에서 여전히 존재하는 "키가 아닌 일반 컬럼끼리의 꼬리물기"를 끊어내어 데이터 중복과 갱신 이상(Anomaly)을 근본적으로 차단한다.
- 판단 포인트: 3NF까지만 진행해도 실무적인 데이터 이상 현상의 99%가 해결되므로, 조인(JOIN) 성능 저하를 고려해 정규화는 보통 3NF에서 멈추는 것이 표준적이다.
Ⅰ. 개요 및 필요성
제3정규형 (3NF)은 제2정규형을 만족하는 테이블에서 이행적 함수 종속 (Transitive Functional Dependency)을 제거하는 정규화 단계다. 이행적 종속이란 $X \rightarrow Y$이고 $Y \rightarrow Z$일 때, $X \rightarrow Z$가 성립하는 구조, 즉 기본키가 아닌 일반 속성(Y)이 또 다른 일반 속성(Z)을 결정하는 현상을 말한다.
이러한 다단계 종속 구조가 테이블에 남아있으면 데이터 중복이 발생한다. 예를 들어 사원(PK)이 부서코드(Y)를 결정하고, 부서코드(Y)가 부서명(Z)을 결정할 경우, 같은 부서에 속한 수많은 사원 데이터마다 동일한 부서명이 반복 저장된다. 부서명이 바뀌면 해당 부서의 모든 사원 레코드를 수정해야 하는 갱신 이상이 터지므로, 이를 분리하는 수술이 반드시 필요하다.
- 📢 섹션 요약 비유: 3NF는 회사 내의 불법 다단계 하청을 금지하는 규칙이다. 사장(PK)이 팀장(Y)에게 지시를 내리면, 팀장이 몰래 외주(Z)를 주는 구조를 끊고, 외주 업체를 아예 별도의 독립 법인으로 분리해 사장과 직거래하도록 만드는 것이다.
Ⅱ. 아키텍처 및 핵심 원리
3NF의 핵심 원리는 기본키에 의존하지 않고 자신들끼리 종속 관계를 형성한 "중간 보스와 꼬봉" 속성들을 찾아내어 별도의 테이블로 분리하는 것이다.
| 구분 | 수술 전 (3NF 위반) | 수술 후 (3NF 달성) |
|---|---|---|
| 구조 | 기본키 $\rightarrow$ 일반속성A $\rightarrow$ 일반속성B | 테이블1: 기본키 $\rightarrow$ 일반속성A(FK) 테이블2: 기본키(기존A) $\rightarrow$ 일반속성B |
| 문제점 | 속성B의 값이 불필요하게 반복 저장됨 | 속성A를 외래키(FK)로 연결하여 중복 제거 |
| 종속성 | 이행적 종속 존재 ($X \rightarrow Y \rightarrow Z$) | 직접 종속만 존재 ($X \rightarrow Y$, $Y \rightarrow Z$) |
┌──────────────────────────────────────────────────────────────┐
│ 3NF 분리 전후의 종속성 변화 │
├──────────────────────────────────────────────────────────────┤
│ [ 분리 전: 꼬리물기 종속 ] │
│ 사번(PK) ───결정──▶ 부서코드 ───결정──▶ 부서명/위치 │
│ (X) (Y) (Z) │
│ │
│ [ 분리 후: 독립된 테이블과 FK 참조 ] │
│ 사원 테이블: 사번(PK) ───결정──▶ 부서코드(FK) │
│ │ │
│ 부서 테이블: 부서코드(PK) ───결정──▶ 부서명/위치 │
└──────────────────────────────────────────────────────────────┘
테이블 분리 시, 종속성의 매개체가 되었던 속성(부서코드)은 원래 테이블(사원)에 외래키(FK)로 남고, 새로 만들어진 테이블(부서)에서는 기본키(PK)가 된다. 이를 통해 조인(JOIN)으로 언제든 원래 데이터를 무손실 분해/복원할 수 있다.
- 📢 섹션 요약 비유: 3NF 분리는 방 안에 어질러진 물건 중, '카메라 렌즈들'을 '카메라 가방'이라는 별도의 상자로 묶어 밖으로 빼내고, 방 안에는 '카메라 가방 위치를 적은 메모(FK)'만 남겨두어 공간을 절약하는 정리 정돈이다.
Ⅲ. 비교 및 연결
정규화의 각 단계는 어떤 종류의 종속성을 제거하느냐에 따라 명확한 경계가 나뉜다. 2NF와 3NF는 모두 '일반 속성의 잘못된 종속'을 다루지만 타겟이 다르다.
| 항목 | 제2정규형 (2NF) | 제3정규형 (3NF) | 보이스-코드 정규형 (BCNF) |
|---|---|---|---|
| 제거 대상 | 부분 함수 종속 | 이행적 함수 종속 | 결정자이면서 PK가 아닌 것 |
| 발생 조건 | 복합키(PK가 2개 이상)일 때 주로 발생 | 단일키(PK가 1개)에서도 발생 | 모든 결정자가 후보키가 아닐 때 |
| 분리 기준 | PK의 일부에만 종속된 속성을 분리 | PK가 아닌 일반 속성에 종속된 속성 분리 | 일반 속성이 PK의 일부를 결정할 때 분리 |
3NF를 완료하면 테이블 내의 모든 일반 속성은 오직 기본키 전체에 대해서만 종속된다. 하지만 여전히 일반 속성이 기본키의 일부를 결정하는 특이한 이상 현상이 남을 수 있는데, 이는 BCNF에서 해결한다.
- 📢 섹션 요약 비유: 2NF는 "머리가 2개인 괴물(복합키)이 한쪽 머리로만 생각하는 것"을 고치는 수술이고, 3NF는 "머리가 1개인 정상인(단일키)이 남의 생각(일반 속성)에 휘둘리는 것"을 고치는 수술이다.
Ⅳ. 실무 적용 및 기술사 판단
실무 데이터베이스 설계에서 3NF는 "가장 이상적인 타협점"으로 평가받는다.
- 채택 포인트 (3NF 준수): 시스템 구축 초기 논리 모델링 단계에서는 무조건 3NF 이상의 깐깐한 잣대를 적용하여 데이터의 중복을 0으로 만들어야 한다. 무결성이 중요한 금융, 결제, 인사 시스템에서는 필수적이다.
- 회피 및 타협 포인트 (반정규화): 3NF로 인해 테이블이 너무 많이 쪼개지면, 사용자가 화면에서 데이터를 볼 때마다 3~4개의 테이블을 JOIN 해야 하므로 조회 성능(CPU, 메모리)이 급격히 저하된다. 이때는 의도적으로 3NF를 깨고 부서명을 다시 사원 테이블에 합치는 반정규화 (De-normalization)를 수행하여 읽기 성능을 확보해야 한다.
따라서 기술사적 관점에서 3NF는 무조건 도달해야 할 최종 목적지가 아니라, 시스템의 '읽기/쓰기 비율'에 따라 언제든 반정규화로 후퇴할 수 있는 기준선(Baseline)으로 활용해야 한다.
- 📢 섹션 요약 비유: 3NF는 식재료를 채소, 고기, 해산물로 완벽히 분리해 냉장고(DB)에 보관하는 원칙이다. 상하지 않고 관리하기 좋지만, 요리(조회)할 때마다 매번 다 꺼내야 해서 느려진다면, 자주 먹는 볶음밥용 재료는 아예 섞어서 한 통에 담아두는 타협(반정규화)을 하는 것과 같다.
Ⅴ. 기대효과 및 결론
3NF를 적용하면 데이터의 저장 공간 낭비가 사라지고, 데이터를 삽입/수정/삭제할 때 발생하는 논리적 모순(이상 현상)을 완벽에 가깝게 제거할 수 있다. 구조가 명확해져 유지보수성도 크게 향상된다.
하지만 지나친 테이블 분해는 필연적으로 JOIN 연산의 비용 증가를 가져온다. 결론적으로 3NF는 관계형 데이터베이스(RDBMS) 설계의 교과서적인 완성형이자 실무의 기준점이며, 이후의 BCNF, 4NF, 5NF는 학술적이거나 매우 특수한 상황에서만 제한적으로 고려하는 것이 타당하다.
- 📢 섹션 요약 비유: 3NF는 군대의 '지휘 계통 일원화'와 같다. 모든 병사(일반 속성)는 오직 소대장(PK)의 명령만 들어야 하며, 분대장(일반 속성)이 독단적으로 명령을 내리는 꼬리물기를 없애 부대가 빠르고 정확하게 움직이도록 만드는 규율이다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| 제2정규형 (2NF) | 3NF를 진행하기 위해 반드시 선행되어야 하는 부분 종속 제거 단계 |
| BCNF (Boyce-Codd Normal Form) | 3NF를 만족하면서도 발생하는 특이한 종속(결정자 오류)을 해결하는 상위 단계 |
| 반정규화 (De-normalization) | 3NF로 인해 저하된 읽기 성능을 높이기 위해 의도적으로 중복을 허용하는 역방향 기법 |
| 조인 (JOIN) | 3NF로 쪼개진 테이블들을 다시 조합하여 원래의 뷰를 만들어내는 관계 연산 |
📈 관련 키워드 및 발전 흐름도
비정규 릴레이션 (중복과 이상 현상의 온상)
│
▼
제1정규형 (1NF) · 원자값 확보
│
▼
제2정규형 (2NF) · 부분 함수 종속 제거
│
▼
제3정규형 (3NF) · 이행적 함수 종속 제거 (실무 표준)
│
▼
BCNF 및 반정규화 · 결정자 오류 해결 또는 성능을 위한 의도적 통합
👶 어린이를 위한 3줄 비유 설명
- 반장(PK)이 칠판에 숙제를 적으면 모두가 그걸 보고 따라야 해요.
- 그런데 분단장(일반 속성)이 자기 맘대로 "우리 분단은 다른 거 해!"라고 또 다른 규칙을 만들면 반이 엉망진창이 되겠죠?
- 제3정규형은 반장 말고는 아무도 자기 맘대로 새로운 규칙을 못 만들게 해서, 반 전체가 하나의 약속만 똑바로 지키게 만드는 청소 방법이랍니다.