by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

비정규화란?




13.1 비정규란

- 비정규(Denoramlizaiton)는 데이터를 중복시키거나 그룹핑함으로써 데이터 베이스의 성능을 향상시키기 위한 기법이다.

▶비정규화

- 비정규화는 일단 완전하게 정규화된 견고한 모델을 구축하고 나서 수행해야 한다. 그리고 완전한 정규형 모델에 성능을
  유발시키는 요건이 존재할때 선택적으로 비정규형을 채택한다.

- 비정규 과정에는 정규화 과정이 포함된다. 실제로 비정규화를 수행하려면 정규화를 먼저 수행해야한다.

- 비정규형을 사용하는 유일한 목적은조회 성능을 향상시키기 위해서다. (항상 조회 성능이 향상되는 것은 아니다.)

- 저자의 생각으론 사용의 편의함에 때문인듯하다.(의식적이든지 무의식이던지 비정규형이 편하다는 생각이 지배적이다.)

- 비정규화시 중복된 데이터의 정합성이 떨어지므로 정합성을 맞추는 작업이 필요하다.

- 비정규화를 간단하게 설명하면 데이터 중복을 허용하는것이다.

- 데이터의 중복을 허용한다는 의미에서 속성을 중복해서 사용한다는 의미와 엔터티를 중복해서 사용한다는 의미가 포함되어있다.

- 넓은 의미로 추출속성도 중복 속성에 포함되어있다.

▶속성

- 추출속성 : 기존에 존재하는 속성을 가공해서 생성할수있는 속성이다.
* 추출속성을 생성하는 원천속성은 주로 하위(자식) 엔터티의 속성이다. 보통 하위(자식) 엔터티의 많은 인스턴스를 읽어서 SUM , COUNT , MAX등의 처리를 한다.

- 중복속성 : 기존에 존재하는 속성을 복사(COPY) 해서 그대로 가져다 놓는 속성이다.
* 주로 상위 엔터티를 조인(JOIN)하기 싫어서 발생한다. 하지만 이런 중복은 보통 성능에 크게 도움이 되지않는다. 상위(부모) 엔터티와 조인(JOIN)해서
  일어도 IO가 나쁘지 않을때가 많다.

▶ 비정규화 불필요이유

* 정규화된 엔터티의 데이터는 서로 분해되 있으므로 다른 블록(BLOCK)에 저장된다.
  분해된 데이터를 한번에 조회(쿼리)하는 여건이 있다면 당연히 여러 블록에서 데이터를가져와야 하므로 느릴수 있다.

* 조회시간을 줄이는것이 비정규화의 사용 목적이지만 데이터베이스가 조회(쿼리)를 하기 위해서만 사용되지 않을뿐더러
  조회 조건에 따라 정규형이 빠를수도 있어 무저건 비정규하는 옳지않다.

▶ 비정규화 필요한 경우  

* 은행 통장 잔고 같이 추출속성이지만 업무적으로 중요하여 기초속성처럼 쓰는이경우 논리 모델링 초기에서도 도출해야한다.

* 추출속성과 중복속성은 데이터의 정체성(성격)과 무관하다고 생각해서 물리 모델링 단계에서 도출해야한다.  

* 성능에 도움이 될만하다고 판단되고 그렇게 분석했다면 모델링단계와 무관하게 도출되야한다. 

* 추출 속성을 채택하는것은 때에 따라 의미가 있으며 검토의 여지가 있지만 중복 속성의 경우 얻는것에 비해 잃는 경우가 많다.  (데이터 정합성 문제 )

▶ 잘못된 비정규화 

* [그림13.1] 은 중복 데이터를 사용한 릴레이션이다. 고객이  한 번에 세 개의 상품을 주문했을때의 릴레이션으로

주문일자ㆍ주문총액ㆍ주문자속성의 데이타가 중복됐다. 한번만 존재하면 되는데 세번이나 등장한다.

이 릴레이션은 1정규형을 위반했으므로 정규화 대상이다.

                                                        [그림 13.1] 비정규형 릴레이션

- 비정규화를 수행하는 방법

ㆍ정규화의 역작업

ㆍ중복 속성 채택

ㆍ추출 속성 채택

ㆍ 요약 엔터티 채택

-  비정규화 저자의 원칙

ㆍ최우선적으로 고려할 요소는 데이터의 무결성

ㆍ정규형은 필수이며 필요(성능 문제 발생)시 비정규형을 채택

ㆍ중복 속성은 가능한 사용하지 않으면 추출 속성은 채택가능

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.