본문 바로가기

개발 공부

정규화(Normalization)

정규화란(Normalization)

데이터의 중복을 최소화하고, 데이터 삽입, 수정, 삭제 시 이상(Anomaly)이 발생하지 않도록 테이블을 구조화하는 과정입니다.

즉, 데이터베이스를 안정적이고 일관성 있게 설계하기 위한 규칙이라고 할 수 있습니다.

정규화의 목적

  • 데이터 중복 최소화
  • 삽입, 삭제, 갱신 이상 방지
  • 데이터 무결성 유지
  • 데이터 관리 효율성 향상
 

정규화 단계

제1정규형 (1NF) - 원자값

  • 테이블의 모든 속성은 더 이상 쪼갤 수 없는 단일 값(Atomic Value) 을 가져야 한다.
  • 하나의 셀에 여러 개의 값이 들어가 있으면 안 된다.

예시

학생ID 이름 전화번호
1 홍길동 010-1234-5678

→ 전화번호를 하나씩 분리해야 함.

 

학생ID 이름 전화번호
1 홍길동 010-1234-5678
1 홍길동 010-9876-5432

제2정규형 (2NF) - 부분 함수 종속 제거

  • 1NF를 만족해야 함.
  • 기본키의 "일부" 속성에만 종속되는 속성을 제거해야 한다.
  • 즉, 기본키 전체에 대해 종속되도록 만든다.

여기서 헷갈리지 말아야 할 것!

  • 기본키가 복합키(2개 이상의 컬럼 조합)일 때만 부분 종속이 문제된다.
  • 기본키 일부로만 결정되는 속성은 다른 테이블로 분리해야 한다.

예시

학생ID 과목코드 과목명
1 MATH01 수학
1 ENG01 영어

→ 과목명은 과목코드만으로 결정 가능하므로 과목 테이블로 분리해야 함.

 

과목 테이블

과목코드 과목명
MATH01 수학
ENG01 영어

 

수강 테이블

학생ID 과목코드
1 MATH01
1 ENG01

제3정규형 (3NF) - 이행 함수 종속 제거

  • 2NF를 만족해야 함.
  • 기본키가 아닌 다른 속성을 통해 또 다른 속성이 결정되면 안 된다.

여기서 헷갈리지 말아야 할 것!

  • 기본키 외 다른 컬럼 간에도 종속성이 있으면 분리해야 한다.
  • 즉, 기본키 → A → B 형태가 있으면 B를 따로 빼야 한다.

예시

학생ID 학과ID 학과명
1 CSE 컴퓨터공학과

→ 학과명은 학과ID를 통해 결정되므로, 학과 정보를 따로 테이블로 분리해야 함.

 

학생 테이블

학생ID 학과ID
1 CSE

 

학과 테이블

학과ID 학과명
CSE 컴퓨터공학과

 

  • 2NF: 기본키의 일부에만 종속되면 안 된다 → 복합키 문제
  • 3NF: 기본키 외 다른 컬럼을 통해 또 다른 컬럼이 결정되면 안 된다 → 이행 종속 문제
  • 2NF는 기본키에 집중! (부분 종속 제거)
  • 3NF는 기본키 말고 다른 컬럼들까지 의심! (이행 종속 제거)

 

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

  • 3NF를 만족하면서, 모든 결정자가 후보키(Candidate Key)여야 한다.

예시 교수ID와 강의실 번호로 강의시간이 결정되는데, 강의실 번호만으로도 강의시간이 결정된다면? → 분리 필요.

 


제4정규형 (4NF) - 다치 종속 제거

  • 한 테이블에 하나의 주제만 있도록 다치 종속(Multivalued Dependency)을 제거한다.

예시

학생ID 수업 동아리
1 수학 농구부
1 영어 농구부
1 수학 합창단
1 영어 합창단

→ 수업과 동아리를 별도의 테이블로 분리해야 함.

 


 제5정규형 (5NF) - 조인 종속 제거

  • 테이블을 조인했을 때 원래 데이터를 잃지 않고 복원할 수 있어야 한다.

예시 제품, 부품, 공급업체 관계에서 복합적인 조인관계가 있을 때, 무손실 분해가 필요함.

 

정규화가 필요한 이유: 이상(Anomaly) 방지

정규화를 하지 않으면 다음과 같은 문제가 생깁니다.

종류 설명
삽입 이상(Insertion Anomaly) 데이터 추가 시 불필요한 값까지 입력해야 하는 문제
삭제 이상(Deletion Anomaly) 하나의 데이터 삭제로 인해 원치 않는 데이터까지 사라지는 문제
갱신 이상(Update Anomaly) 하나를 수정할 때 여러 곳을 수정해야 하는 문제
  • 이러한 문제들을 예방하는 것이 정규화의 핵심입니다.
 

요약표

정규형 조건 목적
1NF 원자값만 가짐 한 셀에 하나의 값만
2NF 부분 함수 종속 제거 기본키 전체에 종속
3NF 이행 함수 종속 제거 기본키 이외 종속 제거
BCNF 모든 결정자가 후보키 더 엄격한 3NF
4NF 다치 종속 제거 하나의 주제만 관리
5NF 조인 종속 제거 무손실 복원 가능
 

'개발 공부' 카테고리의 다른 글

객체지향 프로그래밍(OOP)  (0) 2025.05.03
콜백 지옥 (Callback Hell)  (0) 2025.04.29
웹소켓(WebSocket)  (1) 2025.04.04
REST API  (0) 2025.03.27
Zod 검증  (0) 2025.03.12