Database

정규화(Normalization)와 반정규화(Denormalization)란?

Somaz 2025. 6. 5. 10:41
728x90
반응형

Overview

오늘은 데이터베이스 정규화(Normalization)와 반정규화(Denormalization)의 개념과 적용 사례에 대해 알아보려고 한다.


데이터베이스 설계에서 정규화는 데이터의 일관성을 유지하고 중복을 최소화하는 과정이며, 반정규화는 성능을 최적화하기 위해 데이터를 일부 중복 저장하는 과정이다.


이 두 개념을 적절히 활용하면 효율적이고 확장 가능한 데이터베이스 설계를 할 수 있다.

 

Mermaid Chart

 

 

 

 

 

 


 

 

 

 

정규화(Normalization)란?

정규화(Normalization)데이터 중복을 줄이고, 무결성을 유지하며, 데이터 일관성을 보장하는 과정이다.
이를 위해 데이터를 정규형(Normal Form, NF) 이라는 특정한 형식으로 변환하여 저장한다.

 

 

 

정규화의 목적

  • 데이터 중복(Minimizing Redundancy) 제거
  • 데이터 무결성(Integrity) 유지
  • 데이터 일관성(Consistency) 보장
  • 이상(Anomalies) 방지: 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 갱신 이상(Update Anomaly)

 

 

정규화의 장점

  • 저장 공간 절약
  • 데이터 수정 및 관리 용이
  • 데이터 무결성 보장

 

 

정규화의 단점

  • JOIN 연산이 많아져 성능 저하 가능
  • 쿼리 복잡성 증가

 

 

 

 


 

 

 

 

 

정규화의 단계 (Normal Forms, NF)

정규화는 1NF → 2NF → 3NF → BCNF → 4NF → 5NF 의 단계로 진행되며, 일반적으로 3NF(제3정규형) 또는 BCNF까지 수행한다.

 

 

 

1️⃣ 제1정규형(1NF, First Normal Form)

 

✔️ 원자성(Atomicity) 충족

  • 테이블의 모든 컬럼이 원자값(Atomic Value)만 포함해야 한다.
  • 하나의 셀에 여러 개의 값을 저장하면 안 된다.

 

 

1NF 적용 전 (비정규화된 데이터)


주문번호 고객명 주문 상품
101 홍길동 TV, 냉장고
102 김철수 세탁기

 

 

1NF 적용 후 (정규화된 데이터)

 

주문번호 고객명 주문 상품
101 홍길동 TV
101 홍길동 냉장고
102 김철수 세탁기

 

 

 


 

 

 

 

 

2️⃣ 제2정규형(2NF, Second Normal Form)

 

✔️ 부분 함수 종속성 제거

  • 1NF를 만족하면서, 기본 키(Primary Key)의 일부분에만 종속된 컬럼이 없어야 한다.
  • 기본 키(Primary Key) 전체에 종속되도록 테이블을 분리한다.

 

 

2NF 적용 전 (부분 함수 종속 존재)

 

주문번호 고객명 고객주소 주문 상품
101 홍길동 서울 TV
101 홍길동 서울 냉장고
102 김철수 부산 세탁기

 

✔️ 문제점:

  • 고객 주소는 주문번호와 직접적인 관계가 없고, 고객명에만 종속적
  • 같은 고객이 여러 번 주문하면 주소가 중복 저장됨

 

 

 

2NF 적용 후 (테이블 분리)


고객 테이블


고객명 고객주소
홍길동 서울
김철수 부산

 

 

주문 테이블

 

주문번호 고객명 주문 상품
101 홍길동 TV
101 홍길동 냉장고
102 김철수 세탁기

 

 

 


 

 

 

 

 

 

3️⃣ 제3정규형(3NF, Third Normal Form)

 

✔️ 이행적 종속성(Transitive Dependency) 제거

  • 2NF를 만족하면서, 기본 키가 아닌 다른 컬럼에 종속된 속성이 없어야 한다.
  • 컬럼 간의 종속성을 최소화하여 독립성을 유지한다.

 

 

3NF 적용 전 (이행적 종속 존재)

 

주문번호 고객명 고객주소 고객 등급
101 홍길동 서울 VIP
102 김철수 부산 일반

 

✔️ 문제점:

  • 고객주소 → 고객등급 관계 존재 (즉, 주문번호 → 고객명 → 고객주소 → 고객등급) → 이행적 종속 발생
  • 고객 정보가 주문 테이블에 포함되어 있어 데이터 중복 발생 가능

 

 

3NF 적용 후 (독립된 고객 테이블 분리)

 


고객 테이블

 

고객명 고객주소 고객등급
홍길동 서울 VIP
김철수 부산 일반

 

 

주문 테이블


주문번호 고객명
101 홍길동
102 김철수

 

 

 


 

 

 

 

 

 

BCNF (Boyce-Codd Normal Form)

✔️ 모든 결정자(Determinant)가 후보 키(Candidate Key) 여야 한다.
✔️ 3NF를 만족하지만 여전히 일부 함수 종속성 이 존재할 수 있다.
✔️ 고유성이 보장되지 않는 속성을 분리하여 데이터 정합성을 유지한다.

 

 

 

BCNF (Boyce-Codd Normal Form) 예제

BCNF는 3NF를 만족하지만 모든 결정자(Determinant)가 후보 키(Candidate Key) 여야 한다.
즉, 후보 키가 아닌 결정자가 존재하면 테이블을 분리해야 한다.

 

 

 

BCNF 적용 전 (3NF까지 적용된 테이블)

 

학과번호 (Dept_ID) 교수명 (Professor) 강의과목 (Course)
CS01 김교수 데이터베이스
CS01 김교수 운영체제
CS02 박교수 자료구조

 

문제점:

  • 학과번호(Dept_ID)와 강의과목(Course) 조합이 후보 키(Candidate Key).
  • 그러나 교수명(Professor) → 학과번호(Dept_ID) 관계가 존재!
  • 즉, 교수명(Professor)이 결정자(Determinant)인데 후보 키가 아님!

 

 

 

BCNF 적용 후 (정규화된 테이블)

 

 

교수 - 학과 테이블

 

교수명 (Professor) 학과번호 (Dept_ID)
김교수 CS01
박교수 CS02

 

 

강의 테이블

 

학과번호 (Dept_ID) 강의과목 (Course)
CS01 데이터베이스
CS01 운영체제
CS02 자료구조

이제 모든 결정자가 후보 키가 됨 → BCNF 만족!
데이터 무결성이 유지되고 중복이 최소화됨!

 

 

 

 

 


 

 

 

 

 

 

 

 

제4정규형 (4NF, Fourth Normal Form)

✔️ 다중 값 종속성(Multivalued Dependency) 제거
✔️ 하나의 테이블에서 여러 개의 독립적인 다중 값 종속성을 가지면 테이블을 분리해야 한다.

 

 

 

제4정규형 (4NF, Fourth Normal Form) 예제

4NF는 다중 값 종속성(Multivalued Dependency) 을 제거하는 것이 목표이다.
즉, 여러 개의 독립적인 다중 값 종속성을 가지면 테이블을 분리해야 한다.

 

 

4NF 적용 전 (다중 값 종속성 존재)

 

학생ID (Student_ID) 수업 (Course) 동아리 (Club)
S001 데이터베이스 축구 동아리
S001 운영체제 축구 동아리
S001 데이터베이스 독서 동아리
S001 운영체제 독서 동아리

 

문제점:

  • 학생ID(Student_ID) → 수업(Course)
  • 학생ID(Student_ID) → 동아리(Club)
  • 즉, 학생ID는 두 개의 독립적인 다중 값 종속성을 가지므로 테이블을 분리해야 함!

 

 

4NF 적용 후 (정규화된 테이블)

 

 

학생 - 수업 테이블

 

학생ID (Student_ID) 수업 (Course)
S001 데이터베이스
S001 운영체제

 

 

학생 - 동아리 테이블

 

학생ID (Student_ID) 동아리 (Club)
S001 축구 동아리
S001 독서 동아리

이제 학생ID(Student_ID) → 수업(Course), 학생ID(Student_ID) → 동아리(Club)로 각각 독립적이 됨 → 4NF 만족!
데이터 중복을 방지하고 무결성 유지!

 

 

 

 

 


 

 

 

 

 

 

제5정규형 (5NF, Fifth Normal Form)

✔️ 조인 종속성(Join Dependency) 제거
✔️ 데이터 무결성을 유지하기 위해 불필요한 조인을 제거한다.
✔️ 모든 관계를 작은 단위로 나눠야 한다.

 

 

 

제5정규형 (5NF, Fifth Normal Form) 예제

5NF는 조인 종속성(Join Dependency) 을 제거하는 것이 목표이다.
즉, 불필요한 조인을 제거하여 데이터 무결성을 유지한다.

 

 

 

5NF 적용 전 (조인 종속성 존재)

 

학생ID (Student_ID) 강사ID (Instructor_ID) 과목 (Course)
S001 I100 데이터베이스
S002 I100 데이터베이스
S001 I200 운영체제
S002 I300 자료구조

 

 

문제점:

  • 강사(Instructor) → 과목(Course)
  • 학생(Student) → 강사(Instructor)
  • 학생(Student) → 과목(Course)

 

즉, 세 개의 관계를 포함하는 테이블이므로, 조인 종속성이 발생
학생(Student) - 강사(Instructor) - 과목(Course) 각각 개별적인 관계로 분리 가능!

 

 

 

 

5NF 적용 후 (정규화된 테이블)

 

 

학생 - 강사 테이블

 

학생ID (Student_ID) 강사ID (Instructor_ID)
S001 I100
S002 I100
S001 I200
S002 I300

 

 

강사 - 과목 테이블

 

강사ID (Instructor_ID) 과목 (Course)
I100 데이터베이스
I200 운영체제
I300 자료구조

각각 개별적인 관계를 유지하면서 불필요한 조인을 제거 → 5NF 만족!
데이터 중복을 방지하고, 확장성 및 무결성 향상!

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

정규화 단계 정리 (1NF ~ 5NF + BCNF)

 

정규화  단계 설명 해결해야 할 문제 적용 방법
1NF (제1정규형) 원자성(Atomicity) 만족 컬럼에 여러 개의 값이 들어가는 경우 (반정규화) 모든 컬럼이 원자값(Atomic Value) 을 가져야 함
2NF (제2정규형) 부분 함수 종속성 제거 기본 키(Primary Key)의 일부에만 종속된 속성이 존재하는 경우 기본 키 전체에 종속되도록 테이블을 분리
3NF (제3정규형) 이행적 종속성 제거 기본 키가 아닌 속성이 다른 속성에 종속되는 경우 독립적인 테이블로 분리
BCNF (보이스-코드 정규형) 모든 결정자가 후보 키 여야 함 후보 키가 아닌 결정자가 존재하는 경우 후보 키가 아닌 결정자를 분리
4NF (제4정규형) 다중 값 종속성 제거 하나의 테이블에 여러 개의 독립적인 다중 값이 존재하는 경우 각각의 다중 값 종속을 개별 테이블로 분리
5NF (제5정규형) 조인 종속성(Join Dependency) 제거 여러 개의 테이블이 불필요한 조인을 필요로 하는 경우 불필요한 조인을 제거하여 각각의 관계를 개별 테이블로 분리

 

 

1NF → 2NF → 3NF → BCNF → 4NF → 5NF 순서로 진행됨!
일반적으로 3NF 또는 BCNF까지 수행하면 충분하지만, 특정한 성능 요구사항이 있으면 4NF, 5NF까지 적용 가능!

 

 

 

 

 

 


 

 

 

 

 

반정규화(Denormalization)란?

반정규화(Denormalization)란 정규화된 데이터를 다시 중복을 허용하는 형태로 변환하여 성능을 향상시키는 기법이다.
즉, 데이터 조회 속도를 높이기 위해 일부 데이터 중복을 허용하는 방법이다.

 

 

 

반정규화를 적용해야 하는 경우

 

  1. JOIN 연산이 많아 성능 저하가 발생하는 경우
    • 여러 개의 테이블을 조인해야만 데이터를 조회할 수 있다면 성능이 저하될 수 있음
  2. 읽기(Read)가 많고, 쓰기(Write)가 적은 경우
    • 데이터 조회가 많고, 변경이 적은 경우 반정규화 적용이 유리함
  3. 실시간 응답 속도가 중요한 경우
    • 응답 속도를 줄이기 위해 데이터 중복을 허용하여 조회 속도를 높일 수 있음

 

 

 

반정규화 예제 (정규화 vs 반정규화 비교)

 

 

 

정규화된 구조 (JOIN 필요)

 


고객 테이블

고객번호 고객명
101 홍길동
102 김철수

 

 

주문 테이블

주문번호 고객번호 주문 상품
1 101 TV
2 102 냉장고

 

 

 

 

반정규화된 구조 (JOIN 없이 조회 가능)


주문번호 고객명 주문 상품
1 홍길동 TV
2 김철수 냉장고

 

 

반정규화의 결과:

  • 데이터 중복 발생하지만 조회 성능 향상

 

 

 

 

 


 

 

 

 

 

 

마무리

정규화(Normalization)와 반정규화(Denormalization)는 데이터베이스 설계의 핵심 개념이다.

  • 정규화는 데이터 중복을 최소화하고 무결성을 유지하는 과정
  • 반정규화는 성능을 위해 데이터를 중복 저장하여 조회 속도를 높이는 과정

 

정규화를 해야 하는 경우

  • 데이터 무결성 보장이 중요할 때
  • 데이터 중복을 최소화해야 할 때

 

반정규화를 해야 하는 경우

  • 데이터 조회 속도가 중요한 경우
  • JOIN 연산이 많아 성능 저하가 발생하는 경우

 

 

프로젝트의 성격과 요구사항에 따라 정규화와 반정규화를 적절히 조합하여 최적의 데이터베이스를 설계해야 한다!

 

 

 

 

 

 

 

 

 


Reference

Database Normalization
Database Denormalization

728x90
반응형