[Database] 반정규화

정현명·2022년 3월 10일
0

Database

목록 보기
6/17
post-thumbnail

7. 반정규화


반정규화란?

  • 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑
  • 조회성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있음
  • 데이터 정합성이슈가 발생할 수 있음

테이블 반정규화

  • 테이블 병합
    • 업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우
    • 1:1 , 1:M 가능
    • 1:M관계 테이블 병합의 경우 1쪽에 해당하는 엔터티의 속성 개수가 많으면 병합했을 때 중복 데이터가 많아지기 때문에 적절하지 않음
  • 테이블 분할
    • 테이블 수직 분할
      • 엔터티의 일부 속성을 별도의 엔터티로 분할(1:1 관계 성립)
      • 자주 사용하는 속성이 아니거나 대부분의 인스턴스 속성값이 NULL일 때 고려
    • 테이블 수평 분할
      • 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할
  • 테이블 추가
    • 중복 테이블 추가
      • 데이터의 중복을 감안하더라도 성능상 반드시 필요할 경우 별도의 엔터티 추가
    • 통계 테이블 추가
      • 자주 사용할 통계치를 미리 계산하여 저장
    • 이력 테이블 추가
      • 과거의 데이터를 관리
    • 부분 테이블 추가
      • 필요한 속성만 부분 테이블로 작성하여 사용

컬럼 반정규화

  • 중복 컬럼 추가
    • 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 유리할 때 고려
  • 파생 컬럼 추가
    • 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관
  • 이력 테이블 컬럼추가
    • 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가

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

  • 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 유리할 때 고려
profile
꾸준함, 책임감

0개의 댓글