1. 정규화란?
정규화(Normalization)는 데이터베이스 설계 과정에서 데이터의 중복을 줄이고, 데이터 삽입/삭제/수정 시 발생할 수 있는 이상(anomaly)을 방지하기 위해 릴레이션(테이블)을 구조적으로 재구성하는 과정입니다.
- 동일한 정보를 담는 릴레이션 스키마라도 속성 구성 방식에 따라 성능과 정확성에 큰 차이가 발생할 수 있습니다.
- 정규화는 데이터베이스의 효율성, 일관성, 유지보수성을 확보하는 핵심 설계 기법입니다.
2. 정규화의 필요성
정규화는 다음과 같은 갱신 이상(Update Anomaly) 문제를 해결:
삽입 이상 | 데이터를 삽입하려 해도 불필요한 다른 정보도 함께 입력해야 하는 문제 |
삭제 이상 | 일부 데이터를 삭제하면 원하지 않는 다른 정보까지 함께 삭제되는 문제 |
수정 이상 | 하나의 데이터 변경을 위해 여러 레코드를 일괄 수정해야 하는 문제 |
3. 정규화를 위한 핵심 개념
3.1 함수적 종속성(Functional Dependency, FD)
- 어떤 릴레이션에서 속성 A의 값(또는 집합)이 속성 B의 값(또는 집합)을 결정하면, “B는 A에 함수적으로 종속된다”고 하며 A → B로 표기.
- 예: 학번 → 이름 은 학번이 이름을 결정짓는 함수적 종속성을 갖는다.
3.2 클로저(Closure)
- 주어진 함수적 종속성 집합으로부터 암스트롱 공리(Armstrong’s Axioms)를 사용하여 추론 가능한 모든 함수적 종속성 집합을 구한 것을 클로저라 합니다.
- 클로저는 릴레이션의 속성 간에 존재할 수 있는 잠재적인 관계까지 포함하여 설계의 기반이 됩니다.
- 암스트롱 공리
- 1. 반사성(재귀성, Reflexivity) A ⊇ B이면, A → B
- 2. 증가성(부가성, Augmentation) A → B이면, AC → BC
- 3. 이행성(Transitivity) A → B이고 B → C이면, A → C
- 4. 분해(Decomposition) A → BC이면, A → B 그리고 A → C
- 5. 합집합(Union) A → B, A → C이면, A → BC
- 6. 의사 이행성(Pseudotransitivity) A → B, 그리고 BC → D이면, AC → D
3.3 카노니컬 커버(최소 커버, Canonical Cover)
- 클로저에서 도출된 함수적 종속성 중 의미상 중복되거나 자명(당연)한 종속성을 제거하여 최소화한 형태입니다.
- 카노니컬 커버는 정규화의 기준으로 사용되며, 효율적인 스키마 분해의 기초 자료가 됩니다.
- 카노니컬 커버의 표준형
- 각 함수적 종속성의 오른쪽은 반드시 하나의 속성이어야 함 (A → B, A → C 형태)
- 함수적 종속성의 왼쪽에서 속성을 제거해도 의미가 유지되면, 해당 속성은 제거해야 함
- 의미상 중복되거나 포함된 함수적 종속성은 제거해야 함
4. 정규형(Normal Forms)
- 릴레이션이 특정한 제약조건을 만족할 경우, 이를 정규형(Normal Form)이라 합니다.
- 정규형은 각 단계마다 데이터의 중복을 줄이고 이상을 방지하는 수준이 높아집니다.
제1정규형(1NF) | 모든 속성은 도메인 원자값(단 하나의 의미만을 가짐, atomic value)만 포함된다. 관계형 모델의 특성을 만족하는 경우 자동 적용되는 정규형이다. |
반복 속성 제거 |
제2정규형(2NF) | 1NF + 부분 함수 종속 제거 (기본키에 완전 종속되도록 릴레이션을 분해) | 삽입/수정 이상 방지 |
제3정규형(3NF) | 2NF + 이행적 종속성 제거 | 비핵심 속성이 다른 비핵심 속성을 결정하지 않게 |
BC정규형(BCNF) | 모든 결정자가 후보키여야 함 | 강한 형태의 3NF, 복잡한 종속성 해결 |
제4정규형(4NF) | 다치 종속 제거 | 하나의 속성이 여러 개의 독립적 값을 가질 때 해결 |
제5정규형(5NF) | 조인 종속 제거 | 분해된 릴레이션을 조인했을 때 정보 손실 없이 복원 가능해야 함 |
함수적 종속성 다이어그램(Functional Dependency Diagram, FDD): 릴레이션 내의 종속성간의 종속 관계를 도식화한 표현 방식
- X -> Y에 대한 함수 종속 관계
- 부분 함수 종속: Y가 X의 전체가 아닌 일부분에 종속
- 완전 함수 종속: Y가 X의 전체에 종속
- 이행적 종속성
- X -> Y이고 Y -> Z이면 X -> Z이다.
정규화
- 릴레이션 분할을 통해 데이터의 중복성을 최소화하는 과정
- 사용 과정에서 많은 조인 연산을 유발
역정규화
- 정규화의 반대과정으로 정규화를 통해 분리되었던 릴레이션을 통합하는 재종정을 수행하고 정보의 부분적 중복을 허용하는 기법
- 데이터 접근 성능 개선 목적
정규화 되지 않은 스키마와 역정규화 스키마는 구별해야한다.