본문 바로가기
SQL

데이터 모델과 SQL 반정규화

by 피갓자 2025. 3. 3.

데이터 모델과 SQL 반정규화
데이터 모델과 SQL 반정규화

반정규화(De-Normalization)

반정규화란?

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

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

테이블 반정규화

테이블 병합

  • 1:1 관계 테이블 병합 : 1:1 관계 테이블을 통합하여 성능 향상
  • 1:M 관계 테이블 병합 : 1:M 관계 테이블을 통합하여 성능 향상
  • 슈퍼 서브 타입 테이블 병합 : 슈퍼 서브 관계를 통합하여 성능 향상

슈퍼 서브 타입 테이블 병합

  • One to One Type : 1:1 타입으로, 슈퍼 타입과 서브 타입 테이블들을 각각 개별 테이블로 구성
  • Plus Type : 슈퍼 타입 + 서브 타입으로, 각각의 서브 타입에 슈퍼 타입을 합하여 테이블로 구성
  • Single Type : ALL in One 타입으로, 전체를 통합하여 하나의 테이블로 구성

테이블 분할

  • 수직 분할 : 컬럼 단위의 테이블을 디스크 I/O 분산 처리를 위해 1:1로 분리하여 성능 향상. 트랜잭션 처리 유형 파악 선행 필수
  • 수평 분할 : 로우 단위로, 집중적으로 발생하는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능 향상

테이블 추가

  • 중복 테이블 추가 : 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거해 성능 향상
  • 통계 테이블 추가 : SUM, AVG 등을 애플리케이션에서 미리 수행하여 계산해 조회 시 성능 향상
  • 이력 테이블 추가 : 마스터 테이블에 존재하는 레코드를 이력 테이블에 중복시켜 성능 향상
  • 부분 테이블 추가 : 자주 이용하고 집중화된 컬럼을 모아 부분 테이블에 중복하여 디스크 I/O 감소해 성능 향상

컬럼 반정규화

  • 중복 컬럼 추가 : 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려. 예를 들어, 주문 테이블에 고객 주소
  • 파생 컬럼 추가 : 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식. 예를 들어, 상품의 재고나 프로모션 적용 할인가
  • 이력 테이블 컬럼 추가 : 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식. 예를 들어, 최신 데이터 여부

관계 반정규화

  • 중복 관계 추가 : 자주 조인되는 테이블 간의 관계를 중복으로 저장하여, 조인 없이 빠르게 데이터를 조회할 수 있도록 하는 방식
  • 추가 관계 생성 : 자주 사용되는 관계를 직접적으로 추가하여, 효율적인 관계 처리를 가능하게 하는 방식

데이터 모델링의 순서

  • 데이터 모델에 맞게 정규화 수행
  • 데이터베이스 용량 및 트랜잭션 유형 파악
  • 데이터베이스 성능을 고려하여 반정규화 수행
  • PK/FK 등을 조정하여 성능 향상
  • 데이터 모델 성능 검증

트랜잭션(Transaction)

트랜잭션이란?

데이터를 조작하기 위한 하나의 논리적인 작업 단위로, 데이터 모델로 표현할 수 있으며 데이터는 트랜잭션 범위로 묶일 수 있음

NULL

NULL이란?

NULL은 존재하지 않음. 즉 값이 없음을 의미

'SQL' 카테고리의 다른 글

SQL 기본 함수  (0) 2025.03.05
SQL 기본 RDB와 SELECT 문  (0) 2025.03.04
데이터 모델과 SQL 정규화  (0) 2025.03.02
데이터 모델링의 이해 관계와 식별자  (0) 2025.03.01
데이터 모델링의 이해 엔티티와 속성  (0) 2025.02.28