데이터베이스

[DB] 정규화(Normalization)란?

연화 2025. 4. 12. 11:25

데이터베이스를 공부하다 보면 “테이블을 정규화하세요”라는 말을 자주 듣게 됩니다.
그런데 왜 굳이 테이블을 잘게 나누는 걸까요? 그냥 하나에 다 넣으면 안 될까요?

오늘은 그 궁금증을 풀어보며, 데이터베이스의 정규화(Normalization)가 무엇인지,
왜 필요한지, 그리고 정규형의 종류와 각각 어떤 조건을 가지는지 살펴볼게요.

 


 

💡 정규화란?

정규화(Normalization)데이터의 중복을 최소화하고, 일관성과 무결성을 유지하기 위해 테이블 구조를 체계적으로 분해하는 과정입니다.

데이터베이스를 처음 설계할 때, 하나의 테이블에 많은 정보를 넣으면 편해 보일 수 있지만,
이렇게 구성된 테이블은 중복 데이터가 많아지고, 데이터 수정/삭제 시 여러 문제(이상, anomaly)가 발생할 수 있습니다.

 

❌ 정규화가 안 된 테이블의 문제

아래는 정규화가 되지 않은 예시입니다

주문 ID 고객명 고객주소 상품명 상품가격
1 김영희 서울시 키보드 30,000
2 김영희 서울시 마우스 15,000
  • 고객 정보가 중복 저장되고 있음
  • 고객 주소가 바뀌면 모든 행을 수정해야 함
  • 주문/상품/고객 간의 역할이 섞여 있음

이런 문제들이 데이터 이상(anomaly)입니다.

 


 

제1정규형 (1NF): 컬럼은 원자값만 가진다

  • 각 셀에는 더 이상 쪼갤 수 없는 값만 있어야 함
  • 반복되는 그룹 금지 (ex: "상품1, 상품2" 같이 한 셀에 여러 값 X)
고객명 전화번호 ❌
홍길동 010-1234-5678, 1111

→ 아래처럼 분리해야 함

고객명 전화번호 ✅
홍길동 010-1234-5678
홍길동 1111

 


 

제2정규형 (2NF): 부분 종속 제거

  • 기본 키의 일부에만 종속된 컬럼 제거
  • 즉, 기본 키가 복합 키일 때만 해당
  • 컬럼은 전체 기본 키에 종속되어야 함
주문ID 상품ID 고객명 ❌
1 A 홍길동

→ 고객명은 주문ID에만 종속되므로 분리 필요

 


 

제3정규형 (3NF): 이행적 종속 제거

  • 기본 키가 아닌 컬럼 간의 종속 제거
  • 즉, 기본 키 → A → B 구조일 때, B는 다른 테이블로 분리
고객ID 고객명 고객등급 ❌
1 홍길동 Gold

→ 고객등급은 고객명에 의해 결정되므로 분리

 


 

🔵 BCNF (보이스-코드 정규형, Boyce-Codd Normal Form)

  • 3NF보다 조금 더 엄격한 형태
  • 모든 결정자가 후보 키여야 한다

✔ 언제 필요하냐면?
복합키가 있을 때, 일부 속성이 후보 키가 아닌 속성에 영향을 미치는 경우

→ 결정자가 후보 키가 아닐 때 발생하는 이상 제거
→ 실무에서 3NF와 함께 다뤄지는 경우 많음
 

 


 

🟣 4NF (Fourth Normal Form)

  • 다치 종속(Multi-valued Dependency) 제거
  • 한 테이블에 서로 독립적인 반복 그룹이 두 개 이상 존재할 경우 분리해야 함

✔ 예:
한 고객이 여러 주소와 여러 연락처를 동시에 가질 경우
→ 주소와 연락처는 서로 독립적이기 때문에 분리 필요

 


 

🟤 5NF (Fifth Normal Form) 또는 PJ/NF

  • 조인 종속(Join Dependency) 문제 해결
  • 분해된 테이블들을 조인했을 때, 원래의 테이블이 정확히 복원되어야 함

✔ 아주 복잡한 관계에서만 등장, 실무에서는 거의 쓰이지 않음

 


 

6NF (Sixth Normal Form)

  • 시간에 따른 데이터 변경까지 정규화
  • 데이터 웨어하우스, 시계열 데이터 처리 등에서 등장

✔ 거의 쓰이지 않지만, 시계열 DB 등에서는 활용

 


 

🛠 왜 정규화가 중요할까?

  • 데이터 중복 줄이기
  • 저장 공간 절약
  • 변경 시 일관성 유지
  • 삽입/삭제/갱신 이상(anomaly) 방지

정규화는 마치 데이터의 ‘정리정돈’ 습관과 같아요.
처음엔 번거로워 보여도, 잘 정리된 구조가 나중엔 유지보수와 성능을 결정짓게 됩니다.

 


 

✅ 정규형 전체 요약표

정규형 핵심 조건 언제 필요한가
1NF 컬럼이 원자값만 가짐 기본 중복 제거
2NF 부분 종속 제거 복합 기본 키일 때
3NF 이행적 종속 제거 대부분의 일반적 설계 상황에서
BCNF 모든 결정자가 후보 키 후보 키 아닌 결정자 존재 시
4NF 다치 종속 제거 독립적 반복 데이터가 있는 경우
5NF 조인 종속 제거 아주 복잡한 분해/재조합 상황
6NF 시간 종속성까지 고려한 정규화 시계열, 로그성 데이터 등 특수처리

 

정규화는 단순히 “테이블을 나눈다”는 것이 아니라,
데이터 간의 관계와 의존성을 명확히 정리하는 과정입니다.

3NF까지는 거의 모든 테이블 설계에 유용하고, 그 이후는 특정 복잡한 케이스에서의 최적화라고 보면 됩니다.
완벽한 정답이 있는 건 아니지만, 데이터를 잘 이해하고 적절히 구조화하는 연습을 통해
더 효율적이고 튼튼한 데이터베이스를 만들 수 있어요.

 

 

👀 데이터베이스에 대한 다른 포스팅도 궁금하시다면 아래의 글을 추천해요

 

[SQL] SQL 조인의 종류

SQL(Structured Query Language)에서 조인(JOIN)은 여러 테이블에서 데이터를 결합하고 관련 정보를 가져오는 데 사용됩니다. 데이터베이스 설계 시 데이터를 여러 테이블로 나누어 관리하는 것이 일반적

dev-yeonwha.tistory.com