본문 바로가기
자격증/SQLD

1-2. 데이터 모델링과 SQL) 02 반정규화 (De-Normalization)

by ornni 2024. 10. 15.
728x90
반응형

데이터의 조회성능을 향상시키기 위해 데이터의 중복 허용하거나 데이터를 그룹핑하는 과정
정규화가 끝난 후 거치게 되며 일정한 룰 존재

주의
- 조회 성능은 향상될 수 있으나, 입력, 수정, 삭제 성능 저하 기능
- 데이터 정합성 이슈

데이터 무결성이 저해될 수 있음


(1) 테이블 반정규화
1. 테이블 병합
업무 프로세스 상 Join이 필요한 경우가 많아 테이블을 통합하는 것이 성능에 유리한 경우
ㄱ. 1 : 1 관계 테이블 병합 판단 수월, 부작용이 적음
ㄴ. 1 : M 관계 테이블 병합
1쪽에 해당하는 엔터티의 속성 개수가 많으면 병합한 후 중복 데이터가 많아질 수 있음
ㄱ, ㄴ은 테이블의 관계가 강결합이어서 같이 조회되는 경우가 대부분일 경우 비정규화 고려
ㄷ. 슈퍼 서브 타입 테이블 병합

2. 데이터 분할
ㄱ. 테이블 수직 분할
엔터티의 일부 속성을 별도의 엔터티로 분할 (1 : 1 관계 성립)
테이블의 일부 속성을 별도의 테이블로 분리하는 것
한 개의 블록에 더 많은 인스턴스 저장 가능
속성의 사용 빈도나 속성값의 NULL 여부를 기준으로 분할

ㄴ. 테이블 수평 분할
엔터티의 인스턴스를 특정 기준으로 별도의 엔터티(테이블)로 분할 (파티셔닝)
관계가 없는 다수의 테이블이 생성

 

3. 테이블 추가
ㄱ. 중복 테이블 추가
데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티 추가
ㄴ. 통계 테이블 추가
통계치를 미리 계산하여 저장
ㄷ. 이력 테이블 추가
ㄹ. 부분 테이블 추가
필요 부분 정보만 부분 테이블로 추가


(2) 칼럼 반정규화
1. 중복 칼럼 추가
업무 프로세스 상 Join이 필요한 경우가 많아 칼럼을 추가하는 것이 성능한 유리한 경우 진행

2. 파생 칼럼 추가
프로세스 수행시 부하가 염려되는 계산값을 미리 칼럼으로 추가하여 보관하는 방식
ex) 상품의 재고, 프로모션 적용 할인가 등

3. 이력 테이블 칼럼 추가
대량의 이력 테이블 조회시 속도 저하에 대비하여 조회 기준이 될 것으로 판단되는 칼럼을 미리 추가하는 방식
ex) 최신 데이터 여부


(3) 관계 반정규화 (중복 관계 추가)
업무 프로세스 상 Join이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리한 경우 고려
데이터 무결성을 깨뜨릴 위험 없이 데이터 처리 성능 향상 기법

반응형