icon

안동민 개발노트

8장 : 정규화

제1정규형 ~ 제3정규형

정규화는 단계별로 진행됩니다. 각 단계에서 어떤 문제를 해결하는지, 실제 테이블이 어떻게 분해되는지를 예제로 확인합니다. 정규화의 각 단계는 특정 유형의 함수 종속을 제거하여 갱신 이상(Anomaly)을 방지합니다.


함수 종속(Functional Dependency) 복습

정규화를 이해하려면 먼저 함수 종속 개념이 명확해야 합니다.


제1정규형 (1NF)

1NF의 조건: 모든 속성의 값이 원자값(Atomic Value)이어야 합니다. 하나의 셀에 여러 값이 들어가면 안 됩니다. 또한 반복 그룹(Repeating Group)이 없어야 합니다.

1NF를 적용하면 행이 늘어나지만, 각 셀에 하나의 값만 존재합니다. 이것이 관계형 모델의 가장 기본적인 제약입니다.


1NF와 실무

실무에서 1NF 위반은 의외로 흔합니다. JSON 컬럼, 콤마 구분 문자열 등이 대표적입니다.


제2정규형 (2NF)

2NF의 조건: 1NF를 만족하면서, 부분 함수 종속이 없어야 합니다.

부분 함수 종속이란 복합 기본키의 일부에만 종속되는 속성이 있는 것입니다. 기본키가 단일 컬럼이면 부분 함수 종속이 발생할 수 없으므로 자동으로 2NF를 만족합니다.

부분 함수 종속이 일으키는 이상 현상
삽입 이상 (Insert Anomaly)
  * 아직 수강 과목이 없는 신입생 '박민수'를 등록할 수 없음
  * 기본키의 일부인 '과목명'이 NULL이면 PK 위반

갱신 이상 (Update Anomaly)
  * 김철수의 학과를 '소프트웨어'로 변경하려면
  * 1001/DB 행과 1001/알고리즘 행 두 곳을 모두 수정
  * 하나만 수정하면 데이터 불일치!

삭제 이상 (Delete Anomaly)
  * 이영희가 DB를 수강 취소하면 해당 행 삭제
  * 이영희의 이름, 학과 정보도 함께 소실!

부분 함수 종속인 {이름, 학과}를 학번만으로 구성된 별도 테이블로 분리했습니다. 이제 김철수의 학과를 변경해도 한 곳만 수정하면 됩니다.


2NF 분해 판단 방법


제3정규형 (3NF)

3NF의 조건: 2NF를 만족하면서, 이행 함수 종속이 없어야 합니다.

이행 함수 종속이란 A → B, B → C일 때 A → C가 되는 것입니다. 키가 아닌 속성이 다른 키가 아닌 속성을 결정하는 관계입니다.

컴공의 학과장이 바뀌면 1001, 1003 두 행을 모두 수정해야 합니다 — 갱신 이상입니다.

3NF 위반이 일으키는 이상 현상
갱신 이상
  * 컴공의 학과장이 '정교수' → '최교수'로 변경
  * 학생 1001과 1003 두 곳 수정 필요
  * 하나만 수정하면 학과장 정보 불일치!

삽입 이상
  * '기계공학과 - 박교수' 정보를 넣으려면
  * 해당 학과 학생이 없으면 저장할 방법 없음

삭제 이상
  * 학번 1002 이영희 삭제 시
  * '전자 - 한교수' 정보도 함께 소실

이행 함수 종속의 중간 속성(학과)을 기본키로 하는 새 테이블을 만들어 분리합니다.


3NF 분해 판단 방법


실무 적용 사례: 주문 시스템

실제 주문 시스템을 1NF → 2NF → 3NF 순서로 정규화하는 과정을 봅니다.


무손실 분해와 종속성 보존

정규화로 테이블을 분해할 때 두 가지 조건을 만족해야 합니다.


정규화 단계 정리

정규화 흐름 정리
비정규형

  │  ① 원자값 보장, 반복 그룹 제거

 1NF ── 모든 셀에 원자값만 존재

  │  ② 부분 함수 종속 제거

 2NF ── 복합키 일부에만 종속되는 속성 분리

  │  ③ 이행 함수 종속 제거

 3NF ── A→B→C 형태의 종속 분리

  │  ④ 모든 결정자가 후보키

 BCNF ── 후보키가 아닌 결정자 분리

  │  ⑤ 다치 종속 제거

 4NF

  │  ⑥ 조인 종속 제거

 5NF
정규형제거 대상핵심 질문
1NF다중 값, 반복 그룹한 셀에 값이 하나인가?
2NF부분 함수 종속복합키 일부에만 종속되는 속성이 있는가?
3NF이행 함수 종속키가 아닌 속성이 다른 키가 아닌 속성을 결정하는가?

정규형 판별 연습

주어진 테이블이 몇 정규형을 만족하는지 판별하는 연습입니다.

연습 3: 빠른 판별 요령
Step 1: 기본키 확인
  * 단일 컬럼? → 2NF 자동 만족 → 3NF만 확인

Step 2: 복합키이면
  * 키의 일부 → 비키 속성? → 2NF 위반

Step 3: 비키 → 비키 종속 확인
  * 비키 속성이 다른 비키 속성 결정? → 3NF 위반

정규화와 실무 적용

다음 절에서는 3NF를 넘어 BCNF와 그 이상의 정규형을 살펴봅니다.