각 단계는 이전 단계보다 더 엄격한 제약을 두며, 데이터의 중복을 줄이고 이상(anomaly)을 방지하기 위함
✅ 정규화 6단계 요약
정규화 단계 이름 핵심 개념 목적
1NF | 제1정규형 (First Normal Form) | **원자값(atomic value)**만 저장 (중복된 열/반복 그룹 제거) | 테이블 구조의 기본적인 정리 |
2NF | 제2정규형 (Second Normal Form) | 부분 함수 종속 제거 (기본키 일부에만 종속된 속성 제거) | 기본키 전체에 종속되도록 |
3NF | 제3정규형 (Third Normal Form) | 이행적 함수 종속 제거 (A→B, B→C인 경우 A→C 제거) | 비주요 속성 간 종속 제거 |
BCNF | BC 정규형 (Boyce–Codd Normal Form) | 모든 결정자가 후보키가 되도록 | 후보키 간 종속 관계 제거 |
4NF | 제4정규형 (Fourth Normal Form) | 다치 종속(Multi-valued dependency) 제거 | 하나의 속성이 여러 값을 가질 때 분리 |
5NF | 제5정규형 (Fifth Normal Form, PJ/NF) | 조인 종속(Join Dependency) 제거 | 무손실 분해 가능하도록 |
🔍 각 정규형 단계별 설명
✅ 1NF (제1정규형: First Normal Form)
- 모든 컬럼은 원자값만 포함해야 함
- 즉, 중첩 구조, 반복 그룹이 없어야 함
예:
비정규형 테이블 (반복 그룹 존재)
학생ID | 이름 | 수강과목
------|------|----------
1001 | 철수 | 수학, 영어
→ 정규화 후 (1NF)
학생ID | 이름 | 수강과목
------|------|----------
1001 | 철수 | 수학
1001 | 철수 | 영어
✅ 2NF (제2정규형: Second Normal Form)
- 1NF 만족 + 부분 함수 종속 제거
- 기본키가 복합키일 때, 일부 키에만 의존하는 속성을 제거
예:
기본키: (학생ID, 과목명)
→ 강의실이라는 컬럼이 과목명에만 의존하면, 분리해야 함
✅ 3NF (제3정규형: Third Normal Form)
- 2NF 만족 + 이행적 함수 종속 제거
- 비주요 속성이 다른 비주요 속성에 종속되면 제거
예:
학생ID → 학과ID → 학과명
→ 학과ID와 학과명은 별도 테이블로 분리
✅ BCNF (보이스–코드 정규형: Boyce-Codd Normal Form)
- 3NF 만족 + 모든 결정자가 후보키
- 후보키가 둘 이상일 때 발생하는 이상한 종속성 제거
예:
(교수, 과목) → 강의실
과목 → 교수 ← 이게 문제!
→ 과목이 교수도 결정하므로 과목이 진짜 결정자
→ (교수, 과목) → 강의실 구조는 BCNF 위반
✅ 4NF (제4정규형: Fourth Normal Form)
- 다치 종속(Multivalued Dependency) 제거
- 하나의 키에 여러 개의 독립적 다중값이 존재할 경우 분리
예:
학생ID → {악기, 외국어}
→ 악기와 외국어가 서로 독립적이면 분리해야 함
✅ 5NF (제5정규형: Fifth Normal Form)
- 조인 종속(Join Dependency) 제거
- 분해된 테이블을 조인했을 때 무손실로 원래 테이블이 복원되어야 함
- 관계 간 조인 의존성이 복잡할 때 사용
예:
모든 조인을 통해서만 완전한 데이터를 알 수 있을 때,
→ 더 세분화해서 분해해야 함
✅ 정리표 (단계별 핵심 요약)
단계 제거하는 것 설명 요약
1NF | 반복 그룹 | 원자값만 |
2NF | 부분 함수 종속 | 복합키에서 일부 키에만 의존 제거 |
3NF | 이행 함수 종속 | A→B→C 관계 제거 |
BCNF | 비후보키 결정자 | 결정자는 모두 후보키여야 함 |
4NF | 다치 종속 | 하나의 키에 독립된 다중값 존재 시 분리 |
5NF | 조인 종속 | 무손실 조인 위한 분해 |
'정보처리기사 > 실기' 카테고리의 다른 글
[정보처리기사 실기] 프로세스 스케줄링 종류 (비선점/선점) (0) | 2025.04.24 |
---|---|
[정보처리기사 실기] 데이터베이스 키(Key) 종 (0) | 2025.04.21 |
[정보처리기사 실기] 애플리케이션 테스트 레벨 4가지 (0) | 2025.04.19 |
[정보처리기사 실기] 결합도(Coupling)와 응집도(Cohesion) (0) | 2025.04.18 |
[정보처리기사 실기] 자바, C, Python 나누기 (1) | 2025.04.17 |