자격증/정보처리기사
반정규화 vs 정규화 차이 방법 비교 예시
딸기뚜왈기
2025. 2. 12. 16:28
정규화가 항상 조회 성능을 저하시킨다는 것은 잘못된 생각.
기본적으로 중복된 데이터를 제거함으로써 조회성능을 향상시킬 수 있음.
✅ 1. 정규화(Normalization)
정규화는 데이터 중복을 최소화하고 데이터의 무결성을 보장하기 위해 테이블을 나누는 과정입니다.
🎯 정규화의 목적
1️⃣ 데이터 중복 제거 → 데이터 일관성 유지
2️⃣ 데이터 무결성(Integrity) 보장 → 이상(Anomaly) 방지
3️⃣ 데이터 저장 공간 절약
4️⃣ 데이터 수정 시 불필요한 업데이트 최소화
🛠 정규화 방법 (정규형 Normal Form)
정규화는 1NF → 2NF → 3NF → BCNF 순서로 수행됩니다.
정규형정규화 방법설명
1NF (제1정규형) | 원자성(Atomicity) 보장 | 컬럼 값이 더 이상 분해되지 않는 단일 값으로 구성되도록 함 |
2NF (제2정규형) | 부분적 종속성 제거 | 기본키(PK)에 대해 완전 함수 종속이 되도록 테이블을 분리 |
3NF (제3정규형) | 이행적 종속성 제거 | 기본키에 종속되지 않은 속성을 제거하고 별도 테이블로 분리 |
BCNF (보이스-코드 정규형) | 결정자(Determinant) 문제 해결 | 기본키가 아닌 컬럼이 후보키(Candidate Key)에 종속되지 않도록 개선 |
📌 정규화 예제
정규화 전 (중복 데이터 존재)
주문번호고객명고객전화번호상품명상품가격
1001 | 홍길동 | 010-1111-2222 | 노트북 | 1,500,000 |
1002 | 김철수 | 010-3333-4444 | 스마트폰 | 900,000 |
1003 | 홍길동 | 010-1111-2222 | 태블릿 | 700,000 |
정규화 후 (1NF, 2NF, 3NF 적용)
- 고객 테이블 (중복 제거)고객ID고객명고객전화번호
C001 홍길동 010-1111-2222 C002 김철수 010-3333-4444 - 주문 테이블 (고객과 주문을 분리)주문번호고객ID
1001 C001 1002 C002 1003 C001 - 상품 테이블 (상품 정보 분리)상품ID상품명상품가격
P001 노트북 1,500,000 P002 스마트폰 900,000 P003 태블릿 700,000
✅ 정규화 결과
- 데이터 중복이 사라지고 무결성이 향상됨
- 데이터 수정이 용이해짐 (예: 홍길동의 전화번호 변경 시 고객 테이블만 수정하면 됨)
✅ 2. 반정규화(Denormalization)
반정규화는 정규화를 일부 해제하여 성능을 최적화하는 과정입니다.
- 정규화된 데이터 구조는 JOIN이 많아져 성능이 저하될 수 있음
- 반정규화는 테이블을 합치거나, 중복을 허용하여 쿼리 성능을 개선
🎯 반정규화의 목적
1️⃣ 복잡한 JOIN 연산 감소 → 조회 속도 향상
2️⃣ 데이터 조회 성능 최적화 → 읽기(Read) 성능 개선
3️⃣ 인덱스 활용 최적화 → 불필요한 인덱스 조회 감소
4️⃣ 보고서, 통계 데이터를 미리 계산하여 저장 → 실시간 연산 부담 감소
🛠 반정규화 방법
방법설명
중복 데이터 허용 | 테이블 간 JOIN을 줄이기 위해 일부 속성을 중복 저장 |
테이블 통합(Merging Tables) | 자주 JOIN되는 테이블을 하나로 합침 |
중간 테이블(중복 속성 추가) | 자주 조회되는 데이터를 별도로 저장하여 조회 성능 향상 |
파티셔닝(Partitioning) | 큰 테이블을 여러 개의 작은 테이블로 분할하여 성능 최적화 |
📌 반정규화 예제
정규화된 데이터 (JOIN 필요)
- 고객 테이블고객ID고객명고객전화번호
C001 홍길동 010-1111-2222 C002 김철수 010-3333-4444 - 주문 테이블주문번호고객ID주문날짜
1001 C001 2024-02-10 1002 C002 2024-02-11
🔻 문제점
- 주문 목록을 조회할 때 고객 정보를 가져오려면 JOIN 필요 → 성능 저하
반정규화된 데이터 (JOIN 최소화)
- 주문 테이블 (고객 정보 포함)주문번호고객ID고객명고객전화번호주문날짜
1001 C001 홍길동 010-1111-2222 2024-02-10 1002 C002 김철수 010-3333-4444 2024-02-11
✅ 반정규화 결과
- 주문 테이블에서 고객 정보를 바로 조회 가능 → JOIN 없이 빠른 조회 가능
- 하지만, 고객 전화번호가 변경될 경우 모든 주문 데이터 수정이 필요함 (데이터 중복 허용)
✅ 정규화 vs 반정규화 비교
비교 항목정규화 (Normalization)반정규화 (Denormalization)
목적 | 데이터 중복 제거, 무결성 보장 | 성능 최적화, 조회 속도 개선 |
장점 | 데이터 일관성 유지, 이상 현상 방지 | JOIN 감소, 읽기 성능 향상 |
단점 | 복잡한 JOIN 필요 → 성능 저하 | 데이터 중복 증가 → 수정 비용 증가 |
적용 시점 | 설계 초기 (기본 원칙) | 성능 최적화가 필요할 때 |
✅ 결론
- 정규화는 기본 원칙 → 데이터 중복을 줄이고 무결성을 유지하는 것이 목적
- 반정규화는 성능 최적화 → 복잡한 JOIN을 줄이고 조회 속도를 높이는 것이 목적
- 실무에서는 정규화를 기본으로 하고, 성능 문제가 발생하면 반정규화를 적용하는 것이 일반적