안동민 개발노트 아이콘

안동민 개발노트

8장 : 정규화

BCNF와 그 이상

3NF까지 적용해도 여전히 이상 현상이 남는 경우가 있습니다. BCNF는 이 틈새를 메우는 더 엄격한 정규형입니다. 정규화의 궁극적 목표는 하나의 사실은 하나의 장소에만 저장하는 것인데, 3NF만으로는 이 목표를 완전히 달성하지 못하는 경우가 존재합니다.


3NF의 한계

3NF는 모든 비자명 함수 종속 X → A에 대해 X가 슈퍼키이거나 A가 주요 속성이어야 한다고 봅니다. 여기서 A는 오른쪽 속성 집합의 각 단일 속성으로 나누어 검사합니다. 이 조건은 종속성 보존을 위해 일부 예외를 허용하므로, 슈퍼키가 아닌 결정자가 후보키의 일부를 결정하는 경우를 완전히 막지 못할 수 있습니다.


BCNF (Boyce-Codd Normal Form)

BCNF의 조건: 모든 비자명 함수 종속 X → Y에서 결정자 X가 슈퍼키여야 합니다.

3NF와의 차이는 무엇일까요? 3NF는 X가 슈퍼키가 아니더라도 오른쪽의 각 속성이 주요 속성이면 허용합니다. 하지만 BCNF는 예외 없이 결정자가 슈퍼키여야 하므로 더 엄격합니다.

BCNF 위반 사례

BCNF 위반이 일으키는 이상 현상

BCNF 분해

BCNF 분해 알고리즘


3NF vs BCNF 상세 비교

구분3NFBCNF
정의X가 슈퍼키이거나 종속자가 주요 속성모든 비자명 FD의 결정자가 슈퍼키
엄격도상대적으로 느슨더 엄격
포함 관계BCNF ⊂ 3NF (BCNF이면 반드시 3NF)-
무손실 분해3NF 합성 알고리즘으로 보장 가능BCNF 분해 알고리즘으로 보장 가능
종속성 보존보존 가능한 3NF 분해가 존재보장되지 않을 수 있음
이상 현상일부 함수 종속 관련 이상이 남을 수 있음함수 종속에서 오는 이상 제거
실무 적용대부분의 경우 충분결정자 관계가 복잡할 때

이런 이유로 실무에서는 3NF에서 멈추고, BCNF로 분해하지 않는 경우도 있습니다. 종속성 보존이 더 중요하다고 판단되면 3NF를 유지하되, UNIQUE, CHECK, FK, 트리거, 애플리케이션 트랜잭션처럼 그 종속을 실제로 지키는 장치를 함께 설계해야 합니다.


4NF (Fourth Normal Form)

4NF다치 종속(Multi-Valued Dependency, MVD)이 만드는 중복을 제거합니다. 모든 비자명 다치 종속 X →→ Y에서 X가 슈퍼키이면 4NF를 만족합니다. 함수 종속은 다치 종속의 특수한 경우로 볼 수 있으므로, 함수 종속과 다치 종속을 함께 고려하면 4NF는 BCNF보다 강한 조건입니다.

다치 종속이란

A →→ B 형태로, 하나의 A 값에 여러 B 값의 집합이 독립적으로 대응되는 관계입니다. 일반 함수 종속은 A → B(하나의 A에 하나의 B)이지만, 다치 종속은 A →→ B(하나의 A에 여러 B가 세트로)입니다. 특히 A에 대해 B 집합과 C 집합이 서로 독립이면 한 테이블에 둘 때 조합 수만큼 행이 불어납니다.

4NF 위반 사례

4NF 분해


5NF (Fifth Normal Form)

5NF(Projection-Join Normal Form, PJ/NF)조인 종속(Join Dependency)을 제거합니다.

조인 종속이란

릴레이션 R이 R1, R2, ..., Rn으로 분해된 뒤, 이들을 공통 속성 기준으로 조인하면 원래 R이 정확히 복원되는 성질입니다. 5NF는 모든 비자명 조인 종속이 후보키에 의해 암시되어야 한다는 조건입니다. 즉 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)

원래 명세한 함수 종속 집합 F가 분해된 릴레이션들의 종속성으로 조인 없이 검증 가능해야 합니다. 종속성 보존이 안 되면, 무결성 검증을 위해 조인이 필요해져 성능이 저하됩니다. 다만 BCNF 분해는 무손실 조인을 우선하면서 종속성 보존을 일부 포기할 수 있습니다.


실무에서 어디까지 정규화하는가

상황권장 정규형이유
일반적인 OLTP 시스템3NF대부분의 이상 현상 제거, 종속성 보존
복잡한 업무 규칙BCNF 검토결정자-피결정자 관계가 복잡할 때
데이터 웨어하우스/분석반정규화 (스타 스키마)조인 최소화, 조회 성능 우선
시험/이론5NF까지4NF, 5NF 개념 문제 출제

실무 정규화 판단 기준

과도한 정규화의 문제

과도한 정규화의 부작용
테이블 수 증가
  → 단순 조회도 여러 테이블 JOIN 필요
  → 쿼리 복잡도 증가
  → 개발 생산성 저하

조인 비용
  → 테이블 분리가 많을수록 JOIN 횟수 증가
  → 대량 데이터에서 조인 성능 저하
  → 특히 OLAP 환경에서 치명적

유지보수
  → 엔티티 간 관계 파악이 어려워짐
  → 데이터 입력/수정 시 여러 테이블 동시 처리 필요
  → 외래키 제약이 많아져 데이터 마이그레이션 복잡

정규화 연습 문제


정리

정규형핵심 조건제거 대상
1NF원자값반복 그룹, 복합 값
2NF후보키 전체에 완전 종속부분 종속
3NF슈퍼키이거나 종속자가 주요 속성이행 종속
BCNF모든 비자명 FD의 결정자가 슈퍼키슈퍼키 아닌 결정자
4NF모든 비자명 MVD의 결정자가 슈퍼키독립적 다중값 관계
5NF모든 비자명 JD가 후보키로 설명됨3개 이상 분해 필요 사례

정규화는 주로 중복과 이상 현상 감소, 데이터 무결성을 위한 것이고, 반정규화는 주로 조회 성능과 운영 편의를 위한 것입니다. 실무에서는 3NF까지 적용하고, BCNF 위반이 발견되면 종속성 보존 여부를 검토한 뒤 적용 여부를 결정하는 접근이 가장 합리적입니다. 4NF와 5NF는 시험에서 개념을 묻는 경우가 있으므로 정의와 예시를 확실히 이해해두어야 합니다.

다음 절에서 반정규화를 다루겠습니다.