Database Normalization (정규화)

"테이블을 왜 쪼개고, 어디까지 쪼개야 하는가?" 이 페이지는 그 질문에 답한다. 정규화는 데이터 중복을 없애고 입력·수정·삭제 때 생기는 이상 현상(anomaly)을 제거하기 위해, 함수 종속성을 기준으로 릴레이션을 분해하는 설계 절차다.[1] ER Model로 개념적 설계를 마친 뒤 테이블로 옮기는 논리적 설계 단계에 놓이고, Database System Foundation이 말하는 중복 제어를 실제로 수행하는 방법이라는 위치 지정은 원문에 없는 이 page의 해석이다.

정규화의 목적

기준이 되는 함수 종속성

종속 형태 뜻 위반하는 정규형
완전 함수 종속 비프라임 속성이 기본 키 전체에 종속 없음 (유지)
부분 함수 종속 비프라임 속성이 기본 키의 일부에만 종속 2NF 위반
이행적 종속 X → Y → Z에서 Y가 기본 키가 아닐 때 3NF 위반
flowchart LR
    N1[1NF] -->|부분 함수 종속 제거| N2[2NF]
    N2 -->|이행적 종속 제거| N3[3NF]
    N3 -->|모든 결정자를 슈퍼 키로| BC[BCNF]

제2정규형 (2NF)

기본 키: (동아리명, 학번)

만약 '역할'이 '학번'에만 종속  → 부분 함수 종속 → 2NF 위반
만약 '가입날'이 '동아리명'에만 종속 → 부분 함수 종속 → 2NF 위반
R(A, B, C, D, E, F, G, H, I, J)
  기본 키: {A, B}
  {A,B} → {C}   (완전 FD → 유지)
  {A}   → {D,E,I,J} (부분 FD → 분리)
  {B}   → {F,G,H}   (부분 FD → 분리)

결과:
  R1(A, B, C)
  R2(A, D, E, I, J)
  R3(B, F, G, H)

제3정규형 (3NF)

R2(A, D, E, I, J)
  {A} → {D}
  {D} → {I, J}   ← A → D → I,J : 이행적 종속 → 3NF 위반

결과:
  R2a(A, D, E)
  R2b(D, I, J)

BCNF (Boyce-Codd Normal Form)

후보 키 판별

R(A, B, C, D, E)
FD: AB → C, CD → E, DE → B

AB가 후보 키인가?
  AB → C 가능
  {A,B,C}에서 D, E를 결정 불가
  → 후보 키 아님

ABD가 후보 키인가?
  AB → C   → {A,B,C,D}
  CD → E   → {A,B,C,D,E}  (모든 속성 결정)
  부분 집합 AB, AD, BD 로는 모든 속성 결정 불가
  → ABD는 후보 키 ✓

혼동하기 쉬운 지점

관련

테스트 질문

출처


  1. 정규화.md (CS/Database), 정규화.md (Database) — 두 파일은 관련 개념 링크 두 줄을 빼면 본문이 같다. "데이터 중복성 제거", "입력/수정/삭제 시 이상 현상(Anomaly) 제거", "데이터베이스 설계의 효율성 증대", "X → Y : X의 값이 Y의 값을 유일하게 결정", 완전·부분·이행 종속 정의, 2NF 조건·위반 예시·분해 과정, 3NF 조건·분해 예시, "3NF보다 더 강한 조건", "모든 함수 종속성 X → Y에서 X가 슈퍼 키여야 함", 후보 키 판별 예제 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 출처 매핑 미확인 — 원문은 BCNF를 "모든 함수 종속성 X → Y에서 X가 슈퍼 키"로만 적고 자명한 종속의 예외를 다루지 않는다. 예외 조건은 일반적인 교과서 정의에 근거한 보충이며, 이 vault의 Raw source로 확인하지 않았다. ↩︎