I. 반정규화의 개요
가. 반정규화의 필요성
- 정규화 시 빈번한 Join이 필요하여 검색 시간이 과다하게 소요
- 대용량 데이터베이스에서 Partition의 기준으로 사용되는 Partition Key가 정규화로 인해 제거될 소지 존재
나. 반정규화 고려 사항
- 정합성과 데이터 무결성, 성능과 테이블 단순화의 Trade off를 검토.
- 성능과 모델의 단순화에 대한 이점이 있지만 무결성 저하로 시스템의 안정성을 해칠 수 있어 반드시 정규화가 수행된 상태에서 적용
- 데이터의 의미가 변형되거나 업무 규칙이 감추어져 서는 안됨
- 데이터의 무결성을 유지시킬 수 있는 방안을 마련하고 반정규화 적용
- 반정규화는 성능과 관리의 효율을 증대 시키지만 데이터의 일관성과 정합성은 위험을 내포하고 있어 충분한 검토 후에 수행
다. 반정규화의 대상
- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만을 조회하는 경우
- 대량의 데이터 범위를 자주 처리하는 경우
- 통계성 프로세스의 경우 별도의 통계 테이블 고려
- 지나치게 많은 조인이 걸려 데이터 조회 작업이 어려운 경우
II. 반정규화의 유형
유형 |
설명 |
Table Merge |
Parent Table에 Child Table의 속성을 삽입하고 Child Table 삭제 Join이 없어짐으로써 Access 성능이 없어짐 |
Redundant Column 추가 |
Join하여 읽어올 속성을 양쪽 Table에 중복적으로 저장 갱신 횟수에 비해 조회 횟수가 많은 경우 혹은 더 중요 시에 적용 |
Computed Column 추가 |
여러 숫자 필드를 Join하여 계산이 필요한 경우에 가장 조회가 많은 속성을 지닌 Table에 계산 결과 속성 추가 |
Code Table Merge |
코드명을 속성으로 추가하여 Join 제거 |
Table 수직 분할 |
매우 많은 수의 Column으로 구성된 테이블에서 빈번하게 Access되는 Column과 Access 횟수가 적은 Column을 분리하여 구성 |
Table 수평 분할 |
동일한 속성을 가진 테이블을 기준에 따라 2개로 분리 분리된 여러 Partition에 Data를 동시에 Load 할 수 있으므로 수행 시간을 줄일 수 있음 |
III. 반정규화의 절차 및 방법
가. 반정규화의 절차
절차 |
방법 |
설명 |
반정규화 대상 조사 |
범위 처리 빈도수 조사 |
자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만을 조회하는 경우 |
대량 범위처리 조사 |
테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리 범위를 일정하게 줄이지 않으면 성능 보장 불가의 경우 |
|
통계성프로세스 조사 |
통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성 |
|
테이블 조인 개수 조사 |
테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토 |
|
다른 방법 유도 검토 |
뷰(View) 테이블 |
지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용 |
클러스터링 적용 |
대량의 데이터를 특정 클러스터링팩트에 의해 저장방식을 다르게 하는 방법(조회중심의 테이블에만 적용가능) |
|
인덱스 적용 |
인덱스를 통해 성능을 충분히 확보할 수 있다면 인덱스를 조정하여 반정규화를 회피 |
|
응용어플리케이션 |
응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상 |
|
반정규화 적용 |
테이블 / 속성 / 관계의 반정규화 |
나. 반정규화의 방법
구 분 |
세부 방법 |
설명 |
테이블 반정규화 |
테이블 병합 |
조인되는 경우가 많아서 테이블을 합치는 것이 성능향상에 효율적일 경우에 적용 1:M 관계는 데이터 중복 발생, 신중히 접근 |
테이블 분할 |
분할된 테이블의 전체 조회 시 union을 사용해야 하므로 성능이 느려짐 |
|
테이블 추가 |
논리적인 모델링이 끝난 후 추가적으로 통계 산출 발생 시 통계 테이블을 추가하여 테이블을 산출 |
|
컬럼 비정규화 |
중복 컬럼 추가 |
다른 테이블에 존재하는 속성 자주 이용 경우 확인하려는 정보가 너무 많은 조인으로 불필요한 낭비 발생 경우 |
파생 컬럼 추가 |
연산을 통해서 결과값을 자주 접근하게 될 경우 컬럼을 추가해 연산을 단순화 |
|
이력 테이블컬럼추가 |
시점 이력 테이블에 최신의 여부를 확인하기 위해 최신 날짜를 추가하는 경우 |
|
PK에 의한 컬럼추가 |
여러 컬럼으로 이루어진 PK를 가진 테이블을 조인할 경우 단순성을 위해서 인공키를 PK로 지정하고 활용 |
|
읽기 성능을 향상 시키고 SQL 문장을 더 간단히 작성 가능. 무결성 확보 어렵고 추가 저장공간 필요, 중복 속성 인해 원본 확인 어려움 |
||
관계 비정규화 |
조회 관계를 단순화 시키기 위해 관계를 중복 |
III. DW 시스템에서 반정규화 도입 이유
단계 |
내용 |
비즈니스 운영성 향상 |
반정규화를 수행함으로써 중복 데이터가 발생하여 조회성능은 저하될 수 있으나 ad-hoc(임의) 쿼리를 수행하며 관리,비즈니스 계획 및 실행을 위해 DW를 이용하는 사용자들의 만족도를 높일 수 있음 |
데이터 클러스터링의 사용 편이성 |
차원적 데이터 분석을 위하여 정규화를 거친 Multi-depth 데이터의 경우 Pivoting을 통한 정보 이해력이 떨어지므로,분석을 위해서 비정규화를 실시 |
데이터 적시성 향상 |
ETL 개발시간 및 수행시간을 단축하여 최신 데이터 반영의 주기를 빠르게 제공 가능함. |
'개발정보' 카테고리의 다른 글
이미지 png, jpg, bmp 아이콘 파일 ico 변환 무료 사이트 (0) | 2020.01.26 |
---|---|
MySQL, 시간 차 , 시간 간격 구하는 방법, 업무수행 시간 구하기 (0) | 2019.06.22 |
Oracle Data Dictionary ( 데이터 사전 ) (0) | 2019.06.22 |
넥사크로 기술지원 및 라이센스 받을 수 있는 사이트 URL (0) | 2019.06.22 |
데이터 모델링 (0) | 2019.06.22 |