본문 바로가기

SQL & 데이터베이스/데이터 무결성 & 트랜잭션

[SQL] 데이터 정규화(Normalization)란? - 개념과 장단점, 과정별 설명

[SQL] 데이터 정규화(Normalization)란? - 개념과 장단점, 과정별 설명

1. 데이터 정규화(Normalization)란?

데이터 정규화(Normalization)는 데이터베이스에서 중복을 최소화하고, 데이터 일관성을 유지하기 위해 데이터를 구조화하는 과정입니다. 정규화를 통해 데이터를 여러 개의 테이블로 나누고, 관계(Relationship)를 설정하여 불필요한 데이터 중복을 제거할 수 있습니다.

2. 데이터 정규화의 장단점

✅ 장점

  • 데이터 중복 제거로 저장 공간 절약
  • 데이터 무결성(Integrity) 유지
  • 데이터 삽입, 삭제, 수정 시 일관성 유지

❌ 단점

  • 테이블이 많아지면서 JOIN 연산 증가 → 성능 저하 가능
  • 복잡한 쿼리 작성 필요

3. 정규화 과정(Normalization Forms)

정규화는 보통 1NF, 2NF, 3NF, BCNF 등의 단계로 이루어집니다.

정규화 단계 설명 예제
제1정규형(1NF) 각 컬럼이 하나의 값만 가지도록 변환 반복되는 데이터 컬럼을 제거
제2정규형(2NF) 기본 키(Primary Key)에 부분 종속된 컬럼 제거 한 테이블을 두 개의 테이블로 분리
제3정규형(3NF) 기본 키가 아닌 컬럼이 다른 비키 속성에 종속되지 않도록 변환 이상현상 방지
BCNF 모든 결정자가 후보 키가 되도록 변환 더 강한 정규화 형태

4. 정규화 적용 예제

✅ 정규화 전

| 학생ID | 학생이름 | 수강과목 | 교수 |
|--------|---------|---------|------|
| 101    | 김철수  | DB      | 이교수 |
| 101    | 김철수  | 운영체제 | 박교수 |
| 102    | 이영희  | DB      | 이교수 |

✅ 정규화 후

1. 학생 정보 테이블

| 학생ID | 학생이름 |
|--------|---------|
| 101    | 김철수  |
| 102    | 이영희  |

2. 과목 정보 테이블

| 과목ID | 과목명   | 교수  |
|--------|--------|------|
| 1      | DB     | 이교수 |
| 2      | 운영체제 | 박교수 |

3. 수강 내역 테이블

| 학생ID | 과목ID |
|--------|-------|
| 101    | 1     |
| 101    | 2     |
| 102    | 1     |

📌 결론

정규화(Normalization)는 데이터 중복을 줄이고 무결성을 유지하는 데 중요한 개념입니다. 그러나 지나친 정규화는 성능 저하를 초래할 수 있으므로, 실무에서는 정규화와 비정규화의 균형을 고려해야 합니다.

🔎 더 많은 SQL 최적화 관련 글이 궁금하다면?

👉 SQL 성능 최적화 & 튜닝도 함께 확인하세요!