데이터베이스 정규화(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: 모든 결정자가 후보키가 되도록 개선
🚀 정규화 단계를 이해하고 프로젝트에 맞게 적절히 적용하는 것이 중요합니다!
'IT > 기타' 카테고리의 다른 글
IT 분야에서 사용하는 이런 용어들 아시나요? (0) | 2025.02.12 |
---|---|
Adfit(애드핏) 광고설정 오류 해결 방법 입니다. (0) | 2025.02.11 |
디자인 패턴(Design Pattern) 필요성을 아시나요? (1) | 2025.02.08 |
맥북(맥북 프로, Intel) 초기화 (0) | 2025.02.05 |
B360m ds3h 내장 그래픽 활용 (0) | 2025.02.01 |