IT/기타

정규화 (Normalization) 목적 및 장단점입니다.

부티형 2025. 2. 8. 17:22
반응형

데이터베이스 정규화(Normalization) 개요

정규화(Normalization)는 데이터베이스 설계에서 데이터의 중복을 최소화하고 일관성을 유지하기 위해 수행하는 과정입니다.

정규화의 목적

데이터 중복 방지 → 저장 공간 절약
데이터 무결성 유지 → 데이터의 일관성 유지
이상(Anomaly) 제거 → 삽입, 갱신, 삭제 시 발생할 수 있는 문제 방지


1. 정규화의 단계와 예제

예제 데이터 (정규화 전)

다음과 같은 학생 데이터를 담은 테이블이 있다고 가정합니다.

학생ID 학생이름 수업명 교수이름 교수연락처
1 김철수 데이터베이스 이교수 010-1111-1111
2 이영희 운영체제 박교수 010-2222-2222
3 김철수 운영체제 박교수 010-2222-2222
4 최민호 데이터베이스 이교수 010-1111-1111

🔴 문제점:

반응형
  • 데이터 중복 (학생 이름, 교수 정보가 반복됨)
  • 갱신 이상(Update Anomaly): 교수 연락처가 변경되면 여러 행을 수정해야 함
  • 삭제 이상(Deletion Anomaly): 한 학생이 모든 과목을 수강 취소하면 교수 정보까지 삭제됨

🔹 1NF (제1 정규형) - 원자성(Atomicity)

"모든 컬럼의 값이 원자값(Atomic Value)이어야 한다."
→ 하나의 셀에 여러 개의 값이 들어가면 안 됨.

변경 후 테이블

학생ID  학생이름 수업명 교수이름 교수연락처
1 김철수 데이터베이스 이교수 010-1111-1111
1 김철수 운영체제 박교수 010-2222-2222
2 이영희 운영체제 박교수 010-2222-2222
3 최민호 데이터베이스 이교수 010-1111-1111

해결: 여러 개의 값을 포함한 행을 분리하여 각 컬럼이 원자값을 가지도록 수정


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

"기본키의 부분집합에 종속된 컬럼을 분리한다."
→ 기본키(복합키) 중 일부에만 종속되는 컬럼을 제거해야 함.

기존 문제

  • 학생ID와 수업명 두 개가 기본키(복합키)인데, 학생이름은 학생ID에만 의존, 교수이름과 연락처는 수업명에만 의존

변경 후 테이블 (정규화 적용)

① 학생 테이블

학생ID 학생이름
1 김철수
2 이영희
3 최민호

② 수업 테이블

수업명 교수이름 교수연락처
데이터베이스 이교수 010-1111-1111
운영체제 박교수 010-2222-2222

③ 수강 테이블 (학생 - 수업 관계 테이블)

학생ID  수업명
1 데이터베이스
1 운영체제
2 운영체제
3 데이터베이스

해결: 학생 테이블, 교수 테이블, 수강 테이블로 분리하여 부분적 함수 종속 제거


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

"기본키가 아닌 컬럼이 다른 비키 속성(Non-Key)에 종속되지 않아야 한다."
→ A → B → C 관계라면, A → C 로 직접 연결되도록 분리

기존 문제

  • 교수이름이 결정되면 교수연락처가 자동으로 결정됨 → 교수이름이 기본키가 아닌데 연락처를 결정하는 문제가 발생

변경 후 테이블 (정규화 적용)

① 학생 테이블 (변경 없음)
 

학생ID 학생이름
1 김철수
2 이영희
3 최민호

② 교수 테이블 (교수 정보 분리)
 

교수ID 교수이름 교수연락처
P1 이교수 010-1111-1111
P2 박교수 010-2222-2222

③ 수업 테이블 (교수ID만 참조하도록 변경)
 

수업명 교수ID
데이터베이스 P1
운영체제 P2

④ 수강 테이블 (변경 없음)
 

학생ID 수업명
1 데이터베이스
1 운영체제
2 운영체제
3 데이터베이스

해결: 교수 정보를 따로 테이블로 만들어 이행적 종속 제거


🔹 BCNF (Boyce-Codd 정규형)

"모든 결정자가 후보키가 되어야 한다."
→ 3NF를 만족하면서도 후보키가 아닌 결정자를 제거

적용 예시

  • 예를 들어, 학생ID와 수업명이 기본키인데, 수업명을 기준으로 교수가 결정된다면, 이는 수업명이 부분적으로 결정력을 가지므로 별도의 테이블로 분리해야 함.

2. 정규화의 장점과 단점

장점

  • 데이터 중복 최소화
  • 데이터 무결성 보장
  • 이상(Anomaly) 현상 방지
  • 데이터베이스 성능 향상

단점

  • 테이블이 많아져서 복잡해짐
  • JOIN 연산이 많아져서 성능 저하 가능
  • 특정한 경우에는 정규화보다 비정규형이 성능이 더 좋을 수도 있음

3. 정규화 적용 여부 판단

📌 OLTP 시스템(트랜잭션 처리)정규화 적용 (데이터 무결성이 중요)
📌 OLAP 시스템(데이터 분석)비정규화 적용 (조회 성능이 중요)


🔹 결론

  • 1NF: 중복 데이터 제거 (원자화)
  • 2NF: 기본키 일부에만 의존하는 속성 제거
  • 3NF: 기본키가 아닌 컬럼이 다른 비키 컬럼에 의존하는 것 제거
  • BCNF: 모든 결정자가 후보키가 되도록 개선

🚀 정규화 단계를 이해하고 프로젝트에 맞게 적절히 적용하는 것이 중요합니다!

반응형