STUDY/SQL

[SQL] 1. 데이터 모델링의 이해 - Chapter 2. 데이터 모델과 SQL

JUNGY00N 2023. 3. 4. 23:51

2023 유선배 SQL개발자(SQLD) 과외노트 를 읽고 내용을 정리한 글입니다. 

 

2023 유선배 SQL개발자(SQLD) 과외노트 - YES24

SQL Server 분야 베스트 1위!핵심만 쏙쏙 담은 알찬 수험서! SD에듀가 가장 효율적·효과적인 합격의 길을 제안합니다.유튜브 선생님에게 배우는 유·선·배, 『유선배 SQL개발자 과외노트』와 함께 20

www.yes24.com


성능 데이터 모델링

성능 데이터 모델링 

: 데이터베이스의 성능을 향상시키기 위해 설계 단계부터 성능과 관련된 사항들이 모델링에 반영될 수 있도록 하는 것 

  • 정규화
  • 반정규화
  • 테이블 통합
  • 테이블 분할 

성능 데이터 모델링 순서

  1. 데이터 모델에 맞게 정규화를 수행한다.
  2. 데이터베이스의 용량 및 트랜잭션 유형을 파악하여 성능 저하를 일으키는 부분이 없는지 검토한다.
  3. 용량과 트랜잭션 유형에 맞게 반정규화를 수행한다.
  4. 성능 향상을 위한 이력모델의 조정, PK/FK 조정, 슈퍼/서브타입 조정 등을 수행한다.
  5. 데이터 모델의 성능을 검증한다. 

정규화(Normaalization)

정규화

: 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔티티를 작은 단위로 분리하는 과정

  • 정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상되는 경우도 있고 저하되는 경우도 있지만 입력, 수정, 삭제 성능은 일반적으로 향상된다고 볼 수 있다. 
  • 그렇다고 모든 엔티티를 무작정 분리하면 안되기 때문에 정규화를 하기 위한 일정한 룰이 존재한다. 

제 1정규형

  • 모든 속성은 반드시 하나의 값만 가져야 한다. 
  • 유사한 속성이 반복되는 경우도 1차 정규화 대상이 된다. 
  • 하나의 속성이 다중값을 가지는 경우 어플리케이션에서 데이터를 꺼내 쓸 때 불필요한 Split을 사용해야 하는 식의 번거로움이 생길 수 있다. 
  • 원자값이 아닌 메인 분해

제 2정규형

  • 엔티티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. 
  • 주식별자가 단일 식별자가 아닌 복합식별자일 경우 일반속성이 주식별자의 일부에만 종속될 경우 문제점이 발생할 수 있다.  
  • 분 함수 종속 제거

제 3정규형

  • 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다. 
  • 행 함수 종속 제거

반정규화(De-Normalization)

반정규화

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

  • 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있다
  • 반정규화의 과정은 정규화가 끝난 후 거치게 되며 정규화와 마찬가지로 일정한 룰이 존재한다. 
  • 테이블 반정규화
  • 컬럼 반정규화
  • 관계 반정규화 (중복 관계 추가)

테이블 반정규화

테이블 병합 

: 업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려한다. 

  • 1:1 관계 테이블 병합
  • 1:M 관계 테이블 병합
    • 1쪽에 해당하는 엔티티의 속성 개수가 많으면 병합했을 경우 중복 데이터가 많아지므로 테이블 병합에 적절하지 못하다. 
  • 슈퍼 서브 타입 테이블 병합
    : 공통 속성과 개별 속성을 별도로 관리
    - 공통 속성을 조회하는 빈도수가 개별 속성을 조회하는 빈도수보다 높을 경우

테이블 분할

  • 테이블 수직 분할 (속성 분학)
    : 엔티티의 일부 속성을 별도의 엔티티로 분할 (1:1 관계 성립)
  • 테이블 수평 분할 (인스턴스 분할, 파티셔닝)
    : 엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할 (파티셔닝)

테이블 추가

  • 중복 테이블 추가
    : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔티티를 추가한다.
  • 통계 테이블 추가
  • 이력 테이블 추가
  • 부분 테이블 추가 

컬럼 반정규화 

중복 컬럼 추가

: 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려한다.

파생 컬럼 추가

: 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식

- 상품의 재고, 프로모션 적용 할인가 등

이력 테이블 컬럼 추가

: 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식

- 최신 데이터 여부 등 

 

관계 반정규화 (중복관계 추가)

: 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다. 
- 데이터 무결성을 깨뜨릴 위험성 없이 데이터 처리의 성능을 향상시킬 수 있다. 


트랜잭션(Transaction)

트랜잭션 

: 데이터를 조작하기 위한 하나의 논리적인 작업 단위 


NULL

NULL

: 존재하지 않음, 값이 없음

  • 가로 연산 : NULL이 포함되어 있으면 결과값은 NULL이 된다.
  • 세로 연산 : 다른 인스턴스의 데이터와 연산할 때는 NULL값을 제외한다. 
  • NULL이 포함된 집계 함수는 NULL을 제외하고서 계산된다.
  • WHERE COL IS NULL 조건은 COL 값이 NULL인 행을 반환한다.  
  • WHERE COL = NULL 조건은 결과가 항상 false이므로 아무 행도 반환하지 않는다.