반정규화

0

정보처리기사

목록 보기
41/100

반정규화 (Denormalization)


1. 반정규화의 정의

  • 반정규화는 성능 향상 및 효율성을 위해 정규화된 데이터 모델을 의도적으로 변경하는 과정.
  • 정규화 원칙을 위배하여 데이터를 통합하거나 중복시키고, 필요시 분리하는 작업.
  • 목적: 데이터베이스의 성능 향상 및 운영 편의성 증대.

2. 반정규화의 필요성

  • 정규화 후의 문제점:
    • 지나치게 분리된 테이블로 인해 조인 연산이 과도하게 발생.
    • 데이터 검색 시 성능 저하.
    • 실시간 시스템에서 처리 속도가 느려질 가능성.
  • 반정규화의 목적:
    • 시스템 성능 향상.
    • 데이터베이스 운영의 편리성.
    • 데이터 접근 경로 단축.

3. 반정규화의 특징

  • 이점:
    • 성능 향상.
    • 자주 사용하는 데이터를 한곳에 통합하여 조회 속도 증가.
    • 조인 연산 감소.
  • 단점:
    • 데이터 중복 발생.
    • 데이터의 일관성 및 무결성 저하 가능성.
    • 유지보수 복잡성 증가.

4. 반정규화의 적용 방법

1. 테이블 통합

  • 정의: 자주 조인되는 두 개 이상의 테이블을 하나로 통합.
  • 적용 상황:
    • 두 테이블의 데이터를 항상 함께 조회.
    • 조인 연산이 빈번히 발생.
  • 예제:
    • 정규화된 테이블:
      학생 테이블: 학번, 이름
      연락처 테이블: 학번, 전화번호
    • 반정규화:
      학생 테이블: 학번, 이름, 전화번호

2. 테이블 분할

  • 정의: 하나의 테이블을 여러 개로 분리.
  • 분류:
    • 수직 분할: 테이블의 속성(컬럼)을 기준으로 분리.
      • 적용 상황: 속성이 많거나 자주 갱신되는 속성과 그렇지 않은 속성을 분리.
      • 예제:
        • 원본 테이블:
          학생(학번, 이름, 생년월일, 학과, 주소)
        • 수직 분할:
          학생_기본정보(학번, 이름, 생년월일)
          학생_학과정보(학번, 학과, 주소)
    • 수평 분할: 테이블의 데이터를 행(레코드) 기준으로 분리.
      • 적용 상황: 데이터가 많아 성능 저하가 우려되거나 특정 조건별로 데이터가 분리 가능할 때.
      • 예제:
        • 원본 테이블:
          학생(학번, 이름, 학과, 학년)
        • 수평 분할:
          1학년_학생(학번, 이름, 학과, 학년=1)
          2학년_학생(학번, 이름, 학과, 학년=2)

3. 중복 테이블 추가

  • 정의: 자주 사용하는 데이터를 추출하여 별도의 테이블로 생성.
  • 적용 상황:
    • 데이터 조회 성능을 높이기 위해 특정 데이터를 중복 저장.
  • 예제:
    • 기존 테이블:
      주문(주문번호, 고객ID, 상품ID, 주문날짜)
    • 중복 테이블 추가:
      주문요약(주문번호, 고객ID, 주문날짜)

4. 중복 속성 추가

  • 정의: 자주 사용하는 속성을 원래 테이블에 추가.
  • 적용 상황:
    • 특정 속성의 조회가 빈번히 발생.
    • 조인 연산을 줄이기 위해 속성을 테이블에 중복 저장.
  • 예제:
    • 기존 테이블:
      학생(학번, 이름)
      학과(학과ID, 학과명)
    • 중복 속성 추가:
      학생(학번, 이름, 학과명)

5. 반정규화의 적용 시 고려사항

  • 정규화된 상태에서 시작: 반드시 정규화된 모델에서 출발해야 함.
  • 성능 평가 후 적용: 데이터베이스의 성능 평가 결과를 바탕으로 반정규화 여부를 결정.
  • 일관성과 무결성 유지 방안 마련: 반정규화로 인한 데이터 일관성 문제를 해결하기 위해 트리거나 프로그램 로직 추가.
  • 적정선 유지: 과도한 반정규화는 오히려 성능 저하와 관리 비용 증가를 초래할 수 있음.

6. 요약

  1. 반정규화는 성능과 효율성을 위해 정규화된 데이터 모델을 의도적으로 변경하는 과정.
  2. 테이블 통합, 테이블 분할(수직/수평), 중복 테이블 추가, 중복 속성 추가의 4가지 방법이 있음.
  3. 이점:
    • 성능 향상, 조회 속도 증가.
  4. 단점:
    • 데이터 중복 증가, 무결성 및 일관성 저하 가능성.
  5. 적절한 성능 평가와 필요에 따라 반정규화를 적용해야 함.

핵심: 반정규화는 무조건 정규화를 위배하는 행위가 아니라, 성능과 효율성을 최적화하기 위한 전략적 선택입니다.

0개의 댓글