카테고리 없음

[SQLD] 정규화와 반정규화

서리★ 2024. 5. 14. 17:47

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

- 조회 성능은 처리 조건에 따라 향상될 수도 있고 저하될 수도 있음

- 입력, 수정, 삭제 성능은 일반적으로 향상

- 논리 데이터 모델 상세화 과정(개념 데이터 모델이 아님)

 

제1정규형 : 모든 속성은 반드시 하나의 값만 가진다. 유사한 속성이 반복되지 않도록 한다.

- 하나의 속성이 여러 개의 값을 갖는 경우 수행

- 유사한 속성이 반복되는 경우 수행

제2정규형 : 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다.

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

- 부분 함수 종속 제거가 목표

-

제3정규형 : 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

- 제3정규형(3NF)은 이행적 함수 종속을 제거가 목표

-기본키를 제외한 일반속성 간에 종속성이 발생할 경우 수행

-기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수종속일 경우 수행

-이행적 함수 종속: A → B, B → C일 때, A → C가 성립하는 경우를 의미하며, 여기서 B는 후보 키가 아니어야 합니다.

-sqld p48 참조

 

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

- 조회 성능 향상 

- 입력, 수정, 삭제 성능은 저하

- 데이터 정합성 이슈 발생 가능성 (데이터 무결성이 저해될 수 있음)

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

 

반정규화를 적용하는 이유

- 데이터 조회 속도 저하가 예상되는 경우

- 컬럼의 합계 및 평균 등을 계산하여 읽을 때 성능 저하가 예상되는 경우

- 여러 개의 테이블 조인으로 성능 저하가 예상되는 경우

- 정규화의 함수적 종속 관계는 위반하지 않지만 데이터의 중복성을 증가시켜

데이터 조회의 성능을 향상시켜야 하는 경우

 

반정규화 기법

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

- 테이블 분할 : 테이블 수직 분할 (속성 분할), 테이블 수평 분할 (인스턴스 분할, 파티셔닝)

- 테이블 추가 : 중복, 통계, 이력, 부분 테이블 추가