카테고리 없음

정규화란 무엇인가요?

com.oryneogury 2025. 12. 22. 13:57

데이터베이스 정규화 완벽 가이드

정규화란 무엇인가

정규화(Normalization)는 데이터베이스 설계 시 데이터의 중복을 최소화하고 데이터의 무결성을 보장하기 위해 테이블을 구조화하는 과정이다.

 

왜 정규화가 필요한가

정규화를 하지 않으면 발생하는 문제들:

  1. 데이터 중복 - 같은 정보가 여러 곳에 저장되어 공간 낭비
  2. 데이터 불일치 - 한 곳에서 수정했는데 다른 곳은 수정 안 됨
  3. 삽입 이상 - 새로운 데이터를 추가할 때 불필요한 정보도 함께 입력해야 함
  4. 삭제 이상 - 데이터를 삭제할 때 의도치 않은 정보까지 삭제됨
  5. 수정 이상 - 같은 데이터를 여러 곳에서 수정해야 함

정규화 단계별 설명

정규화는 크게 1NF, 2NF, 3NF로 나뉜다. 각 단계를 차근차근 정리한다.


함수 종속 (정규화의 핵심 개념)

정규화는 함수 종속을 분석하는 과정이다.

함수 종속(FD)

AB
  • A가 결정되면 B는 반드시 하나로 결정됨
  • A = 결정자, B = 종속자

예시

학번 → 이름

- 학번이 같으면 이름은 항상 같음

 

 

제1 정규형 (1NF - First Normal Form)

 

정의

하나의 컬럼에는 하나의 값만 저장되어야 합니다.

 

예시

정규화 전 (1NF 위반)

학생ID 이름 수강과목
1 김철수 수학, 영어, 과학
2 이영희 수학, 국어

문제점: 수강과목 컬럼에 여러 값이 들어가 있어서 데이터를 검색하거나 수정하기 어렵다.

 

정규화 후 (1NF 만족)

학생ID 이름 수강과목
1 김철수 수학
1 김철수 영어
1 김철수 과학
2 이영희 수학
2 이영희 국어

각 행이 하나의 의미를 가진다.


제2 정규형 (2NF - Second Normal Form)

 

정의

1NF를 만족하면서, 부분 함수 종속을 제거해야 합니다.

부분 함수 종속: 기본키의 일부만으로도 다른 속성을 결정할 수 있는 경우

 

예시

정규화 전 (2NF 위반)

주문번호 상품ID 상품명 가격 수량 주문일자
1001 P001 노트북 1,000,000 2 2024-01-01
1001 P002 마우스 30,000 5 2024-01-01
1002 P001 노트북 1,000,000 1 2024-01-02

 

문제점

  • 기본키는 (주문번호, 상품 ID)다
  • 하지만 상품명과 가격은 상품 ID만으로도 결정된다 (부분 함수 종속)
  • 상품 가격이 변경되면 여러 행을 수정해야 한다

 

정규화 후 (2NF 만족)

 

주문 테이블

주문번호 상품ID 수량 주문일자
1001 P001 2 2024-01-01
1001 P002 5 2024-01-01
1002 P001 1 2024-01-02

 

상품 테이블

상품ID 상품명 가격
P001 노트북 1,000,000
P002 마우스 30,000

 

상품 정보는 한 곳에서만 관리할 수 있다.


제3 정규형 (3NF - Third Normal Form)

 

정의

2NF를 만족하면서, 이행적 함수 종속을 제거해야 합니다.

이행적 함수 종속: A → B, B → C이면 A → C인 관계 (B를 거쳐서 종속되는 경우)

 

예시

정규화 전 (3NF 위반)

학생ID 이름 학과코드 학과명 학과위치
1 김철수 D001 컴퓨터공학과 1호관
2 이영희 D001 컴퓨터공학과 1호관
3 박민수 D002 경영학과 2호관

 

문제점

  • 학생 ID → 학과코드 → 학과명, 학과위치 (이행적 함수 종속)
  • 학과 정보가 변경되면 여러 학생 행을 수정해야 한다

 

정규화 후 (3NF 만족)

 

학생 테이블

학생ID 이름 학과코드
1 김철수 D001
2 이영희 D001
3 박민수 D002

 

학과 테이블

학과코드 학과명 학과위치
D001 컴퓨터공학과 1호관
D002 경영학과 2호관

 

학과 정보는 학과 테이블에서만 관리한다.


정규화의 핵심 원칙

  1. 하나의 테이블은 하나의 주제만 다룬다
  2. 중복 데이터를 제거한다
  3. 관계를 명확히 정의한다 (외래키 사용)

정규화의 단점

과도한 정규화는 JOIN 연산이 많아져서 성능이 저하될 수 있다.

  • 역정규화(Denormalization): 성능 향상을 위해 의도적으로 정규화를 완화하는 경우도 있다
  • 하지만 먼저 정규화를 하고, 성능 문제가 발생하면 그때 역정규화를 고려하는 것이 좋다

정리

정규화는 데이터베이스 설계의 기본 개념이다. 1NF, 2NF, 3NF 단계를 통해 데이터 중복을 제거하고 무결성을 보장할 수 있다.

제1 정규형(1NF)

하나의 칼럼에는 하나의 값만 저장해야 하며,
여러 값이 한 컬럼에 저장되는 중복·반복 속성 문제를 해결한다.

제2 정규형(2NF)

기본키의 **일부에만 종속되는 속성(부분 함수 종속)**을 제거한다.
즉, 복합 기본키 중 일부로 결정되는 속성들을 분리하는 것이 목적이다.
→ 1 정규형을 만족하면서, 기본키 전체에 종속되도록 만든다.

제3 정규형(3NF)

이행적 함수 종속을 제거한다.
기본키가 아닌 속성에 간접적으로 종속된 속성들을 분리하여
모든 일반 속성이 오직 기본키에만 직접 종속되도록 한다.