정규화·반정규화 완벽 정리

1NF·2NF·3NF·BCNF 단계별 핵심과 반정규화까지 한눈에 정리

1. 정규화의 목적

정규화란?

릴레이션(테이블)을 분해하여 데이터 중복을 제거하고 이상현상을 방지하는 과정. 함수적 종속성을 기반으로 테이블을 더 작은 단위로 분리하여 데이터 무결성을 확보한다.

정규화의 핵심 목적

  • 데이터 중복 최소화 — 동일 데이터가 여러 곳에 저장되는 것을 방지
  • 이상현상(Anomaly) 방지 — 삽입·갱신·삭제 시 발생하는 문제 제거
  • 데이터 무결성 보장 — 일관성 있는 데이터 유지

2. 이상현상 (Anomaly)

이상현상의 3가지 유형

유형설명예시
삽입 이상불필요한 데이터를 함께 삽입해야 함학과 정보만 넣고 싶은데 학생 정보도 필요
갱신 이상일부만 수정되어 데이터 불일치 발생학과명 변경 시 일부 행만 수정되면 불일치
삭제 이상필요한 데이터도 함께 삭제됨학생 삭제 시 학과 정보까지 사라짐

이상현상 예시 테이블

아래처럼 정규화되지 않은 테이블에서 이상현상이 발생한다.

학번이름학과코드학과명
101김철수D01컴퓨터공학
102이영희D01컴퓨터공학
103박민수D02경영학

"학과명"이 중복 저장되어 갱신 이상 발생 가능. D01 학과 학생을 모두 삭제하면 학과 정보도 사라짐(삭제 이상).

3. 함수적 종속성 (Functional Dependency)

함수적 종속성이란?

X 값이 Y 값을 유일하게 결정하면 Y는 X에 함수적으로 종속된다고 하며 X → Y로 표기한다. X를 결정자, Y를 종속자라 한다.

함수적 종속성의 종류

종류설명예시
완전 함수 종속기본키 전체에 종속(학번, 과목) → 성적
부분 함수 종속기본키 일부에만 종속(학번, 과목) → 이름 (학번만으로 결정)
이행 함수 종속A→B, B→C이면 A→C학번→학과코드→학과명

4. 정규화 단계

제1정규형 (1NF)

모든 속성이 원자값(Atomic Value)을 가져야 한다. 반복 그룹이나 다중값 속성을 제거한다.

Before (1NF 위반)

학번이름수강과목
101김철수DB, 알고리즘, OS
102이영희DB, 네트워크

After (1NF 적용)

학번이름수강과목
101김철수DB
101김철수알고리즘
101김철수OS
102이영희DB
102이영희네트워크

제2정규형 (2NF)

1NF를 만족하고 부분 함수 종속을 제거한 상태. 기본키가 복합키일 때만 의미가 있다.

복합키 (학번, 과목) 중 "학번"만으로 결정되는 "이름" 속성은 부분 함수 종속이므로 별도 테이블로 분리한다.

분리 전:

수강(학번, 과목, 이름, 성적) → 학번→이름 (부분종속)

분리 후:

학생(학번, 이름)

수강(학번, 과목, 성적)

제3정규형 (3NF)

2NF를 만족하고 이행 함수 종속을 제거한 상태. A→B→C에서 A→C 종속을 제거한다.

분리 전:

학생(학번, 이름, 학과코드, 학과명) → 학번→학과코드→학과명 (이행종속)

분리 후:

학생(학번, 이름, 학과코드)

학과(학과코드, 학과명)

보이스-코드 정규형 (BCNF)

3NF를 만족하고 모든 결정자가 후보키인 상태. 후보키가 아닌 속성이 결정자가 되는 경우를 제거한다.

예시:

수강(학번, 과목, 교수) — 교수→과목 (교수가 결정자이지만 후보키가 아님)

분리 후:

수강(학번, 교수)

담당(교수, 과목)

5. 정규화 단계별 핵심 비교

단계별 비교 테이블

단계제거 대상조건핵심 키워드
1NF다중값, 반복 그룹모든 속성이 원자값원자값
2NF부분 함수 종속1NF + 완전 함수 종속복합키, 부분종속
3NF이행 함수 종속2NF + 이행종속 없음A→B→C
BCNF비후보키 결정자3NF + 모든 결정자가 후보키결정자 = 후보키

정규화 순서 암기

"원부이결" — 원자값(1NF) → 부분종속 제거(2NF) → 이행종속 제거(3NF) → 결정자가 후보키(BCNF)

6. 반정규화 (Denormalization)

반정규화란?

정규화된 테이블을 조회 성능 향상을 위해 의도적으로 중복·통합·분리하는 기법. 조인 횟수를 줄여 조회 속도를 높이지만 데이터 무결성이 저하될 수 있다.

반정규화 절차

반드시 정규화를 먼저 수행한 후, 성능 저하가 발생할 때 필요한 부분에만 반정규화를 적용한다.

  • 1. 정규화를 정확히 수행
  • 2. 성능 문제 발생 여부 확인
  • 3. 반정규화 대상 선정
  • 4. 반정규화 적용 후 무결성 보완 방안 마련

반정규화 유형

대상기법설명
테이블테이블 병합1:1 또는 1:N 관계를 하나로 통합
테이블 분할수직 분할(컬럼 기준) 또는 수평 분할(행 기준)
테이블 추가통계, 이력, 부분 테이블 추가
컬럼중복 컬럼 추가조인 줄이기 위해 다른 테이블 컬럼 복사
파생 컬럼 추가계산 결과를 미리 저장 (합계, 평균 등)
관계중복 관계 추가빠른 경로로 직접 참조 관계 추가

수직 분할 vs 수평 분할

구분수직 분할수평 분할
기준컬럼 기준으로 분할행 기준으로 분할
사용 시점자주 사용하는 컬럼과 아닌 컬럼 분리특정 범위 데이터만 자주 조회할 때
예시BLOB/TEXT 컬럼 분리연도별, 지역별 분할

7. 시험 빈출 포인트

자주 출제되는 유형

  • 정규화 단계 순서 — 1NF → 2NF → 3NF → BCNF 순서와 각 단계에서 제거하는 종속성
  • 2NF는 복합키일 때만 의미 — 단일키 테이블은 이미 2NF
  • 이상현상 유형 구분 — 삽입/갱신/삭제 이상 각각의 정의와 예시
  • 반정규화 목적 — 조회 성능 향상 (데이터 무결성 향상이 아님!)
  • 반정규화는 정규화 이후 — 정규화를 먼저 수행하고, 필요 시 반정규화
  • BCNF와 3NF 차이 — 3NF는 후보키가 아닌 속성 간 이행종속 제거, BCNF는 모든 결정자가 후보키

개념을 확인했다면 문제로 실력을 검증해보세요