본문 바로가기
소프트웨어공학/SQLD

SQLD 데이터 모델링의 이해 , 데이터 모델과 성능 오답노트

by javapp 자바앱 2023. 9. 3.
728x90

 

과목1-1. 데이터 모델링의 이해

 

모델링

모델링은 현실세계에 대해서 표현하는 것

  • 모델링은 추상화, 단순화, 정확화

 

데이터모델링

  • 데이터 관점 업무 분석 기법
  • 약속된 표기법
  • 데이터베이스 구축 위한 분석 설계의 과정

 

데이터모델링 유의점

중복

  • 중복성 최소화

비유연성

  • 데이터 정의를 데이터의 사용 프로세스와 분리

비일관성

  • 프로그램과 테이블간의 연계성 낮추기
  • 데이터 일관성

 

데이터모델링

  • 개념적: 추상화 과정 높음
  • 논리적: Key, 속성 등
  • 물리적

 

스키마구조

  • 외부스키마
  • 개념스키마: 모든사용자 - 통합적 표현
  • 내부스키마

 

엔티티

  • 두 개 이상의 인스턴스의 집합 (두 개 이상의 속성)
  • 한 개의 속성은 한 개의 속성값
  • 업무 프로세스에 의해 이용

 

속성

  • 기본 속성
  • 설계 속성 ( 코드성 속성 )
  • 파생 속성 ( 계산된 값 )

도메인: 속성이 가질 수 있는 값의 범위

 

명칭 부여

  • 해당 업무 사용하는 이름
  • 서술식 X
  • 약어 X
  • 유일성 확보

 

관계

  • 존재, 행위 구분하지 않고 단일화된 표기법
  • 연관관계와 의존관계가 있고, 실선과 점선의 표긱법으로 다르게 표현
  • 표기법
    • 관계명
    • 관계차수 : 1:1, ..
    • 관계선택사양 : 필수관계, 선택관계
  • 엔티티 사이 관계
    • 연관규칙
    • 정보의 조합
    • 관계연결 대한 규칙 서술되어 있는가?
    • 관계연결 가능하게 하는 동사 있는가?

 

식별자

  • 손자엔티티까지 계속 흘려보낼 수 있음
  • 부모, 자식엔티티가 같이 소멸

식별자

비식별자

  • 부모엔티티에 참조값이 없어도 자식엔티티의 인스턴스가 생성될 수 있는 경우

 


 

 

과목1-2. 데이터 모델과 성능

 

성능을 고려한 데이터 모델링 순서

  • 정규화
  • 데이터 베이스 용량산정
  • 트랜잭션의 유형 파악
  • 용량과 트랜잭션의 유형에 따라 반정규화
  • 이력모델, PK/FK, 슈퍼타입/서브타입 조정
  • 성능관점에서 데이터 모델 검증

 

정규화

1차 정규화

속성이 원자값(Atomic Value)을 갖도록 함. "기본키" 보유, 같은 성격과 내용의 속성이 중복

  • 중복 값은 제거
  • 새로운 테이블 추가 (PK 추가)
  • (기존 테이블과) 1:M 관계 형성

 

출처:  https://www.youtube.com/watch?v=92RsduytypU&list=PLlCujDgOz8x4JN2wHKbmlM8bFan-WaKj5&index=8

 

 

함수종속성(FD)

데이터들이 어떠한 기준에 의해서 종속되는 것을 의미.

  • 완전 함수적 종속

기본키에 대해서 그 속성이 완전히 종속될 때

 

  • 부분 함수적 종속

기본키 전체가 아니라, 일부에 대해 종속될 때

 

 

2차 정규화

 

 

3차 정규화

이전적 함수 종속 관계

A → B, B → C가 성립할 때 A → C

 

반정규화

데이터 조회할

  • 디스크 I/O량이 많아서 성능이 저하
  • 경로가 너무 멀어 조인으로 인한 성능저하 예상
  • 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상

 

대상조사

  • 범위처리빈도수
  • 대량의 범위 처리
  • 통계성 프로세스
  • 테이블 조인 개수

 

다른 방법유도 검토

  • 뷰View 테이블
    • 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
  • 클러스터링 적용, 인덱스 조정
    • 대량의 데이터처리나 부분처리에 의해 성능이 저하
    • 클러스터: 조인이나 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법
  • 파티셔닝
    • 대량의 데이터는 Primary Key 성격에 따라 부분적인 테이블로 분리
  • 응용 애플리케이션
    • 코드 로직을 통해 성능향상

 

반정규화 적용

  • 테이블
  • 속성
  • 관계

 

SELECT A.주문번호, SUM(C.단가)

..

주문 엔티티단가를 합한 계산된 칼럼 추가

 

공급자별로 최근 변경된 속성들을 조회할 때, 공급자 테이블에 반정규화로 갖고 있는 경우에 비해 조회 성능 저하 (많은 조인)

최신여부 속성 추가

공급자테이블로 통합할 경우 용량이 너무 커지는 단점

 

 

 

 

 

 

 

칼럼수가 많은 테이블

로우체이닝

로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태가 로우체이닝(Row Chaining) 현상이다. 

 

  데이터가 물리적으로 저장되는 디스크 상에 넓게 분포할 가능성이 커지게 되어 디스크 I/O가 대량으로 발생 → 성능 저하

 

  트랜잭션이 접근하는 칼럼유형을 분석, 자주 접근하는 칼럼들과 상대적으로 접근 빈도가 낮은 칼럼 구분 → 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 성능 향상

 

  NULL 상태로 존재하게 되는 칼럼들이 많이 나타나는 경우, 자주 사용되는 칼럼들이나 현시점에서 주로 사용되는 칼럼들을 한데 모으고, 사용빈도가 낮은 칼럼들이나 미래 시점에 사용될 것으로 예상되는 나머지 칼럼들을 한데 모아 별도의 1:1 관계 엔티티로 분리하는 등의 데이터모델 설계 수정 고려

 

 

PK 순서를 결정하는 기준 

'=' 로 들어온 조건에 해당하는 칼럼이 인덱스의 가장 앞쪽에 위치할 때 

인덱스의 이용 효율성이 가장 높다.

그래서 PK 순서를 사무소코드 거래일자 출급기번호 명세표번호로 바꾸고 인덱스 생성하는 것이 성능에 유리

 

 

 

FK Constraints

* FK 제약조건은 데이터 모델 상 표현된 논리적 관계에 따라 관련 인스턴스 간에 일관성을 보장하기 위해 설계된 제약조건을 구현할 수 있도록 DBMS가 제공해주는 하나의 '지원 기능'

 

FK 여부 상관없이 조인 성능 향상 위해 인덱스 생성해주는 것이 좋다.

-> batches 테이블의 courseid에 인덱스

 

 

 

댓글