반정규화(= 비정규화)
정규화된 데이터 모델에서 조회 성능 향상이나 운영 편의성 개선을 위해
의도적으로 데이터 중복을 허용하거나 테이블을 통합·분할하는 과정
- 성능 향상, 접근 경로 단축, 응답 속도 개선
- 데이터 중복, 무결성 저하, 일관성 유지 어려움
- 과도한 반정규화는 오히려 성능 저하와 관리 복잡성을 초래할 수 있음
반정규화의 목적
- 조회 성능 향상
- 개발 편의성 향상
- 운영 효율성 향상
- 실시간 계산, 빈번한 조회 시 처리 속도 개선
반정규화의 주요 기법
- 테이블 통합
- 테이블 분할
- 접근 빈도나 보안, 속성 수 등에 따라 테이블을 분리
- 중복 테이블 추가
- 집계, 요약, 이력 등의 용도로 별도 테이블 생성
- 중복 속성 추가
- 조인 없이 조회하기 위해 자주 쓰이는 속성을 복사
테이블 통합
두 개의 테이블이 항상 함께 조인되어 사용될 경우,
성능을 높이기 위해 하나의 테이블로 합치는 방법
- 두 테이블이 자주 함께 조회될 때
- 프로세스가 항상 동일한 데이터를 동시에 처리할 때
- 통합의 종류
- 1:1 관계 테이블 통합
- 1:N 관계 테이블 통합
- 슈퍼타입/서브타입 통합
테이블 분할
하나의 테이블을 수평 또는 수직으로 나누어 관리하는 기법
- 수평 분할
- 레코드(행) 기준
- 사용 빈도, 기간별, 지역별 등으로 분리
- 조회 속도 향상
- 전체 검색 시 다시 합쳐야 하므로 비용 증가
- 수직 분할
- 속성(열) 기준
- 자주 쓰이는 속성과 잘 쓰이지 않는 속성을 분리
- 갱신 위주 속성 분할
- 자주 조회되는 속성 분할
- 크기가 큰 속성 분할
- 보안이 필요한 속성 분할
중복 테이블 추가
작업 효율 향상이나 조회 속도 개선을 위해
기존 데이터를 요약·집계하여 별도의 테이블로 생성하는 방법
- 사용하는 경우
- 여러 테이블을 동시에 조인해야 하는 경우
- 원본이 다른 서버에 있는 경우
- 이력 관리, 통계, 리포트 등을 자주 조회할 때
- 추가 방법
- 집계 테이블 추가
- 집계 데이터를 위한 테이블 생성
- 각 원본 테이블에 트리거를 설정하여 사용
- 합계·평균 등 집계 데이터를 별도 테이블로 관리
→ 조회 속도 빠름
- 진행 테이블 추가
- 특정 부분만 포함하는 테이블 추가
중복 속성 추가
조인 없이 빠르게 조회할 수 있도록
자주 쓰이는 속성을 테이블 내에 중복 저장하는 방법
- 사용하는 경우
- 조인이 자주 발생하는 속성
- 접근 경로가 복잡하거나 성능이 떨어지는 속성
- 조건 검색에 자주 사용되는 속성
- 기본키가 복합키(2개 이상 속성)로 구성된 경우
- 주의점
- 무결성 저하
- 저장 공간 증가
- 데이터 동기화 어려움
정규화 vs 반정규화
| 구분 |
정규화 |
반정규화 |
| 목적 |
데이터 중복 제거, 이상 방지 |
성능 향상, 관리 편의성 |
| 데이터 구조 |
세분화되어 구조적 |
단순화되고 중복 허용 |
| 데이터 일관성 |
높음 |
낮아질 수 있음 |
| 조회 성능 |
느릴 수 있음(조인 많음) |
빠름 |
| 무결성 |
높음 |
낮음 |
| 사용 시점 |
설계 초기 단계 |
운영 단계(튜닝 단계) |