DATABASE DESIGN

[데이터베이스 설계] 데이터베이스의 정규화(Normalization)란? ( 2 ) - BCNF 와 3NF

ch010104 2025. 9. 17. 23:37
  • 데이터베이스를 설계할 때 가장 중요한 목표 중 하나는 '불필요한 데이터 중복을 최소화'하는 것
  • 중복된 데이터는 삽입, 삭제, 수정 시 이상 현상(Anomaly)을 일으킬 수 있으며, 데이터의 일관성을 해치는 주범임
  • 이러한 문제를 해결하기 위한 체계적인 프로세스가 바로 정규화(Normalization)

1. 정규화의 초석: 함수 종속성(Functional Dependency) 파헤치기

- 정규화를 이해하기 위해서는 먼저 함수 종속성(Functional Dependency, FD)의 개념을 확실히 알아야 함

- 간단히 말해, 어떤 속성(Attribute)의 집합이 다른 속성의 값을 유일하게 결정할 때 "함수 종속성이 있다"고 말함

  • 표기: α → β (α가 β를 함수적으로 결정)
  • 의미: 릴레이션 내의 두 튜플(행)이 α 속성에서 동일한 값을 가지면, β 속성에서도 반드시 동일한 값을 가져야 함
  • 예시: 학번 → 이름은 함수 종속성이 성립하지만, 동명이인이 있을 수 있으므로 이름 → 학번은 성립하지 않음

함수 종속성의 종류와 확장

 

1) 자명한 함수 종속성 (Trivial FD)

  • 종속 관계가 너무나 명확해서 항상 성립하는 함수 종속성을 의미
  • 만약 β가 α의 부분집합이라면 (β ⊆ α), α → β는 자명한 FD
  • 예시:{이름, 나이} → {이름}

2) 함수 종속성 집합의 폐포 (Closure of a Set of FDs, F+)

  • 주어진 함수 종속성 집합 F로부터 논리적으로 유추할 수 있는 모든 함수 종속성의 집합을 '폐포'라고 하며, F+로 표기
  • 예를 들어, A→B이고 B→C라면, 우리는 A→C라는 새로운 FD를 유추할 수 있음
  • 이러한 유추 규칙을 체계적으로 정리한 것이 암스트롱의 공리(Armstrong's Axioms)
    • 재귀 규칙 (Reflexivity): β ⊆ α 이면, α → β이다.
    • 부가 규칙 (Augmentation): α → β 이면, γα → γβ이다.
    • 이행 규칙 (Transitivity): α → β 이고 β → γ 이면, α → γ이다.

3) 속성 집합의 폐포 (Attribute Set Closure, α+)

  • 주어진 속성 집합 α에 의해 함수적으로 결정되는 모든 속성들의 집합을 의미하며, α+로 표기
  • α+는 다음과 같은 중요한 용도로 사용
  • 슈퍼키 테스트: 특정 속성 집합 α의 폐포(α+)가 릴레이션의 모든 속성을 포함하면, α는 슈퍼키임
  • 함수 종속성 테스트: α → β가 성립하는지 확인하려면, α+를 계산하여 βα+에 포함되는지 확인

2. 좋은 분해(Decomposition)의 조건

  • 정규화는 중복을 줄이기 위해 테이블을 분해하는 과정
  • 이때, 분해는 다음의 목표를 만족해야함
  1. 무손실 조인 분해 (Lossless-Join Decomposition):
    - 분해된 릴레이션을 다시 조인(Join)했을 때 원래의 데이터가 그대로 복원되어야 함
    - 정보의 손실이 없어야 하는 것은 필수 조건임
     
  2. 중복 제거 (No Redundancy):
    - 정규화의 본질적인 목표로, 가급적 중복이 없도록 분해해야 함

     
  3. 종속성 보존 (Dependency Preservation):
    - 원래 릴레이션이 가지고 있던 함수 종속성들이 분해된 릴레이션들에서도 모두 확인 가능해야 함
  • 이 중 무손실 조인은 가장 중요한 조건임
  • 릴레이션 R을 R1, R2로 분해할 때, 무손실 조인을 만족하기 위한 충분조건은 다음과 같음
    • R1 ∩ R2 → R1 또는 R1 ∩ R2 → R2가 F+에 속해야 함
  • 쉽게 말해, 두 릴레이션의 공통 속성이 둘 중 한쪽 릴레이션의 슈퍼키 역할을 해야 한다는 것

3. 정규형(Normal Forms): BCNF와 3NF

1) BCNF (Boyce-Codd Normal Form)

BCNF는 함수 종속성을 기반으로 발견할 수 있는 모든 중복을 제거하는 것을 목표로 하는 강력한 정규형

  1. α → β가 자명한 함수 종속성이다 (즉, β ⊆ α).
  2. α가 릴레이션 R의 **슈퍼키(Superkey)**이다.
  • BCNF 조건: 릴레이션 R의 모든 함수 종속성 α → β에 대해, 아래 둘 중 하나를 반드시 만족해야 함

- 만약 BCNF를 위반하는 α → β가 존재한다면, 해당 릴레이션은 다음과 같이 분해

  • (α ∪ β)를 하나의 릴레이션으로 분리
  • (R - (β - α))를 나머지 릴레이션으로 분리

- BCNF는 데이터 중복을 효과적으로 제거

- 하지만, 분해 과정에서 원래의 함수 종속성을 모두 보존하지 못하는 경우가 발생할 수 있다는 단점


2) 3NF (Third Normal Form)

- 3NF는 BCNF보다 약간 완화된 조건을 가진 정규형

- 무손실 조인과 종속성 보존을 항상 보장하는 분해가 가능하다는 장점

  1. α → β가 자명한 함수 종속성임
  2. α가 릴레이션 R의 슈퍼키임
  3. β - α에 속하는 각 속성 A가 R의 어떤 후보 키(Candidate Key)에 포함되어 있음
  • 3NF 조건: 릴레이션 R의 모든 함수 종속성 α → β에 대해, 아래 셋 중 하나를 반드시 만족해야 함

- BCNF와의 가장 큰 차이점은 3번 조건

- 이 조건 덕분에 BCNF에서는 허용되지 않던 일부 종속성이 3NF에서는 허용될 수 있임

- 이로 인해 약간의 데이터 중복이 남을 수는 있지만 , 모든 함수 종속성을 보존할 수 있다는 실용적인 이점을 얻게 됨


4. BCNF vs. 3NF: 핵심 비교

구분 BCNF 3NF
중복성 데이터 중복을 완벽히 제거 (FD 기반)
 


일부 데이터 중복이 존재할 수 있음
 


무손실 조인 항상 가능
 


항상 가능
 


종속성 보존 보장하지 못할 수 있음
 


항상 보장 가능
 


  • BCNF는 중복 제거라는 이상에 가장 가깝지만 종속성 보존을 희생할 수 있음
  • 3NF는 약간의 중복을 감수하는 대신 무손실 조인과 종속성 보존을 모두 만족시키는 실용적인 타협점임
  • 데이터베이스 설계 시 이 두 정규형의 장단점을 이해하고 상황에 맞는 적절한 정규형을 선택하는 것이 중요