반정규화 (Denormalization)
1. 반정규화의 정의
- 반정규화는 성능 향상 및 효율성을 위해 정규화된 데이터 모델을 의도적으로 변경하는 과정.
- 정규화 원칙을 위배하여 데이터를 통합하거나 중복시키고, 필요시 분리하는 작업.
- 목적: 데이터베이스의 성능 향상 및 운영 편의성 증대.
2. 반정규화의 필요성
- 정규화 후의 문제점:
- 지나치게 분리된 테이블로 인해 조인 연산이 과도하게 발생.
- 데이터 검색 시 성능 저하.
- 실시간 시스템에서 처리 속도가 느려질 가능성.
- 반정규화의 목적:
- 시스템 성능 향상.
- 데이터베이스 운영의 편리성.
- 데이터 접근 경로 단축.
3. 반정규화의 특징
- 이점:
- 성능 향상.
- 자주 사용하는 데이터를 한곳에 통합하여 조회 속도 증가.
- 조인 연산 감소.
- 단점:
- 데이터 중복 발생.
- 데이터의 일관성 및 무결성 저하 가능성.
- 유지보수 복잡성 증가.
4. 반정규화의 적용 방법
1. 테이블 통합
- 정의: 자주 조인되는 두 개 이상의 테이블을 하나로 통합.
- 적용 상황:
- 두 테이블의 데이터를 항상 함께 조회.
- 조인 연산이 빈번히 발생.
- 예제:
2. 테이블 분할
- 정의: 하나의 테이블을 여러 개로 분리.
- 분류:
- 수직 분할: 테이블의 속성(컬럼)을 기준으로 분리.
- 적용 상황: 속성이 많거나 자주 갱신되는 속성과 그렇지 않은 속성을 분리.
- 예제:
- 원본 테이블:
학생(학번, 이름, 생년월일, 학과, 주소)
- 수직 분할:
학생_기본정보(학번, 이름, 생년월일)
학생_학과정보(학번, 학과, 주소)
- 수평 분할: 테이블의 데이터를 행(레코드) 기준으로 분리.
- 적용 상황: 데이터가 많아 성능 저하가 우려되거나 특정 조건별로 데이터가 분리 가능할 때.
- 예제:
- 원본 테이블:
학생(학번, 이름, 학과, 학년)
- 수평 분할:
1학년_학생(학번, 이름, 학과, 학년=1)
2학년_학생(학번, 이름, 학과, 학년=2)
3. 중복 테이블 추가
- 정의: 자주 사용하는 데이터를 추출하여 별도의 테이블로 생성.
- 적용 상황:
- 데이터 조회 성능을 높이기 위해 특정 데이터를 중복 저장.
- 예제:
4. 중복 속성 추가
- 정의: 자주 사용하는 속성을 원래 테이블에 추가.
- 적용 상황:
- 특정 속성의 조회가 빈번히 발생.
- 조인 연산을 줄이기 위해 속성을 테이블에 중복 저장.
- 예제:
- 기존 테이블:
학생(학번, 이름)
학과(학과ID, 학과명)
- 중복 속성 추가:
학생(학번, 이름, 학과명)
5. 반정규화의 적용 시 고려사항
- 정규화된 상태에서 시작: 반드시 정규화된 모델에서 출발해야 함.
- 성능 평가 후 적용: 데이터베이스의 성능 평가 결과를 바탕으로 반정규화 여부를 결정.
- 일관성과 무결성 유지 방안 마련: 반정규화로 인한 데이터 일관성 문제를 해결하기 위해 트리거나 프로그램 로직 추가.
- 적정선 유지: 과도한 반정규화는 오히려 성능 저하와 관리 비용 증가를 초래할 수 있음.
6. 요약
- 반정규화는 성능과 효율성을 위해 정규화된 데이터 모델을 의도적으로 변경하는 과정.
- 테이블 통합, 테이블 분할(수직/수평), 중복 테이블 추가, 중복 속성 추가의 4가지 방법이 있음.
- 이점:
- 단점:
- 데이터 중복 증가, 무결성 및 일관성 저하 가능성.
- 적절한 성능 평가와 필요에 따라 반정규화를 적용해야 함.
핵심: 반정규화는 무조건 정규화를 위배하는 행위가 아니라, 성능과 효율성을 최적화하기 위한 전략적 선택입니다.