BCNF와 그 이상
3NF까지 적용해도 여전히 이상 현상이 남는 경우가 있습니다. BCNF는 이 틈새를 메우는 더 엄격한 정규형입니다. 정규화의 궁극적 목표는 하나의 사실은 하나의 장소에만 저장하는 것인데, 3NF만으로는 이 목표를 완전히 달성하지 못하는 경우가 존재합니다.
3NF의 한계
3NF는 키가 아닌 속성이 키에 이행적으로 종속되지 않을 것을 요구합니다. 하지만 이 정의에는 허점이 있습니다. 키가 아닌 속성이 후보키의 일부를 결정하는 경우를 잡아내지 못합니다.
BCNF (Boyce-Codd Normal Form)
BCNF의 조건: 모든 결정자가 후보키(또는 슈퍼키)여야 합니다.
3NF와의 차이는 무엇일까요? 3NF는 키가 아닌 속성 → 키가 아닌 속성 종속을 제거합니다. 하지만 키가 아닌 속성이 후보키의 일부를 결정하는 경우는 3NF로 잡히지 않습니다.
BCNF 위반 사례
BCNF 위반이 일으키는 이상 현상
BCNF 분해
BCNF 분해 알고리즘
3NF vs BCNF 상세 비교
| 구분 | 3NF | BCNF |
|---|---|---|
| 정의 | 비주요 속성이 후보키에 이행 종속하지 않음 | 모든 결정자가 슈퍼키 |
| 엄격도 | 상대적으로 느슨 | 더 엄격 |
| 포함 관계 | BCNF ⊂ 3NF (BCNF이면 반드시 3NF) | - |
| 무손실 분해 | 항상 보장 | 항상 보장 |
| 종속성 보존 | 항상 보장 | 보장되지 않을 수 있음 |
| 이상 현상 | 일부 남을 수 있음 | 모든 함수 종속 관련 이상 제거 |
| 실무 적용 | 대부분의 경우 충분 | 결정자 관계가 복잡할 때 |
이런 이유로 실무에서는 3NF에서 멈추고, BCNF로 분해하지 않는 경우도 있습니다. 종속성 보존이 더 중요하다고 판단되면 3NF를 유지하면서 갱신 이상은 애플리케이션 로직으로 관리합니다.
4NF (Fourth Normal Form)
4NF는 다치 종속(Multi-Valued Dependency, MVD)을 제거합니다.
다치 종속이란
A →→ B 형태로, 하나의 A 값에 여러 B 값이 독립적으로 대응되는 관계입니다. 일반 함수 종속은 A → B(하나의 A에 하나의 B)이지만, 다치 종속은 A →→ B(하나의 A에 여러 B가 세트로)입니다.
4NF 위반 사례
4NF 분해
5NF (Fifth Normal Form)
5NF(Project-Join Normal Form, PJ/NF)는 조인 종속(Join Dependency)을 제거합니다.
조인 종속이란
릴레이션 R이 R1, R2, ..., Rn으로 분해된 뒤, 이들을 자연 조인하면 원래 R이 정확히 복원되는 성질입니다. 2개 테이블로 분해해서는 정보 손실 없이 분해할 수 없지만, 3개 이상으로 분해하면 가능한 경우가 있습니다.
5NF는 이론적으로는 흥미롭지만, 실무에서 직접 적용하는 경우는 극히 드뭅니다. 조인 종속을 식별하는 것 자체가 매우 어렵고, 과도한 분해는 조인 비용을 증가시킵니다.
정규형의 포함 관계
1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF
모든 5NF 릴레이션은 4NF를 만족하고,
모든 4NF 릴레이션은 BCNF를 만족하고,
모든 BCNF 릴레이션은 3NF를 만족하고,
...
역은 성립하지 않음
3NF인데 BCNF가 아닌 릴레이션이 존재
BCNF인데 4NF가 아닌 릴레이션이 존재정규화 분해의 두 가지 기준
정규화로 테이블을 분해할 때는 두 가지가 보장되어야 합니다.
무손실 조인 분해 (Lossless Join Decomposition)
분해된 테이블들을 자연 조인하면 원래 테이블이 정확히 복원되어야 합니다. 잘못 분해하면 조인 시 원래 없던 행이 생기는 가짜 튜플(Spurious Tuple) 문제가 발생합니다.
종속성 보존 분해 (Dependency Preserving Decomposition)
원래 릴레이션의 모든 함수 종속이 분해된 릴레이션들에서 직접 검증 가능해야 합니다. 종속성 보존이 안 되면, 무결성 검증을 위해 조인이 필요해져 성능이 저하됩니다.
실무에서 어디까지 정규화하는가
| 상황 | 권장 정규형 | 이유 |
|---|---|---|
| 일반적인 OLTP 시스템 | 3NF | 대부분의 이상 현상 제거, 종속성 보존 |
| 복잡한 업무 규칙 | BCNF 검토 | 결정자-피결정자 관계가 복잡할 때 |
| 데이터 웨어하우스/분석 | 반정규화 (스타 스키마) | 조인 최소화, 조회 성능 우선 |
| 시험/이론 | 5NF까지 | 4NF, 5NF 개념 문제 출제 |
실무 정규화 판단 기준
과도한 정규화의 문제
테이블 수 증가
→ 단순 조회도 여러 테이블 JOIN 필요
→ 쿼리 복잡도 증가
→ 개발 생산성 저하
조인 비용
→ 테이블 분리가 많을수록 JOIN 횟수 증가
→ 대량 데이터에서 조인 성능 저하
→ 특히 OLAP 환경에서 치명적
유지보수
→ 엔티티 간 관계 파악이 어려워짐
→ 데이터 입력/수정 시 여러 테이블 동시 처리 필요
→ 외래키 제약이 많아져 데이터 마이그레이션 복잡정규화 연습 문제
정리
| 정규형 | 핵심 조건 | 제거 대상 |
|---|---|---|
| 1NF | 원자값 | 반복 그룹, 복합 값 |
| 2NF | 완전 종속 | 부분 종속 |
| 3NF | 비이행 종속 | 이행 종속 |
| BCNF | 모든 결정자가 슈퍼키 | 후보키 아닌 결정자 |
| 4NF | 다치 종속 제거 | 독립적 다중값 관계 |
| 5NF | 조인 종속 제거 | 3개 이상 분해 필요 사례 |
정규화는 데이터 무결성을 위한 것이고, 반정규화는 성능을 위한 것입니다. 실무에서는 3NF까지 적용하고, BCNF 위반이 발견되면 종속성 보존 여부를 검토한 뒤 적용 여부를 결정하는 접근이 가장 합리적입니다. 4NF와 5NF는 시험에서 개념을 묻는 경우가 있으므로 정의와 예시를 확실히 이해해두어야 합니다.
다음 절에서 반정규화를 다루겠습니다.