데이터 모델과 SQL

Normalization

  • 데이터 정합성 (데이터의 정확성과 일관성을 유지하고 보장)을 위해 Entity를 작은 단위로 분리하는 과정
  • 모든 Entity를 무작정 분리하면 안되고 일정한 Rule 존재
  • 데이터의 입력, 수정, 삭제 성능은 향상되나 조회 성능은 떨어질 수 있음

1️⃣ 제1정규형

  • 모든 속성은 반드시 하나의 값만 가져야 함
  • 하나의 속성이 다중값을 가지는 경우 Application 에서 데이터를 꺼내 쓸 때 불필요한 split 사용 -> 공간 낭비

2️⃣ 제2정규형

  • Entity의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 함

3️⃣ 제3정규형

  • 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없음

‼️ 주의사항

  • 지나친 정규화는 오히려 성능 저하를 일으킬 수 있으므로 주의! ("적당히")

De-Normalization

  • 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 Grouping 하는 과정
  • 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있음
  • 정규화와 마찬가지로 일정한 Rule 존재

테이블 반정규화

1️⃣ 테이블 병합

  • 업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려
  • 1:1, 1:M, 슈퍼 서브 타입 테이블 병합 존재

2️⃣ 테이블 분할

  • 테이블 수직 분할 : Entity 일부 속성을 별도의 Entity로 분할 (1:1 관계 성립) -> 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 고려
  • 테이블 수평 분할 : Entity Instance를 특정 기준으로 별도의 Entity로 분할 (Patitioning) -> 파티션 기능을 사용하여 특정 기준에 따라 데이터를 물리적으로 분리

3️⃣ 테이블 추가

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

Column 반정규화

  • 중복 컬럼 추가 : 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려
  • 파생 컬럼 추가 : 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식으로 상품의 재고나 프로모션 적용 할인가 등이 이에 해당
  • 이력 테이블 컬럼 추가 : 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가

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

  • 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려

Transaction

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

출처 : https://data-flair.training/blogs/sql-server-transaction/

NULL

  • 존재하지 않음, 즉 값이 없음을 의미

'Data Engineer > SQLD' 카테고리의 다른 글

SQLD - SQL 활용  (1) 2024.11.18
SQL 기본  (3) 2024.11.13
SQLD - Data modeling  (5) 2024.11.03