반정규화 Denormalization
반정규화는 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복,통합,분리 등을 수행하는 데이터 모델링 기법이다.
반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미와 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리등을 수행하는 모든 과정을 의미한다.
데이터 무결성이 깨질 수 있는 위헙을 무릅쓰고 데이터를 중복하여 반정규화를 적용시키는 이유는 데이터를 조회할 때 디스크 I/O량이 많아 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 에상되거나 컬럼을 계산하여 일긍ㄹ 때 성능이 저하될 것이 예상되는 경우 반 정규화를 수행한다.
테이블의 반 정규화 #
- 테이블 명함
- 1:1 관계 테이블 병합
- 1:M 관계 테이블 병합
- 테이블 분할
- 수직 분할
- 수평 분할
- 테이블 추가
- 중복 테이블 추가
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
컬럼의 반 정규화 기법 #
- 중복 컬럼 추가
- 파생 컬럼 추가
- 이력 테이블 컬럼 추가
- PK에 의한 컬럼 추가
- 응용 시스템 오작동을 위한 컬럼 추가
반정규화 절차 #
- 반정규화 대상 조사
- 범위 처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
- 다른 방법 유도 검토
- 뷰 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 애플리케이션
- 반정규화 적용
- 테이블 반정규화
- 속성의 반정규화
- 관계의 반정규화
반정규화의 대상에 대해 다른 방법으로 처리 #
지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰를 사용하면 이를 해결할 수도 있다.
대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있다.
대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉, 파티셔닝 기법이 적용되어 성능 저하를 방지할 수 있다.
응용 애플리케이션에서 로직을 구사하는 방법을 변경하믕로써 성능을 향상시킬 수 있다.