Database Normalization (정규화)
"테이블을 왜 쪼개고, 어디까지 쪼개야 하는가?" 이 페이지는 그 질문에 답한다. 정규화는 데이터 중복을 없애고 입력·수정·삭제 때 생기는 이상 현상(anomaly)을 제거하기 위해, 함수 종속성을 기준으로 릴레이션을 분해하는 설계 절차다.[1] ER Model로 개념적 설계를 마친 뒤 테이블로 옮기는 논리적 설계 단계에 놓이고, Database System Foundation이 말하는 중복 제어를 실제로 수행하는 방법이라는 위치 지정은 원문에 없는 이 page의 해석이다.
정규화의 목적
기준이 되는 함수 종속성
X → Y는 X의 값이 Y의 값을 유일하게 결정한다는 뜻이다.[1:4]
| 종속 형태 | 뜻 | 위반하는 정규형 |
|---|---|---|
| 완전 함수 종속 | 비프라임 속성이 기본 키 전체에 종속 | 없음 (유지) |
| 부분 함수 종속 | 비프라임 속성이 기본 키의 일부에만 종속 | 2NF 위반 |
| 이행적 종속 | X → Y → Z에서 Y가 기본 키가 아닐 때 |
3NF 위반 |
- 위 표는 원문의 정의를 정규형과 짝지어 옮긴 것이다.[1:5]
flowchart LR
N1[1NF] -->|부분 함수 종속 제거| N2[2NF]
N2 -->|이행적 종속 제거| N3[3NF]
N3 -->|모든 결정자를 슈퍼 키로| BC[BCNF]- 원문은 1NF 조건을 따로 정의하지 않고 2NF의 전제로만 쓴다.[1:6] ER Model 페이지가 다루는 원자값(simple attribute)과 "정규화 과정에서 걸린다"는 복합·다중값 속성 논의가 1NF 쪽 맥락이라고 볼 수 있다.
제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)
- BCNF는 3NF보다 강한 조건이다. 모든 함수 종속
X → Y에서 X가 슈퍼 키여야 한다.[1:11] - 원문은 이 조건에서 자명한 종속(Y가 X의 부분집합인 경우)을 제외한다는 점을 따로 적지 않는다. 보통 BCNF 정의는 자명하지 않은 종속만 대상으로 삼는다고 이해된다.[2]
후보 키 판별
- 원문은 속성 집합이 모든 속성을 결정하는지(폐포)를 따라가며 후보 키를 판별한다.[1:12]
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는 후보 키 ✓
- 같은 방법으로 계산하면 이 릴레이션의 후보 키는 ABD 하나가 아니다. ACD는
CD → E,DE → B로 모든 속성을 결정하고, ADE는DE → B,AB → C로 모든 속성을 결정하며, 두 집합 모두 진부분집합으로는 결정하지 못한다. 이 계산은 원문 예제에 이 Wiki가 덧붙인 것이다. 후보 키는 여러 개일 수 있으므로, 하나를 찾았다고 판별을 멈추면 안 된다는 점을 보여준다.
혼동하기 쉬운 지점
- 정규화가 없애려는 이상 현상은 설계 결함 때문에 생기는 입력·수정·삭제 이상이다.[1:13] 트랜잭션 격리 수준에서 말하는 Dirty Read, Non-Repeatable Read, Phantom Read는 동시 실행 때문에 생기는 읽기 이상이며, Database Isolation에서 다룬다. 둘 다 "이상 현상"이라고 부르지만 원인과 해결 수단이 다르다.
관련
- Entity-Relationship Model: 개념적 설계 결과를 테이블로 옮기는 과정에서 정규화가 적용된다.
- Database System Foundation: DBMS의 중복 제어 요구를 설계 수준에서 구현하는 절차가 정규화다.
- Database Isolation: 이름은 비슷하지만 다른 종류의 이상 현상을 다룬다.
테스트 질문
- 기본 키가
(동아리명, 학번)인 테이블에서 '역할'이 '학번'에만 종속되면 어떤 정규형을 위반하는가? - 3NF와 BCNF의 조건 차이는 무엇인가?
R(A,B,C,D,E),AB → C,CD → E,DE → B에서 ABD 말고 다른 후보 키가 있는가?
출처
정규화.md (CS/Database), 정규화.md (Database) — 두 파일은 관련 개념 링크 두 줄을 빼면 본문이 같다. "데이터 중복성 제거", "입력/수정/삭제 시 이상 현상(Anomaly) 제거", "데이터베이스 설계의 효율성 증대", "X → Y : X의 값이 Y의 값을 유일하게 결정", 완전·부분·이행 종속 정의, 2NF 조건·위반 예시·분해 과정, 3NF 조건·분해 예시, "3NF보다 더 강한 조건", "모든 함수 종속성 X → Y에서 X가 슈퍼 키여야 함", 후보 키 판별 예제 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
출처 매핑 미확인 — 원문은 BCNF를 "모든 함수 종속성 X → Y에서 X가 슈퍼 키"로만 적고 자명한 종속의 예외를 다루지 않는다. 예외 조건은 일반적인 교과서 정의에 근거한 보충이며, 이 vault의 Raw source로 확인하지 않았다. ↩︎