IT

SQL 반정규화(De-Normalization) 정리

rimicode 2022. 9. 20. 21:35
728x90
반응형
SMALL

반정규화(De-Normalization)

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

 

주의할 점

  • 입력, 수정, 삭제 성능이 저하
  • 데이터 정합성 이슈가 발생

 

반정규화 과정

정규화가 끝난 후 일정한 룰에 따라 진행

 

테이블 반정규화

1. 테이블 병합

JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 유리할 경우

 

1:1 관계

  • 비교적 판단하기 수월
  • 부작용이 적음

 

1:M 관계

  • 1쪽에 해당하는 엔티티의 속성 개수가 많으면 중복 데이터가 많아지므로 적절하지 않음

 

슈퍼 서브 타입

 

2. 테이블 분할

수직 분할 (속성 분할)

  • 엔티티의 일부 속성을 별도의 엔티티로 분할
  • 1:1 관계 성립
  • 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값이 NULL인 경우

 

수평 분할 (인스턴스 분할, 파티셔닝)

  • 엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할
  • 주로 기간 기준을 따라 데이터를 물리적으로 분리

 

3. 테이블 추가

중복 테이블: 데이터의 중복을 감안하더라도 성능상 반드시 필요한 경우

통계 테이블: 주문데이터를 이용하여 월매출 테이블에 통계치를 미리 계산하여 저장

이력 테이블: 상품가격 이력 테이블에서 과거 상품가격에 대한 데이터를 관리

부분 테이블: 회원 대상 메일 발송건이 다량으로 생기는 경우 메일 발숭에 필요한 정보만 생성


컬럼 반정규화

중복 컬럼 추가

  • JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우

 

파생 컬럼 추가

  • 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관
  • 상품의 재고, 프로모션 적용 할인가

 

이력 테이블 컬럼 추가

  • 대량의 이력 테이블을 조회할 때 속도 느려지는 것을 방지
  • 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가
  • 최신 데이터 여부

관계 반정규화

중복 관계 추가

  • JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리한 경우

 

728x90
반응형
LIST