Contents

04_SQLD_제1 절 성능데이터모델링의 개요 & 제2 절 정규화와 성능

# SQLD


제2 장 데이터 모델과 성능


제1 절 성능데이터모델링의 개요

  1. 성능데이터모델링의 정의

    • 데이터 용량이 커질수록 처리 속도 증가가 필요해진다.

    • 성능 저하의 대표적인 원인 3가지

      1. 데이터 모델 구조에 의해 성능 저하
      2. 데이터가 대용량이 됨으로 인해 성능 저하
      3. 인덱스 특성을 고려하지 않고 생성해 성능 저하
    • 즉, 어떤 작업 유형에 따라 성능향상을 도모해야 하는지 목표를 분명하게 해야 정확한 성능향상 모델링을 할 수 있다.

  2. 성능데이터모델링 수행 시점

    • 사전에 할수록 비용이 줄어들며, 특히 분석/설계단계에서 데이터베이스 처리 성능을 향상시킬 수 있는 방법을 고려하면 좋다.

  3. 성능데이터모델링 고려사항

    1. 데이터 모델링을 할 때 정규화를 정확하게 수행한다.

    2. 데이터베이스 용량산정을 수행한다.

    3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

    4. 용량과 트랜잭션의 유형에 따라, 반정규화를 수행한다.

    5. 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.

    6. 성능관점에서 데이터 모델을 검증한다.


제2 절 정규화와 성능

  1. 정규화를 통한 성능 향상 전략

    • 정규화는 기본적으로 데이터에 대한 중복성을 제거하고, 데이터가 관심사별로 처리되는 경우가 많아 대부분 성능을 향상시키는 특징이 있다.

    • 다만, 성능을 판단할 때 (조회)(입력,수정,삭제) 두 부류로 구분하여 고려한다.

      “엔터티가 많은 경우” 다량의 JOIN이 발생하고 그런 경우 보통 (조회) 성능은 하락하고 / (입력,수정,삭제) 성능은 향상된다.


    • 1차 정규화 : table의 cell값은 원자 값을 가져야한다. == 중복된 값을 제거 or 분할. (row, column 모두)

      • 행(row) 정규화

        1차 정규화 전
        student age subject
        보리 1 수학, 과학
        2 수학
        수수 3 수학
        1차 정규화
        student age subject
        보리 1 수학, 과학
        보리 1 과학
        2 수학
        수수 3 수학

      • 열(column) 정규화

    • 2차 정규화 : 테이블의 부분함수적 종속 제거 == 테이블 값이 완전 함수적 종속인지 확인해야 한다.

      *완전 함수적 종속 : 기본키가 아닌 컬럼중에 특정 기본키에만 종속하는 부분적 종속이 없는 상태.

      1차 정규화가 된 table에서 기본키는 (student, subject). 그 이유는 학생과 과목을 알아야 레코드를 구분할 수 있기 때문이다.

      그렇다면 기본키가 아닌 age속성은 student와 subject 두 개의 속성 모두에 종속인지 확인해보면 된다. age속성는 student에만 종속되어있기 때문에 2차 정규화의 조건완전함수적 종속에 위배된다. 즉, age 속성은 student 의 이름만 알아도 찾을 수 있는 속성

      2차 정규화 전
      student age subject
      보리 1 수학, 과학
      보리 1 과학
      2 수학
      수수 3 수학

      2차 정규화

      *학생 테이블

      student age
      보리 1
      2
      수수 3

      *과목 테이블

      student subject
      보리 수학
      보리 과학
      수학
      수수 수학

    • 3차 정규화 : 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 경우

      *이행적 함수 종속 : 기본키를 제외한 다른 속성이 특정 속성을 결정지으면 안된다는 것

      3차 정규화 전
      학생id 학생이름 생년월일 주소

      와 같이 컬럼이 있을 때 “주소“만 알면 “시”, “동”, “구"도 알 수 있다.

      3차 정규화

      *학생 테이블

      학생id 학생이름 생년월일 주소

      *주소 테이블

      주소

      위 테이블 처럼 주소속성으로 구분지어 정규화 한다.

    • 정규화를 한다고 해서 무조건 (조회)성능이 하락하는 것도 아니다. 성능에 대한 이슈는 어떻게 테이블을 구성할 것이며, 어떤 데이블 들이 있는지 등 고려해야하는 사항이 많다. 즉 함수의 종속성(Functional Dependency)에 근거한 정규화 수행이 필요하다.

      함수의 종속성(Functional Dependency) - ex)  2차 정규화

      데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭. 이때 기준값을 결정자(Determinant)라 하고 종속되는 값을 종속자(Dependent)라고 한다.