10 정규화
정규화(Normalization)
정규화는 데이터베이스의 중복 데이터를 최소화하고 데이터 무결성을 유지하며 삽입, 갱신, 삭제 시 발생하는 **이상 현상(Anomaly)**을 방지하기 위해 테이블 구조를 체계적으로 분해하는 과정입니다. 정규화는 **정규형(Normal Form)**이라는 규칙을 단계별로 적용하며 진행됩니다.
정규화의 주요 개념
슈퍼 키(Super Key) 테이블의 각 튜플을 유일하게 식별할 수 있는 속성의 집합입니다.
후보 키(Candidate Key) 슈퍼 키 중에서 불필요한 속성을 제거해 더 이상 축소할 수 없는 키입니다.
기본 키(Primary Key) 후보 키 중에서 선택된 키로, 테이블의 주 식별자로 사용됩니다.
논 프라임 속성(Non-Prime Attribute) 기본 키에 속하지 않는 속성입니다.
함수 종속성(Functional Dependency) 속성 X의 값이 속성 Y의 값을 결정할 때, Y는 X에 종속된다고 합니다. 예시:
X → Y
(X가 Y를 결정).부분 함수 종속(Partial Dependency) 복합 키 중 일부 속성에만 종속되는 것을 의미합니다.
이행적 종속(Transitive Dependency) X → Y이고, Y → Z이면 X → Z가 성립하는 종속성을 의미합니다.
정규화 단계
1NF (제1정규형)
규칙: 모든 속성의 값은 단일 값(Atomic)을 가져야 한다.
다중 값, 반복 그룹은 제거해야 합니다.
1NF 위반 예시:
1NF 적용 후:
2NF (제2정규형)
규칙: 1NF를 만족하고, 모든 논 프라임 속성은 기본 키에 대해 완전 함수 종속(Full Functional Dependency)을 만족해야 한다.
부분 함수 종속(Partial Dependency)을 제거합니다.
2NF 위반 예시:
과목명 → 교수명
종속성이 존재하며, 복합 키(수강ID, 학생ID) 일부만 종속됩니다.
2NF 적용 후:
수강 정보 테이블:
과목 정보 테이블:
3NF (제3정규형)
규칙: 2NF를 만족하고, 논 프라임 속성이 다른 논 프라임 속성에 이행적 종속(Transitive Dependency)되지 않아야 한다.
이행 종속을 제거합니다.
3NF 위반 예시:
학과ID → 학과명
이행 종속이 발생합니다.
3NF 적용 후:
학생 테이블:
학과 테이블:
BCNF (Boyce-Codd Normal Form)
규칙: 3NF를 만족하고, 모든 함수 종속에서 결정자(Determinant)는 반드시 후보 키(Candidate Key)여야 한다.
비정상적인 종속성이 남아 있는 경우를 해결합니다.
BCNF 위반 예시:
클래스 → 뱅크네임
종속성이 존재하지만, 클래스는 후보 키가 아닙니다.
BCNF 적용 후:
클래스 정보 테이블:
원래 테이블에서는 뱅크네임 속성을 제거하고 클래스만 유지합니다.
제4정규형(4NF, Fourth Normal Form)
정의
**제4정규형(4NF)**는 **다치 종속(Multi-Valued Dependency, MVD)**를 제거하는 것을 목표로 합니다. 테이블이 BCNF를 만족하면서, 하나의 속성 값이 다른 여러 속성 값들과 독립적으로 연관될 때 이를 다치 종속으로 간주하고 이를 제거합니다.
다치 종속(Multi-Valued Dependency, MVD)란?
속성 X가 속성 Y와 Z에 대해 독립적인 관계를 가질 때 발생합니다.
이는 X →→ Y와 X →→ Z라는 두 개의 독립적인 다치 종속성을 가진 경우를 의미합니다.
예시:
학생ID →→ 수업: 한 학생이 여러 수업을 수강할 수 있습니다.
학생ID →→ 취미: 한 학생이 여러 취미를 가질 수 있습니다.
하지만 수업과 취미는 서로 독립적입니다.
4NF 위반 문제
위 예시에서는 수업과 취미가 서로 독립적이므로, 데이터가 불필요하게 중복되어 저장되고 있습니다.
4NF 적용
다치 종속성을 분리하여 테이블을 나눕니다.
학생-수업 관계 테이블:
학생-취미 관계 테이블:
결과:
각 테이블은 중복 없이 독립적인 정보를 저장하게 되며, 다치 종속성을 제거하여 4NF를 만족합니다.
4NF를 적용하는 이유
다치 종속성을 제거하여 데이터 중복을 줄이고, 삽입, 삭제, 갱신 시 발생할 수 있는 이상 현상(Anomaly)을 방지합니다.
제5정규형(5NF, Fifth Normal Form)
정의
**제5정규형(5NF)**는 **조인 종속(Join Dependency)**을 제거하는 것을 목표로 합니다. 테이블이 4NF를 만족하면서, 모든 관계가 조인으로 정확히 표현될 수 있어야 하며, 조인으로 인해 불필요한 데이터 중복이 발생하지 않아야 합니다.
조인 종속(Join Dependency, JD)란?
테이블을 다시 조합(조인)했을 때 원래의 테이블로 복구할 수 있는 관계를 말합니다.
조인 종속은 데이터가 여러 테이블로 분리될 때 발생할 수 있는 중복 문제를 다룹니다.
5NF 위반 예시
여기서 학생ID → 과목, 과목 → 교수라는 관계가 있지만, 학생ID와 교수는 직접적인 관계가 없습니다.
이 관계를 3개의 독립적인 테이블로 분리할 수 있습니다.
5NF 적용
학생-과목 테이블:
과목-교수 테이블:
학생-교수 테이블 (조인으로 재구성 가능):
5NF의 특징
데이터 중복을 완전히 제거합니다.
모든 관계가 조인을 통해 원래의 테이블로 복구될 수 있습니다.
5NF를 적용하는 이유
데이터 모델이 매우 복잡한 경우(예: 다대다 관계) 데이터의 중복을 제거하고 무결성을 보장하기 위해 사용합니다.
그러나 대부분의 실무에서는 4NF까지만 적용하며, 5NF는 특정 상황에서만 필요합니다.
디노멀라이제이션(Denormalization)
정규화는 중복을 최소화하지만, 테이블이 과도하게 분할되면 성능 저하나 조인(Join) 비용이 커질 수 있습니다. 이를 방지하기 위해 중복을 허용하면서 테이블을 병합하는 과정을 디노멀라이제이션이라고 합니다.
Last updated