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 8230
공지 ER/Studio Team Server(ER/Studio 용 웹포탈) 설치 및 사용자 가이드 손보라 2014.07.15 39437
공지 Repository 설치 및 사용 가이드 손보라 2014.05.27 50160
공지 ER/Studio Data Architect 설치 및 사용자가이드 관리자2 2012.01.27 52570
142 [기술백서] ER/Studio를 활용한 데이터 표준화 시스템 구축방안 관리자 2014.11.12 1138
141 DB Power Studio #4-2. DBArtisan 둘러보기(데이터베이스 보안 관리) 손보라 2014.08.20 1154
140 DB Power Studio #4-5. DBArtisan 둘러보기(데이터 관리) 손보라 2014.08.21 1161
139 DB Power Studio #4-6. DBArtisan 둘러보기(데이터베이스 성능 관리) 손보라 2014.08.22 1171
138 DB Power Studio #4-3. DBArtisan 둘러보기(데이터베이스 공간 관리) 손보라 2014.08.21 1181
137 DB Power Studio #4-7. DBArtisan 둘러보기(메뉴 기능) 손보라 2014.08.22 1195
136 ER/Studio 기본 가이드 #6. ER/Studio Data Architect로 메타데이터 import & export하기 손보라 2014.08.07 1243
135 DB Power Studio #4-4. DBArtisan 둘러보기(SQL 관리) 손보라 2014.08.21 1255
134 ER/Studio 기본 가이드 #5. ER/Studio Data Architect의 데이터 딕셔너리 사용하기 손보라 2014.08.06 1278
133 DB Power Studio #4-1. DBArtisan 둘러보기(오브젝트 및 스키마 관리) 손보라 2014.08.20 1299
132 ER/Studio 기본 가이드 #4. ER/Studio Data Architect로 모델 간 비교 및 차이점 반영하기 손보라 2014.08.05 1303
131 DB Power Studio #1. DB Optimizer 둘러보기 손보라 2014.08.09 1314
130 DB Power Studio #3-2. Rapid SQL 둘러보기(비주얼 쿼리 빌더) 손보라 2014.08.19 1319
129 [기술백서] ERwin이 아닌 ER/Studio를 선택하는 10가지 이유 관리자 2014.11.12 1321
128 [기술백서] 데이터아키텍트가 비즈니스 업무 부서와 협업하기 위해 알아야 할 다섯가지 관리자 2014.09.26 1325
127 ER/Studio 기본 가이드 #2. ER/Studio Data Architect로 논리/물리 모델링 시작하기 손보라 2014.08.01 1326
126 ER/Studio 기본 가이드 #3. ER/Studio Data Architect로 기존 데이터베이스 문서화하기 손보라 2014.08.04 1338
125 ER/Studio 기본 가이드 #1. ER/Studio Data Architect로 데이터모델링 시작하기 손보라 2014.08.01 1342
124 DB Power Studio #3-1. Rapid SQL 둘러보기(SQL 작성) 손보라 2014.08.18 1358
123 [온라인 세미나 발표자료] 스마트한 DBMS관리: DB PowerStudio 따라잡기, LIVE! 관리자 2014.09.25 1377