1. 정규화 개요
1.1. 정규화
-
정규화(Normalization)
- 부주의한 데이터베이스 설계를 바로잡아 제어할 수 없는 데이터 중복과 갱신 이상(Update Anomaly)을 제거하는 과정
- 원래의 릴레이션을 무손실 분해(Lossless Decomposition)하여 스키마를 정제한다.
-
목적
- 정보의 중복 최소화 (저장 공간 낭비 방지)
- 삽입, 수정, 삭제 시 발생하는 이상 현상(Anomaly) 방지
- 데이터의 일관성(Consistency)과 정확성 유지
1.2. 갱신 이상의 종류
-
삽입 이상(Insertion Anomaly)
- 불필요한 데이터 없이는 새 데이터를 삽입할 수 없는 문제
-
수정 이상(Modification Anomaly)
- 중복된 데이터 중 일부만 수정되어 데이터의 불일치가 발생하는 문제
-
삭제 이상(Deletion Anomaly)
- 어떤 데이터를 삭제할 때, 의도하지 않은 데이터까지 함께 삭제되는 문제
2. 함수적 종속성
-
함수적 종속성(Functional Dependency)
- 정규화 이론의 핵심이 되는 이론적 근거
- 속성(Attribute)들 간의 관련성을 의미한다.
-
결정자(Determinant)
- 어떤 속성 A의 값이 다른 속성 B의 값을 고유하게 결정할 때,
- “A는 B를 결정한다(A → B)“라고 하며 A를 결정자라고 한다.
- (예: 사원번호 → 이름)
2.1. 종속성의 유형
-
완전 함수적 종속성(Full Functional Dependency)
- 종속자가 기본키 전체에 종속된 경우
- 예: {학번, 과목코드} → 성적
-
부분 함수적 종속성(Partial Functional Dependency)
- 종속자가 기본키 일부에만 종속된 경우 (제거하면 2NF)
- 예: {학번, 과목코드} → 학생이름
-
이행적 함수적 종속성(Transitive Functional Dependency)
- A → B이고 B → C일 때, A → C가 성립하는 경우 (제거하면 3NF)
- 예: 학번 → 학과명 → 학과전화번호
3. 릴레이션 분해
-
릴레이션 분해
- 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
- 목적: 중복을 감소시키고 갱신 이상을 해결하기 위함
-
무손실 분해(Lossless Decomposition)
- 분해된 릴레이션들을 자연 조인(Natural Join)했을 때,
- 정보의 손실 없이 원래의 릴레이션으로 복구될 수 있어야 한다는 원칙
-
주의점
- 분해가 과도하면 조인 연산이 많아져 질의 처리에 성능 저하가 발생할 수 있다.
4. 정규형의 종류
- 정규화는 단계별로 진행되며, 상위 단계는 하위 단계의 조건을 모두 만족해야 한다.
- (산업계에서는 보통 BCNF까지만 고려한다.)
4.1. 제1정규형
- 제1정규형(1NF)
- 조건: 릴레이션의 모든 속성이 원자값(Atomic Value)이어야 한다.
- 해결: 반복 그룹이나 다치(Multi-valued) 속성을 분리하여 새로운 릴레이션으로 만든다.
4.2. 제2정규형
- 제2정규형(2NF)
- 조건: 1NF를 만족하고, 기본 키가 아닌 모든 속성이 기본 키에 완전 함수적 종속이어야 한다.
- 해결: 기본 키의 일부분에만 종속되는 부분 함수적 종속성을 제거한다.
4.3. 제3정규형
- 제3정규형(3NF)
- 조건: 2NF를 만족하고, 기본 키가 아닌 속성들이 기본 키에 이행적 함수적 종속되지 않아야 한다.
- 해결: A → B → C 관계에서 (A, B), (B, C)로 릴레이션을 분리하여 이행적 함수적 종속성을 제거한다.
4.4. BCNF
- BCNF(Boyce-Codd Normal Form)
- 조건: 3NF를 만족하고, 모든 결정자가 후보 키(Candidate Key)여야 한다.
- 특징: 제3정규형보다 엄격한 제약 조건으로, 키가 아닌 속성이 기본 키의 일부를 결정하는 경우를 제거한다.
5. 역정규화
-
역정규화(denormalization)
- 정규화로 늘어난 릴레이션을 다시 합치는 과정
- 조인 연산을 줄여 읽기 성능 향상 (트레이드오프)
-
특징 및 트레이드오프
- 읽기(Read) 성능은 최적화되지만, 데이터 중복이 발생한다.
- 갱신(Insert, Update, Delete) 시 이상 현상이 발생할 가능성이 다시 생기며, 데이터 무결성 유지를 위한 관리 비용이 증가한다.
- 설계자는 성능 요구사항과 데이터 일관성 사이에서 균형을 맞춰 정규화와 역정규화를 결정해야 한다.