SQLD

2) 데이터 모델과 SQL

person456 2023. 12. 24. 18:51

※ 정규화, 비정규화는 성능 데이터 모델링 방법

 

** 성능 데이터 모델링의 순서

1) 데이터 모델에 맞게 정규화를 수행한다

2) 데이터베이스의 용량 및 트랜잭션 유형을 파악하여 성능 저하를 일으키는 부분이 없는지 검토한다

3) 용량과 트랜잭션 유형에 맞게 반정규화를 진행한다

4) 성능 향상을 위한 이력모델의 조정, PK/FK 조정, 슈퍼/서브타입 조정 등을 수행한다.

5) 성능 검

 

** 정규화(Normalization)

- 데이터의 정합성(정확성과 일관성을 유지하고 보장하는 능력)을 위해 엔터티를 작은 단위로 분리하는 과정

- 성능이 향상될 수도, 하향될 수도 있음. 일반적으로 입력, 수정, 삭제 성능은 향상됨

- 지나친 정규화는 오히려 성능저하를 일으킬 수 있음(여러번 join을 진행하는 것으로 인해)

 

 

1)제1 정규형

- 모든 속성은 반드시 하나의 원자값을 가져야 한다

- 하나의 속성에 여러 값이 있으면 안됨

 

2)제2 정규형

- 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 함

- 주식별자가 단일식별자가 아닌 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속될 수 있음

 

3)제3 정규형

- 주식별자가 아닌 모든 속성간에는 서로 종속될 수 없음

- 이행적 종속을 제거하는 단계

 

 

** 반정규화(De-Normalization)

- 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정

- 조회성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있고 데이터 정합성 이슈가 발생할 수 있음

- 반정규화 과정은 정규화가 끝난 후 거치게됨

 

1. 테이블 병합

- 업무 프로세스상 join이 많아 테이블을 통합하는 것이 성능측면에서 유리할 떄 고려하는 방법

- 1:M 관계 테이블 병합의 경우, 1쪽에 해당하는 엔터티의 속성 개수가 많으면 중복데이터가 많아지므로 적절하지 못함

2. 테이블 분할

1) 테이블 수직 분할

- 엔터티의 일부 속성을 별도의 엔터티로 분할(1:1관계 성립)함 << 1:1 관계 테이블이 2개 생기는 것

2) 테이블 수평 분할

- 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할(파티셔닝)함

- 주로 기간을 기준으로 분할하지만 다른 속성이 될 수도 있음

3. 테이블 추가

1) 중복테이블 추가

- 데이터의 중복을 감안하더라도 성능상 필요하다고 판단되는 경우 별도의 엔터티를 추가

2) 통계 테이블 추가 : 통계치를 미리 계산하여 저장

3) 이력 테이블 추가 : 과거 이력에 대한 데이터를 관리

4) 부분 테이블 추가 : 필요한 정보만 부분 테이블로 생성

 

 

** 컬럼 반정규화

1) 중복 컬럼 추가

- 컬럼을 추가하는 것이 성능면에서 유리하다고 생각되면 고려

2) 파생 컬럼 추가

- 프로그램 부하가 염려될 때 계산값을 미리 컬럼으로 추가하여 보관하는 방식

3) 이력 테이블 컬럼 추가

- 대량의 이력을 조회할 때 미리 컬럼을 추가해놓아 대기

 

** 트랜잭션(Transaction)

- 데이터를 조작하기 위한 하나의 논리적인 작업 단위