[SQLD 자격증] 1과목 | 성능 데이터 모델링, 정규화, 반정규화 설명 & 문제풀이

    728x90
    반응형

    성능 데이터 모델링

    • 데이터베이스의 성능 향상을 위해 분석/설계 단계부터 성능과 관련된 사항이 데이터 모델링에 반영되도록 하는 것
    • 데이터의 증가가 빠를수록 성능 개선 비용이 증가함
    • 설계단계부터 고려할 경우 비용 최소화가 가능함

     

    성능 데이터 모델링 순서

    1. 데이터 모델링 시 정규화를 정확히 수행함
    2. 데이터베이스 용량을 산정함
    3. 데이터베이스에 발생하는 트랜잭션 유형을 파악함
    4. 용량과 트랜잭션의 유형에 따라 반정규화를 수행함
    5. 이력모델, PK/FK 조정, 슈퍼타입/서브타입 조정을 수행함

     

    정규화 vs 반정규화

    • 정규화
      • 데이터를 분해하는 과정
      • 데이터의 중복을 최소화하고, 유연성을 가지며, 변경을 최소화하고, 데이터가 일관될 수 있도록 하는 방법이다.
      • 제 1~5정규화가 있지만, 주로 1~3 정규화까지 수행함
    • 반정규화
      • 정규화를 했을 때 성능이 더욱 악화될 경우, 데이터의 중복을 허용하고 조인을 줄여서 성능을 향상시키는 방법이다.

     

    정규화

    • 제 1정규화
      • 기본키를 설정하는 과정
      • 속성의 원자성과 엔터티의 유일성을 확보함
      • 모든 속성이 식별자에 종속되어야 함
      • X가 변하면 Y가 변한다 (Y는 X에 함수적으로 종속됨)
      • 식별자가 변하면 속성이 변함
      • 속성값의 중복 여부 체크! (단일 → 복합 순)

    정규화 전
    1차 정규화를 통해 선정된 기본키 / 1차 정규화를 통해 도출된 1차 정규형

     

    • 제 2정규화
      • 기본키가 2개 이상으로 구성될 경우 수행함
      • 모든 속성(지역명, 점주명, 메뉴명, 출시일, 가격)이 식별자에 종속해야하며, 아니면 분해해야 함
      • 부분함수 종속성을 분해함
      • 주식별자 중 일부로부터 독립하여 1:M의 관계로 재설계

    • X → Y (X가 변하면 Y가 변한다 (Y는 X에 함수적으로 종속됨)
    • 함수적 종속성 여전히 존재함 (부분함수 종속성)
    • {매장코드, 메뉴코드} → {가격}
      {매장코드} → {지역명, 점주명}
      {메뉴코드} → {메뉴명, 출시일}

    정규화 완료

     

    정규화 전후 스키마 비교

     

    • 제 3정규화
      • 기본키 외에 컬럼간 종속성을 제거함
      • ‘이행 함수 종속성’ 제거

     

    반정규화

    • 정규화를 했을 때 성능이 더욱 악화될 경우, 데이터의 중복을 허용하고 조인을 줄여서 성능을 향상시키는 방법이다.

     

    • 성능 데이터 모델링 순서
      1. 데이터 모델링 시 정규화를 정확히 수행함
      2. 데이터베이스 용량을 산정함
      3. 데이터베이스에 발생하는 트랜잭션 유형을 파악함
      4. 용량과 트랜잭션의 유형에 따라 반정규화를 수행함
      5. 이력모델, PK/FK 조정, 슈퍼타입/서브타입 조정을 수행함

     

    • 반정규화 기법 (칼럼 & 테이블)
      • 칼럼추가 - 중복칼럼 추가, 파생칼럼 추가(ex. 계산된 컬럼), 이력테이블 칼럼 추가, PK에 의한 칼럼 추가 등
      • ex) 중복칼럼 추가
        A테이블에 있는 a,b정보를 조회할 때 C테이블의 c 정보와 D테이블의 d정보를 늘 함께 조회한다면?
        >>> 과도한 조인을 줄이기 위해 A테이블에 c,d 컬럼을 추가하여 조회 성능을 향상시킨다.
      • ex) 파생칼럼 추가
        여러 테이블을 JOIN해서 얻을 수 있는 정보값이 자주 사용된다면?
        >>> 미리 계산된 컬럼을 추가해둔다. ex) SUM(단가)
        • 문제 TIP ! 쿼리 or 주석 내용에 해결방안이 있는 경우가 많음 
      • 테이블 병합 / 테이블 분할 / 테이블 추가
      • 테이블 병합 : 1:1 관계 테이블 병합 , 1:M 관계 테이블 병합, 슈퍼/서브타입 테이블 병합
        • 슈퍼타입{회원} ⇔ 서브타입 {개인회원, 법인회원}
      • 테이블 분할
        • 수직분할 : [a,b,c,d] 컬럼 → [a,b] [c,d] 로 분리하여 보관
        • 수평분할 : 하나의 테이블에 있는 값을 기준으로 테이블 분할 ( Partition 기법 )
          ex. 매일 쌓이는 고객별 위치 정보를 한 테이블에 넣어두면 엑세스 범위가 넓음 → 연도별로 쪼개서 저장
      • - 테이블 추가 : 중복테이블, 통계테이블, 이력테이블, 부분테이블

     

    기타 성능 관련 개념 정리

    • 한 테이블에 너무 많은 칼럼이 존재하여 로우체이닝이 발생하는 등 조회성능 저하가 발생한다면
      → 트랜잭션이 접근하는 칼럼 유형을 분석해 테이블을 분리하면, 디스크 I/O가 줄어서 성능이 향상될 수 있다.

    • WHERE문을 통해 조회를 할 때 자주 사용되는 PK순으로 순서를 변경하고 인덱스를 생성하는 것이 성능에 유리할 수 있다.
      ex) WHERE 지역명 = ‘서울’ AND 출시일 BETWEEN ‘20220101’ AND ‘20220331’
      → (1) 상수값으로 조회하는 PK (2) 범위로 조회하는 PK 순
      → 앞쪽에 위치한 속성의 값이 가급적 ‘=’, 최소한 범위를 나타내는 ‘BETWEEN’, ‘<’’>’ 가 들어와야 인덱스를 사용할 수 있다.
    • 트랜잭션의 통합/개별 처리 케이스
      - 데이터 전체를 대상으로 일괄 처리하는데 테이블이 분리되어 개별로 관리하면 오히려 연산량을 늘릴 수 있고
      - 데이터를 개별로 처리하는데 테이블은 하나로 통합되어 관리하면 불필요하게 많은 데이터의 집적으로 성능이 저하될 수있음
      → 트랜잭션을 통합하여 처리하면 통합해두는 것이 성능에 좋고, 개별로 처리하면 개별로 유지하는 것이 좋다.

     


     

    SQLD 목차 바로가기

    SQLD 과목 목차 링크
    1과목 
    데이터 모델링의 이해

    (10문항 출제)
    데이터 모델링의 이해 데이터모델링의 이해, 엔터티, 속성
    관계, 식별자
    데이터 모델과 성능 성능 데이터 모델링, 정규화, 반정규화 설명 & 문제풀이
    SQLD 2과목
    SQL 기본및 활용

    (40문항 출제)
    SQL 기본 관계형 데이터베이스 개요 및 DCL(GRANT, REVOKE) 설명 & 문제풀이
    DDL(CREAT, ALTER, DROP, RENAME, TRUNCATE) 설명 & 문제풀이
    DML(INSERT, UPDATE, DELETE) 설명 & 문제풀이
    TCL(ROLLBACK, SAVEPOINT, COMMIT) 설명 & 문제풀이
    DML(SLELECT) 기본구조 설명 & 문제풀이
    DML(SELECT) 함수(문자형, 숫자형, 날짜형, 형변환) 설명 & 문제풀이
    DML(SELECT) DECODE, CASE WHEN, ORDER BY 설명 & 문제풀이
    WHERE 절 연산자, 문자열 연산자, 임시테이블, VIEW 설명 & 문제풀이
    NULL 함수, GROUP BY, HAVING, ROWNUM & ROWID 설명 & 문제풀이
    SQL 활용 GROUP 함수 설명 & 문제풀이
    JOIN, UNION, MINUS, 서브쿼리 설명 & 문제풀이
    계층형 조회 설명 & 문제풀이
    WINDOW 함수 전체 설명 & 문제풀이
    SQL 최적화 기본원리 테이블 파티션, 옵티마이저, 인덱스 설명 & 문제풀이
    옵티마이저 JOIN, PL-SQL, 분산 데이터베이스 설명 & 문제풀이

     

    728x90
    반응형

    댓글