[SQLD] 1과목 데이터 모델링의 이해 - 2 2:정규화와 성능


1. 정규화를 통한 성능 향상 전략.

- 정규화를 하는 것은 기본적으로 데이터에 대한 중복성을 제거해 주고 데이터가 관심사 별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징을 가지고 있다.

- 엔터티가 계속 발생되므로 SQL 문장에서 조인이 많이 발생하여 성능저하가 나타나는 경우에는 사례별로 유의하여 반정규화를 적용하는 전략이 필요하다.

 * 데이터를 처리할 때 성능이라고 하면 조회성능과 입력/수정/삭제 성능의 두 분류로 구분된다.

- 정규화를 수행한다느 것은 데이터를 결정하는 결정자에 의해 함수적 종속성을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는것이다.

 * 데이터의 중복성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테ㅣ블의 데이터 용량이 최소화 되는 효과가 있다.

=> 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.

일반적으로 정규화를 수행해야 데이터 처리의 능력(입력/수정/삭제)이 향상되며, 데이터 조회처리 트랜잭션시에 성능저하가 나타날 수 있다.


2.반정규화된 테이블의 성능저하 사례1.

- 2차 정규화를 적용한 테이블에 대해서 조인을 하더라도 PK Unique Index를 이용하면 조인 성능 저하는 미미하게 발생한다.

 * PK가 걸려있는 방향으로 조인이 걸려 Unique Index를 곧바로 찾아서 데이터릴 조회하기 때문에 하나의 테이블에서 조회하는 작업과 비교했을 때 미미하게 성능차이가 날 뿐 사용자에게 큰 영향을 줄만큼 저하되는 일은 없다.


3. 반정규화된 테이블의 성능저하 사례2

- 이 업무는 물건을 매각할 때 매각일자를 정하고 그 일자에 해당하는 매각시간과 매각장소가 결정하는 속성의 성격을 가지고 있다. 즉 매각일자가 결정자가 되고 매각장소가 의존자가 되는 함수적 종송관계가 형성되는 관계이다.

- 대량의 데이터에서 조인 조건이 되는 대상을 찾기 위해 인라인뷰를 사용하기 때문에 성능이 저하된다.

이를 정규화 하려면 복합식별자 중에서 일반속성이 주식별자 속성 중 일부에만 종속관계를 가지고 있으므로 2차정규화의 대상이된다.

- 2차정규화르 적용하여 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이 되었으며 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별 매각내역과도 관계가 연결된다.


4. 반정규화된 테이블의 성능저하 사례3.

- 두 개 이상의 속성으로 나열하여 반정규화한 경우.

- 유형기능분류코드 단위로 데이터처리를 해야하여 인덱스를 생성하려면 9개의 인덱스를 생성하야한다.

- 한테이블에 인덱스가 많아지면, 조회성능은 좋아질 수 있으나 데이터 입력, 수정, 삭제 성능은 저하된다.


5. 함수적 종속성에 근거한 정규화 수행 필요.

- 함수의 종속성은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는것이다.

- 이 때 기준값을 결정자 라고 하고 종속되는 값을 종속자 라고 한다.



 

- 사람이라는 엔터티는 주민등록번호, 이름, 출생지, 호주 라는 속성이 존재한다. 여기에서 이름, 출생지, 호주라는 속성은 주민등록번호 속성에 종속된다.

 즉 주민등록번호가 이름, 출생지, 호주를 함수적으로 결정한다 라고 말할 수 있다.

- 기본적으로 데이터는 속성간의 함수종속성에 근거하여 정규화 되어야 한다.


 1과목 데이터 모델링의 이해 - 2 1:성능 데이터 모델링의 개요

 

 

1.성능 데이터 모델링의 정의

- 데이터 모델링을 할 때 어떤 작업 유형에 따라 성능 향상을 도모해야 하는지 목표를 분명하게 해야 정확한 성능향상 모델링을 할 수 있다.

- 성능 데이터 모델링이란 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블 분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것.

- 성능 데이터 모델링은 정규화를 통해서도 수행할 수 있고 인덱스의 특징을 고려해서 컬럼의 순서를 변형할 수 있다. 대량의 데이터 특성에 따라 정규화된 모델이라도 테이블을 수직 또는 수평 분할하여 적용하는 방법과 논리적인 테이블을 물리적인 테이블로 전환할 때 데이터 처리의 성격에 따라 변환하는 방법도 성능 데이터 모델의 범주에 포함될 수 있다.


2. 성능 데이터 모델링 수행 시점

- 프로젝트 수행에 있어서 사전에 할수록 비용이 적게든다.

- 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무 비용을 최소화 할 수 있는 기회를 갖게된다.

- 만약 어떤 트랜잭션이 해당 비즈니스 처리에 핵심적이고 사용자 업무처리에 있어 중요함을 가지고 있고 성능이 저하되면 안되는 특징을 가지고 있다면 프로젝트 초기에 운영환경에 대비한 테스트 환경을 구현하고 그곳에 트랜잭션을 발생시켜 실제 성능을 테스트 해야한다.


3.성능 데이터 모델링 고려사항.

1) 데이터 모델링을 할 때 정규화를 정확하게 수행해야 한다.

- 정규화된 모델이 주요 관심사별로 분산시키는 효과가 있기 때문에 그 자체로 성능을 향상시키는 효과가 있다.

2) 데이터베이스의 용량산정을 수행한다.

- 용량산정을 수행하면 어떤 엔터티(테이블)에 데이터가 집중되는지 파악을 할 수 있다.

3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

-  CRUD 메트릭스를 보고 파악하는 방법과 시퀀스 다이어그램을 보면 트랜잭션 유형을 파악하기에 용이하다.

4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

-  용량산정과 트랜잭션의 유형 데이터를 근거로 정확하게 테이블 반정규화를 적용한다.

5) 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.

- 대량의 데이터가 처리되는 이력모델에 대해 성능고려를 하고 PK/FK의 순서가 인덱스 특성에 따라 성능에 미치는 영향도가 크기 때문에 PK/FK를 성능이 우수한 순서대로 칼럼의 순서를 조정해야한다.

6) 성능관점에서 데이터 모델을 검증한다.

- 전체적으로 성능에 대한 충분한 고려가 되었는지를 데이터 모델 검토를 통해 다시한번 확인한다.