본문 바로가기
카테고리 없음

반정규화(DE-NORMALIZATION)란?

by cook_code 2023. 6. 12.
반응형

오늘은 SQLD 과목 > 데이터 모델링의 이해 > 반정규화에 대해 알아보겠습니다.  

 

반정규화의 개념

  • 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능 향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법 
  • 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나
  • 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나 
  • 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행합니다. 

=> 과도한 정규화로 인해 오히려 성능이 저하된 경우 사용하는 기법

반정규화의 기법 - 테이블/컬럼/관계반정규화

 

1. 테이블 반정규화 

테이블 병합 테이블 분할 테이블 추가
1:1 수직 분할 중복 테이블 추가 
1:M 수평 분할 통계 테이블 추가
슈퍼, 서브 타입 병합   이력 테이블 추가

1-1. 중복 테이블 병합

데이터 사용 시, 두 세개의 테이블을 항상 같이 쓰게 되는 경우 해당 테이블들을 병합하는 방법입니다.

1-2. 테이블 분할

한 테이블에서 자주 쓰이는 컬럼과 아닌 컬럼으로 나뉘는 경우 

A 연산에서는 a컬럼들, B 연산에서는 b컬럼들만 사용되는데 a,b 컬럼이 한 테이블에 들어있을 때, 

분할하여 여러 테이블로 쪼개는 방법입니다.

1-3. 테이블 추가 

자주 쓰이는 부분이 모두 한 테이블에 들어있을 때, 내용이 중복되더라도 테이블을 하나 추가하는 방법입니다.

 

2. 컬럼 반정규화 

- 중복 컬럼 추가 

(특정 컬럼이 모든 테이블의 외래키로 참조되면서 그 테이블들의 기본키가 되는 경우,

외래키를 해당 테이블의 기본키로 중복해서 생성하는 방법입니다. > 조인감소효과)

- 파생 컬럼 추가 (미리 값을 계산하여 컬럼에 보관합니다.)

- 이력 테이블 컬럼 추가

(대량의 이력 데이터 처리시 최근값, 시작, 종료 일자를 추가해 속도를 빠르게 합니다.)

- pk에 의한 컬럼 추가

(단일 pk안에서 특정값을 별도로 조회하는 경우 성능 저하가 발생합니다.)

(이미 pk안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 생성하는 방법입니다.)

- 응용 시스템의 오작동을 위한 컬럼 추가

(업무적으로 의미는 없지만, 이전 데이터를 임시적으로 중복하여 보관하는 경우)

 

3. 관계 반정규화 

- 중복 관계 추가

(여러 경로를 거쳐 조인이 가능하지만,

이 때 발생할 수 있는 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법입니다.)

- 데이터 무결성을 깨트릴 위험을 가지지 않고서도 데이터처리의 성능을 향상시킬 수 있는 반정규화의 기법입니다.  

※ 데이터 무결성:

데이터가 전송, 저장되고 처리되는 모든 과정에서 변경되거나 손상되지 않고 완전성, 정확성, 일관성을 유지함을 보장하는 특성입니다. 

반응형