정규화 개요
정규화(Normalization)는 관계형 데이터베이스의 설계 과정에서 데이터의 중복을 줄이고 데이터 무결성을 보장하기 위해 테이블을 구조적으로 변환하는 과정입니다. 정규화는 데이터베이스의 설계가 비효율적이거나 데이터 중복 및 무결성 문제가 발생할 수 있는 경우 이러한 문제를 해결하기 위해 사용됩니다.
정규화는 일반적으로 다음과 같은 여러 단계(정규형)를 통해 수행됩니다:
1. 정규화의 목적
- 데이터 중복 최소화: 동일한 데이터가 여러 테이블에 저장되는 것을 방지합니다.
- 데이터 무결성 유지: 데이터의 일관성과 정확성을 보장합니다.
- 갱신 이상 방지: 데이터 삽입, 삭제, 갱신 시 발생할 수 있는 문제를 예방합니다.
2. 정규형 (Normal Forms)
정규화 과정은 여러 단계의 정규형을 통해 이루어지며, 각 정규형은 데이터베이스의 구조가 특정 무결성 제약 조건을 충족하도록 합니다. 가장 일반적인 정규형은 1NF, 2NF, 3NF, BCNF, 4NF, 5NF입니다.
2.1. 제1 정규형 (1NF)
정의: 테이블의 모든 열이 원자값(atomic values)을 가져야 하며, 반복 그룹이나 배열이 없어야 합니다.
- 조건:
- 각 열은 원자성(atomicity)을 만족해야 하며, 즉, 각 열은 더 이상 분해할 수 없는 최소 단위의 값을 가져야 합니다.
- 각 행은 유일해야 하며, 테이블의 모든 열은 기본 키에 의해 식별될 수 있어야 합니다.
예시:
- 비정규화된 테이블:학생ID이름과목
1 김철수 수학, 과학 2 이영희 영어, 역사, 과학 - 1NF로 변환된 테이블:학생ID이름과목
1 김철수 수학 1 김철수 과학 2 이영희 영어 2 이영희 역사 2 이영희 과학
2.2. 제2 정규형 (2NF)
정의: 테이블이 1NF를 만족하고, 모든 비기본 속성이 기본 키에 대해 완전 함수 종속(fully functional dependency)을 가져야 합니다. 즉, 부분 종속이 없어야 합니다.
- 조건:
- 기본 키가 복합 키일 때, 비기본 속성은 기본 키의 모든 부분에 대해 종속적이어야 합니다.
예시:
- 1NF로 변환된 테이블:학생ID과목교수명
1 수학 이 교수 1 과학 박 교수 2 영어 김 교수 2 역사 최 교수 2 과학 박 교수 - 2NF로 변환된 테이블:
- 학생 테이블:학생ID이름
1 김철수 2 이영희 - 수업 테이블:과목교수명
수학 이 교수 과학 박 교수 영어 김 교수 역사 최 교수 - 학생_수업 테이블:학생ID과목
1 수학 1 과학 2 영어 2 역사 2 과학
- 학생 테이블:학생ID이름
2.3. 제3 정규형 (3NF)
정의: 테이블이 2NF를 만족하고, 모든 비기본 속성이 기본 키에 대해 이행적 종속(Transitive Dependency)을 가지지 않아야 합니다.
- 조건:
- 비기본 속성이 기본 키에 직접 종속적이어야 하며, 비기본 속성 간에 종속성이 없어야 합니다.
예시:
- 2NF로 변환된 테이블:학생ID과목교수명교수실
1 수학 이 교수 101호 1 과학 박 교수 102호 2 영어 김 교수 103호 2 역사 최 교수 104호 2 과학 박 교수 102호 - 3NF로 변환된 테이블:
- 학생 테이블:학생ID이름
1 김철수 2 이영희 - 수업 테이블:과목교수명
수학 이 교수 과학 박 교수 영어 김 교수 역사 최 교수 - 교수 테이블:교수명교수실
이 교수 101호 박 교수 102호 김 교수 103호 최 교수 104호 - 학생_수업 테이블:학생ID과목
1 수학 1 과학 2 영어 2 역사 2 과학
- 학생 테이블:학생ID이름
2.4. 보이스-코드 정규형 (BCNF)
정의: 테이블이 3NF를 만족하고, 모든 결정자(지정자가 기본 키) 또한 후보 키여야 합니다.
- 조건:
- 모든 결정자는 기본 키여야 하며, 비기본 속성이 기본 키의 일부가 아닌 다른 속성에 종속되지 않아야 합니다.
예시:
- BCNF 변환 예시는 일반적으로 3NF로 충분하지만 복잡한 경우에는 추가적인 분석이 필요합니다.
2.5. 제4 정규형 (4NF)
정의: 테이블이 BCNF를 만족하고, 다치 종속(Multi-Valued Dependency)을 제거해야 합니다.
- 조건:
- 테이블의 속성 집합 간에 다치 종속이 없도록 해야 합니다.
예시:
- 4NF 변환은 데이터 중복을 제거하기 위해 테이블을 추가로 분리합니다. 예를 들어, 한 테이블에서 다치 종속성이 발생하는 경우, 이를 분리하여 다치 종속이 없는 테이블로 변환합니다.
2.6. 제5 정규형 (5NF)
정의: 테이블이 4NF를 만족하고, 조인 종속(Join Dependency)을 제거해야 합니다.
- 조건:
- 모든 조인 종속이 후보 키에 의해 설명될 수 있어야 합니다.
예시:
- 5NF 변환은 조인 종속을 제거하기 위해 복잡한 조인 테이블을 분리합니다.
정규화 과정 요약
- 제1 정규형 (1NF): 반복 그룹을 제거하고 원자값으로 변환합니다.
- 제2 정규형 (2NF): 부분 종속을 제거합니다.
- 제3 정규형 (3NF): 이행적 종속을 제거합니다.
- 보이스-코드 정규형 (BCNF): 결정자가 기본 키가 되도록 합니다.
- 제4 정규형 (4NF): 다치 종속을 제거합니다.
- 제5 정규형 (5NF): 조인 종속을 제거합니다.
정규화는 데이터베이스 설계의 중요한 과정이며, 데이터의 일관성과 무결성을 유지하고, 데이터 중복을 줄이는 데 도움을 줍니다. 정규화의 각 단계는 데이터베이스 구조를 보다 효과적으로 관리할 수 있도록 도와줍니다.