2 반정규화(역정규화)

정규화된 엔티티, 속성, 관계를 시스템의 성능 향상, 개발과 운영을 단순화하기 위해 데이터 모델을 통합하는 프로세스를 말한다.

즉 데이터의 정합성과 데이터의 무결성을 우선으로 할지 데이터베이스 구성의 단순화와 성능을 우선으로 할지를 결정한다. 


2.1 반정규화(역정규화) 절차

1) 반정규화(역정규화) 대상 조사

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

→  대량의 범위 처리 조사 : 대량이 데이터 범위를 자주 처리하는 경우

→ 통계성 프로세스 조사 : 별도의 통계 테이블 고려

→  테이블 조인 개수 : 지나치게 많은 조인이 걸려 데이터 조회 작업이 어려운 경우 

2) 다른 방법 유도 검토

→ 뷰 테이블 : 지나치게 많은 조인이 걸려 데이터 조회하는 작업이 어려운 경우

→클러스터링 또는 인덱스 적용 : 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리할 수 있다.(파티셔닝 기법)

→애플리케이션 : 로직을 변경함으로써 성능을 향상시킬 수 있다. 


3) 반정규화(역정규화) 적용

→ 테이블 반정규화(역정규화)

→ 속성의 반정규화(역정규화)

→ 관계의 반정규화(역정규화) 


2.2 테이블 반정규화(역정규화) 방법

1. 테이블 병합 2. 테이블 분할 3. 테이블추가
- 1:1:관계의 테이블 병합 
- 1:M 관계의 테이블 병합 
- 슈퍼타입 서브타입 테이블 병합
- 수직 분할 
- 수평 분할
- 중복 테이블 추가 
- 통계 테이블 추가 
- 이력 테이블 추가 
- 부분 테이블 추가



2.3 속성의 반정규화(역정규화)

1) 컬럼 중복 : 일반적으로 조인 프로세스를 줄이기 위해 컬럼 중복

 * 공급자라는 마스터 테이블과 변경되는 전화번호, 메일주소 내용이 이력형태로 관리되는 데이터 모델이다. 

이 모델에서 가장 최근에 변경된 값을 가져오려면 복잡한 조인이 발생된다.

SELECT a.공급자명, b.전화번호, c.메일주소 
  FROM 공급자명 a, 
       (SELECT x.공급자번호, x.전화번호 
          FROM 전화번호 x, 
               (SELECT   공급자번호, MAX (순번) 순번 
                    FROM 전화번호 
                   WHERE 공급자번호 BETWEEN '1001' AND '1005' 
                GROUP BY 공급자번호) y 
         WHERE x.공급자번호 = y.공급자번호 AND x.순번 = y.순번) b, 
       (SELECT x.공급자번호, x.메일주소 
          FROM 메일주소 x, 
               (SELECT   공급자 번호, MAX (순번) 순번 
                    FROM 메일주소 
                   WHERE 공급자번호 BETWEEN '1001' AND '1005' 
                GROUP BY 공급자번호) y 
         WHERE x.공급자번호 = y.공급자번호 AND x.순번 = y.순번) c 
 WHERE a.공급자번호 = b.공급자번호 
   AND a.공급자번호 = c.공급자번호 
   AND a.공급자번호 BETWEEN '1001' AND '1005'


정규화된 모델이 반정규화되지 않으면 복잡한 SQL문이 쉽게 발생된다. 

  

위와 같이 가장 최근에 변경된 값을 마스터에 위치(컬럼 중복) 반정규화하면 성능향상을 볼 수 있다.

SELECT 공급자명, 전화번호, 메일주소, 위치 
  FROM 공급자 
 WHERE 공급자번호 BETWEEN '1001' AND '1005'


2) 파생컬럼의 생성 : 판매 테이블의 판매금액이나 성적 테이블의 총점, 평균 등이 이에 해당

* 성적

학번 총점 평균 순위
20090101 890 4.0 9
20090101 950 4.3 3


* 공사진행

공사번호 공사일자 공사비 공사비누적
2001-001 2001-01-01 750,000 750,000
2001-001 2001-02-01 800,000 800,000


문제 : 성적 테이블의 순위? 한 학생의 총점이 변경되면 모든 레코드의 순위가 변경될 수 있다.

공사진행 테이블의 공사비누적? 공사이력이 변경 또는 추가될 때 현재 레코드와 그 이후 레코드의 공사비누적 값이 변경되어야 한다.

즉, 전후 레코드간 영향을 미칠 수 있는 속성은 가능하면 피하는 것이 좋다.  

번호 제목 글쓴이 날짜 조회 수
공지 [기술 보고서 다운로드] IDC Technology Spotlight: 모델 기반 데이터 설계를 통한 비즈니스 민첩성 확보 방안 관리자 2015.08.24 8533
공지 ER/Studio Team Server(ER/Studio 용 웹포탈) 설치 및 사용자 가이드 손보라 2014.07.15 39730
공지 Repository 설치 및 사용 가이드 손보라 2014.05.27 50499
공지 ER/Studio Data Architect 설치 및 사용자가이드 관리자2 2012.01.27 52906
21 DB Optimizer 에디션 선택 가이드(에디션 별 차이) file 문효섭 2012.03.28 6203
20 데이터아키텍트가 비즈니스 업무부서와 협업하기 위해 알아야 할 5가지 file 문효섭 2012.03.27 6435
19 ERwin이 아닌 ERStudio를 고객이 선택하는 이유 Top 10 file 문효섭 2012.03.27 7240
18 ERwin에서 ER/Studio로의 마이그레이션 가이드 file 문효섭 2012.03.27 6971
17 ER/Studio 웹포탈에서 데이터모델 조회 시 한글이 깨져보일때 file 문효섭 2012.03.07 6643
16 Rapid SQL 사용자 가이드 file 문효섭 2012.01.27 11571
15 DB ChangeManager XE 퀵가이드, 기능 가이드 file 문효섭 2012.01.27 10045
14 DB Optimizer XE 사용자 가이드 file 문효섭 2012.01.27 9462
13 DB Artisan XE 사용자 가이드 file 문효섭 2012.01.27 8631
12 데이터모델링이란 - 11.인덱스설계 문효섭 2012.01.04 10376
11 데이터모델링이란 - 10.뷰설계 문효섭 2012.01.04 8816
» 데이터모델링이란 - 9.반정규화(역정규화) 문효섭 2012.01.04 15534
9 데이터모델링이란 - 8.관계형 테이블 전환 file 문효섭 2012.01.04 13802
8 데이터모델링이란 - 7.실전데이터모델링 이슈 file 문효섭 2012.01.04 13994
7 데이터모델링이란 - 6.정규화 file 문효섭 2012.01.04 19850
6 데이터모델링이란 - 5.관계(Relational) file 문효섭 2012.01.04 36621
5 데이터모델링이란 - 4.식별자 file 문효섭 2012.01.04 17007
4 데이터모델링이란 - 3.속성(Attribute) file 문효섭 2012.01.04 26638
3 데이터모델링이란 - 2.엔티티(Entiry) file 문효섭 2012.01.04 96081