본문 바로가기
정보처리기사/실기

[정보처리기사 실기] 정규화 단계

by 보안매크로 2025. 4. 20.

각 단계는 이전 단계보다 더 엄격한 제약을 두며, 데이터의 중복을 줄이고 이상(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 조인 종속 무손실 조인 위한 분해