본문 바로가기
IT기술노트/데이터베이스

반정규화(Denormalization)

by 비트코기 2021. 3. 7.

I. 질의 성능 향상을 위한 데이터 중복 허용, 반정규화의 개요

가. 반정규화(Denormalization)의 정의

   - 정규화된 엔티티, 속성, 관계에 대해 시스템 성능향상과 개발, 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법

나. 반정규화의 필요성

   - 정규화 시 빈번한 조인 필요하여 검색 시간 과다 소요 시

   - 대용량 데이터베이스에서 파티션의 기준으로 사용되는 파티션 키가 정규화로 제거될 소지 존재


II. 반정규화의 유형 및 절차

가. 반정규화의 유형

유형

설명

Table Merge

- 부모 테이블에 자식 테이블의 속성을 삽입하고 자식 테이블 삭제

Redundant Column 추가

- 조인하여 읽어올 속성을 양쪽 테이블에 중복적으로 저장

Computed Column 추가

- 여러 숫자 필드를 조인하여 계산이 필요한 경우에 가장 조회가 많은 속성을 지난 테이블에 계산 결과 속성 추가

Code Table Merge

- 코드명을 속성으로 추가하여 조인 제거

Table 수직분할

- 매우 많은 수의 컬럼으로 구성된 테이블에서 빈번하게 Access되는 컬럼과 Access 횟수가 적은 컬럼을 분리하여 구성

Table 수평분할

- 동일한 속성을 가진 테이블을 기준에 따라 2개로 분리

나. 반정규화의 절차

절차

방법

설명

1) 반정규화

대상조사

범위처리 빈도수 조사

- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만을 조회하는 경우

대량 범위처리 조사

- 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우 처리 범위를 일정하게 줄이지 않으면 성능 보장이 불가능한 경우

통계 성 프로세스 조사

- 통계 성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성

테이블 조인 개수 조사

- 테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토

2) 다른 방법

유도검토

뷰 테이블

- 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용

클러스터링 적용

- 대량의 데이터를 특정 클러스터링 팩트에 의해 저장방식을 다르게 하는 방법(조회중심의 테이블에만 적용가능)

인덱스 적용

- 인덱스를 통해 성능을 충분히 확보할 수 있다면 인덱스를 조정하여 반정규화를 회피

응용 어플리케이션

- 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상

3) 반정규화

적용

테이블/속성/관계 반정규화


III. 반정규화의 방법

구분

방법

설명

테이블

반정규화

테이블 병합

- 조인되는 경우가 많아서 테이블을 합치는 것이 성능향상에 효율적일 경우에 적용

- 1:M 관계는 데이터 중복 발생, 신중히 접근

테이블 분할

- 분할된 테이블의 전체 조회 시 union을 사용해야 하므로 성능이 느려짐

테이블 추가

논리적인 모델링이 끝난 후 추가적으로 통계 산출 발생 시 통계 테이블을 추가하여 테이블을 산출

컬럼

반정규화

중복 컬럼 추가

- 다른 테이블에 존재하는 속성 자주 이용 경우

- 확인하려는 정보가 너무 많은 조인으로 불필요한 낭비 발생 경우

파생 컬럼 추가

- 연산을 통해서 결과값을 자주 접근하게 될 경우 컬럼을 추가해 연산을 단순화

이력 테이블 컬럼 추가

- 시점 이력 테이블에 최신의 여부를 확인하기 위해 최신 날짜를 추가하는 경우

PK에 의한 컬럼 추가

- 여러 컬럼으로 이루어진 PK를 가진 테이블을 조인할 경우 단순성을 위해서 인공키를 PK로 지정하고 활용

- 읽기 성능을 향상시키고 SQL 문장을 더 간단히 작성 가능

- 무결성 확보 어렵고 추가 저장공간 필요, 중복 속성 인해 원본 확인 어려움

관계

반정규화

- 조회 관계를 단순화시키기 위해 관계를 중복

 

반응형

'IT기술노트 > 데이터베이스' 카테고리의 다른 글

Statement와 Prepared Statement  (0) 2021.03.07
동적SQL  (0) 2021.03.07
Stored Procedure  (0) 2021.03.07
SQL(Structured Query Language)  (0) 2021.03.07
정규화(Normalization)  (0) 2021.03.07
암스트롱 공리  (0) 2021.03.07
이상현상(Anomaly)  (0) 2021.03.07
함수적 종속성(Functional Dependency)  (0) 2021.03.07

댓글