제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 두 행을 모두 수정해야 합니다 — 갱신 이상입니다.
갱신 이상
* 컴공의 학과장이 '정교수' → '최교수'로 변경
* 학생 1001과 1003 두 곳 수정 필요
* 하나만 수정하면 학과장 정보 불일치!
삽입 이상
* '기계공학과 - 박교수' 정보를 넣으려면
* 해당 학과 학생이 없으면 저장할 방법 없음
삭제 이상
* 학번 1002 이영희 삭제 시
* '전자 - 한교수' 정보도 함께 소실이행 함수 종속의 중간 속성(학과)을 기본키로 하는 새 테이블을 만들어 분리합니다.
3NF 분해 판단 방법
실무 적용 사례: 주문 시스템
실제 주문 시스템을 1NF → 2NF → 3NF 순서로 정규화하는 과정을 봅니다.
무손실 분해와 종속성 보존
정규화로 테이블을 분해할 때 두 가지 조건을 만족해야 합니다.
정규화 단계 정리
비정규형
│
│ ① 원자값 보장, 반복 그룹 제거
▼
1NF ── 모든 셀에 원자값만 존재
│
│ ② 부분 함수 종속 제거
▼
2NF ── 복합키 일부에만 종속되는 속성 분리
│
│ ③ 이행 함수 종속 제거
▼
3NF ── A→B→C 형태의 종속 분리
│
│ ④ 모든 결정자가 후보키
▼
BCNF ── 후보키가 아닌 결정자 분리
│
│ ⑤ 다치 종속 제거
▼
4NF
│
│ ⑥ 조인 종속 제거
▼
5NF| 정규형 | 제거 대상 | 핵심 질문 |
|---|---|---|
| 1NF | 다중 값, 반복 그룹 | 한 셀에 값이 하나인가? |
| 2NF | 부분 함수 종속 | 복합키 일부에만 종속되는 속성이 있는가? |
| 3NF | 이행 함수 종속 | 키가 아닌 속성이 다른 키가 아닌 속성을 결정하는가? |
정규형 판별 연습
주어진 테이블이 몇 정규형을 만족하는지 판별하는 연습입니다.
Step 1: 기본키 확인
* 단일 컬럼? → 2NF 자동 만족 → 3NF만 확인
Step 2: 복합키이면
* 키의 일부 → 비키 속성? → 2NF 위반
Step 3: 비키 → 비키 종속 확인
* 비키 속성이 다른 비키 속성 결정? → 3NF 위반정규화와 실무 적용
다음 절에서는 3NF를 넘어 BCNF와 그 이상의 정규형을 살펴봅니다.