DB
데이터베이스 정규화 1~5정규형 예시 중심 정리
최규선

1. 개요
- 정규화 = 이상 현상(삽입·갱신·삭제)을 없애려고 릴레이션을 무손실 분해하는 과정임
- 1NF~BCNF는 함수 종속(FD), 4NF는 다치 종속(MVD), 5NF는 조인 종속(JD) 기준임
- 거가대교 ITS 전산 실무에서 쓰는 장비 점검 데이터 하나로 끝까지 설명함
2. 이상 현상 3가지
- 삽입 이상: 점검 이력이 없으면 신규 장비 등록 불가함
- 갱신 이상: 장비명 하나 바꾸려면 여러 행 수정, 누락 시 불일치 발생함
- 삭제 이상: 마지막 점검 행 삭제 시 장비·구간 정보까지 사라짐
3. 1정규형(1NF): 반복 그룹 제거

- 조건: 모든 속성 값이 원자값이어야 함
- 비정규형은 점검내역 한 칸에 여러 건이 들어가 검색·집계가 안 됨
- 행을 펼쳐 PK = (장비ID, 작업자ID, 점검일)로 잡음
- 남은 문제: 장비명·구간명 중복이 그대로 남음
4. 2정규형(2NF): 부분 함수 종속 제거

- 조건: 1NF + 일반 속성이 기본키 전체에 완전 함수 종속이어야 함
- 장비ID → 장비명, 작업자ID → 작업자명은 키 일부에만 종속됨(부분 종속)
- 장비 / 작업자 / 점검 세 테이블로 분해함
- Tip: 단일 컬럼 PK면 1NF만 만족해도 자동으로 2NF임
5. 3정규형(3NF): 이행 함수 종속 제거

- 조건: 2NF + 기본키가 아닌 속성 간 종속(A→B→C)이 없어야 함
- 장비ID → 구간코드 → 구간명 이행 종속 존재함
- 구간 테이블을 분리하고 장비.구간코드를 FK로 연결함
- 실무 대부분의 OLTP 설계는 3NF(또는 BCNF)까지 가면 충분했음
6. BCNF: 후보키가 아닌 결정자 제거

- 조건: 모든 결정자가 후보키여야 함 (강한 3NF)
- 규칙: 업체 하나는 장비유형 하나만 담당 → 담당업체 → 장비유형
- 담당업체는 후보키가 아닌데 결정자임 → BCNF 위반임
- 업체전문 / 구간담당으로 분해함
- 주의: (구간, 장비유형) → 업체 FD가 보존되지 않음 → 응용·트리거로 보완 필요함
7. 4정규형(4NF): 다치 종속 제거

- 조건: BCNF + 자명하지 않은 다치 종속(MVD)이 없어야 함
- 장비모델 →→ 지원프로토콜, 장비모델 →→ 연동센서가 서로 독립임
- 한 테이블에 두면 M×N 조합 행이 생기고, 하나 추가할 때마다 행이 폭증함
- 모델프로토콜 / 모델센서로 나누면 M+N 행으로 줄어듦
8. 5정규형(5NF): 조인 종속 제거

- 조건: 모든 조인 종속이 후보키에 의해서만 성립해야 함 (PJNF)
- 업체-부품-현장 사이에 순환 업무 규칙이 있으면 3개로 쪼개야 무손실임
- 2개로만 쪼개면 다시 조인할 때 가짜 행(Spurious Tuple)이 생김
- 업체부품 ⋈ 업체현장 ⋈ 현장부품 = 원래 4행과 정확히 일치함
9. 반정규화(De-normalization) 트레이드오프
- 정규화가 깊어질수록 조인이 늘어 조회 성능이 떨어짐
- ITS 대시보드·통계처럼 읽기 위주 화면은 집계 테이블·중복 컬럼으로 반정규화했음
- 대신 무결성 비용(트리거, 배치 동기화)을 감수해야 함
- 원칙: 먼저 정규화 → 성능 측정 → 근거 있을 때만 반정규화
10. 한눈에 정리
| 단계 | 제거 대상 | 예시 분해 |
| 1NF | 반복 그룹·다중값 | 점검내역 행 펼치기 |
| 2NF | 부분 함수 종속 | 장비 / 작업자 / 점검 |
| 3NF | 이행 함수 종속 | 장비 / 구간 |
| BCNF | 후보키 아닌 결정자 | 업체전문 / 구간담당 |
| 4NF | 다치 종속 | 모델프로토콜 / 모델센서 |
| 5NF | 조인 종속 | 업체부품 / 업체현장 / 현장부품 |
11. 기술사 답안 포인트
- 암기법: "도부이결다조" (도메인 원자값-부분-이행-결정자-다치-조인)
- 정의 → 이상 현상 → 종속 표기(X→Y, X→→Y, JD) → 분해 전/후 표 순서로 쓰면 채점자가 따라오기 쉬움
- BCNF는 종속성 보존 불가 가능성, 5NF는 무손실 조인 키워드 꼭 넣을 것
- 마무리는 반정규화 기준(성능·무결성 트레이드오프)과 실무 사례로 차별화함