본문 바로가기
[스파르타코딩클럽]데이터분석 과정/LEARN

SQLD 공부 (2) 데이터 모델과 SQL

by doo_ 2024. 2. 21.

1. 정규화(Normalization)

> 데이터 정합성(정확성과 일관성)을 위해 엔터티를 작은 단위로 분리하는 과정이다.

- 단, 정규화를 했다고 조회성능이 향상되는 건 아니다. 처리조건에 따라 저하되는 경우가 있다.

1) 제 1정규형

> 모든 속성은 반드시 하나의 값만 가져야 한다. 유사한 속성이 반복되는 경우도 해당한다.

2) 제 2정규형

> 엔터티의 모든 일반속성은 반드시 모든 주식별자(딘일 or 복합)에 종속되어야 한다.

3) 제 3정규형

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

4) 주의사항

> 적절한 정규화는 성능상 이롭지만, 지나친 정규화는 오히려 성능 저하를 일으킬 수 있다.

ex. 여러 번의 JOIN을 해야 하는 경우에 오히려 JOIN한 상태로 두는 것이 좋다.

ex. 관계를 생성하여 성능 개선

 

2. 반정규화(De-Normalization)

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

- 주의해야 할 점은 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있다.

> 반정규화 과정은 정규화가 끝난 후 조회 성능에 따라 진행한다.

1) 테이블 반정규화

a. 테이블 병합 - 1:1 관계 테이블 병합 / 1:M 관계 테이블 병합 / 슈퍼 서브 타입 테이블 병합

> 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.

b. 테이블 분할 

- 테이블 수직 분할(속성 분할) : 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 고려

- 테이블 수평 분할(인스턴스 분할, 파티셔닝) : 인스턴스를 특정 기준으로 별도의 엔터티로 분할(ex. 연도별, 세대별 등)

c. 테이블 추가 - 중복 / 통계 / 이력 / 부분 테이블 추가

2) 칼럼 반정규화

a. 중복 칼럼 추가

> 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.

b. 파생 칼럼 추가

> 프로세스 수행 시 부하가 염려되는 계산값은 미리 컬럼으로 추가하여 방지한다. 예를 들어 프로모션 적용 할인가가 있다.

c. 이력 테이블 칼럼 추가

>대량의 이력 테이블을 조회할 때 조회 기준이 될 것으로 판단되는 칼럼을 미리 추가하는 방식이다.

3) 관계 반정규화(중복관계 추가)

> 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.

 

3. 트랜잭션(Transaction)

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

4. NULL

> 데이터가 입력되지 않은 상태로 값이 0일수도 0이 아닐수도 있다. 그래서 NULL은 연산을 수행하지 않는다.