A. 반정규화 정의
1. 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능 향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미
2. 데이터를 중복하여 성능을 향상시키기 위한 기법
3. 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정
4. 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화
5. 데이터를 조회할 때 디스크 I/O 량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상될 때 수행
B. 반정규화 절차
1. 반정규화 대상조사 : 범위처리 빈도수 조사, 대량 범위 처리 조사, 통계성 프로세스 조사, 테이블 조인 개수
2. 다른 방법 검토 : view 테이블, 클러스터링 적용, 인덱스 조정, 응용애플리케이션
3. 반정규화 적용 : 테이블 반정규화, 컬럼 반정규화, 관계 반정규화
C. 반정규화 전 검토 사항
1. 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰를 사용 검토
2. 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우에 클러스터링을 적용하거나 인덱스를 변경 검토
3. 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리 한 파티셔닝 기법 검토
4. 응용 애플리케이션에서 로직을 구사하는 방법을 변경 검토
D. 테이블 반정규화
분류 | 기법 | 내용 |
테이블병합 | 1:1 관계 테이블 병합 | 1:1 관계 통합 |
1:M 관계 테이블 병합 | 1:M 관계 통합 | |
슈퍼/서브타입 테이블 병합 | 슈퍼/서브 관계 통합 |
1. 조인이 많이 발생하여 테이블을 통합하여 성능에 더 유리할 경우 고려
2. 1:M 관계에서 테이블 병합은 중복 데이터가 발생
3. 1:M 관계에서 테이블 병합은 1 쪽에 해당하는 테이블의 속성 개수가 적어야 유리함
분류 | 기법 | 내용 |
테이블분할 | 수직 분할 | 컬럼 단위 분리 |
트랙잭션 처리 유형 확인 | ||
수평 분할 | 로우 단위 분리 | |
관계 없음 |
1. 엔터티의 일부 속성을 별도 엔터티로 분할
2. 1:1 관계 성립
3. 한 개의 블록에 더 많은 인스턴스를 저장할 수 있다
4. 속성의 사용 빈도나 속성값의 null 여부 기준으로 분할
분류 | 기법 | 내용 |
테이블추가 | 중복테이블 추가 | 특정 범위 데이터를 자주 처리하는 경우 |
원격 조인 성능 저하가 심한 경우 | ||
통계테이블 추가 | 통계 데이터를 미리 계산 | |
이력테이블 추가 | 마스터 테이블의 이력 데이터를 관리 | |
반정규화 유형 | ||
부분테이블 추가 | 자주 이용하는 컬럼들로 테이블 생성 | |
반정규화 유형 |
1. 테이블의 특정 인스턴스를 별도의 테이블로 분할
2. 데이터베이스의 파티셔닝 기법을 주로 이용
E. 컬럼 반정규화
기법 | 내용 |
중복칼럼 추가 | 조인 성능 개선을 위한 중복된 칼럼을 추가 |
파생칼럼 추가 | 미리 계산된 값을 저장할 칼럼을 추가 |
Derived Column이라고도 함 | |
이력테이블 칼럼 추가 | 특정 일/최근 일 값 조회 성능 향상을 위해 칼럼 추가 |
PK에 의한 칼럼 추가 | 복합의미의 PK를 단일 속성으로 구성시 발생 |
PK내 특정 의미의 값을 조회시 성능 저하 발생 | |
특정 의미의 값을 저장하는 칼럼추가 | |
응용시스템 오작동을 위한 칼럼 추가 | 이전 데이터를 임시 보관 용도 칼럼 추가 |
F. 관계 반정규화 (중복관계 추가)
기법 | 내용 |
중복관계 추가 | 여러 단계 조인 성능 개선을 위해 추가적인 관계 생성 |
1. 데이터 모델 전체가 관계로 연결되어 있음
2. 관계가 서로 먼 친척 간에 조인 관계가 빈번하게 발생
[SQLD] 1-3. 데이터 모델의 이해 - 속성(Attribute) 정의, 특징, 도메인
[SQLD] 2-1. 데이터 모델과 성능 - 정규화와 성능 데이터 모델링, 용어, 정규화 종류
[SQLD] SQLD 시험 안내/합격 기준/응시 자격 소개