[69일차]dbt - Database Normalization

김준석·2024년 3월 1일

dbt - Database Normalization

dbt는 ELT를 쉽게 해주는 툴이다.


ELT의 미래.

ETL을 하는 이유는 결국 ELT를 하기 위함이다.
이때 데이터 품질 검증이 중요해진다.

데이터 품질의 중요성 증대

데이터 품질유지는 결국
비용/노력 감소와 생산성 증대의 지름길이 된다.
아래의 노력들을 통해 데이터 품질을 유지할 수 있다.

  • 입출력 체크
  • 더 다양한 품질 검사
  • 리니지 체크
  • 데이터 히스토리 파악

Database Normalization

데이터 베이스를 좀 더 조직적이고 일관된 방법으로 디자인하려는 방법.

  • 데이터 베이스 정합성을 쉽게 유지하고 레코드들을 수정,적재,삭제를 용이하게 한다.

Normalization에 사용되는 개념

  • Primary Key

  • Composite Key

  • Foreign Key

Database Normalization의
1NF, 2NF, 3NF 등의 Normalization과 SCD Type들에 대해 배워보자

1NF (First Normal Form)

  • 한 셀에는 하나의 값만 있어야 된다.
  • Primary Key가 있어야함
  • 중복된 키나 레코드들이 없어야함

2NF (Second Normal Form)

  • 1NF를 만족 후 다음으로 Primary Key를 중심으로 의존결과를 알 수 있어야한다.
    각각의 Pimary Key가 결합된 형

  • 부분적인 의존도가 없어야함

    • 즉 모든 부가 속성들은 Primary key를 가지고 찾을 수 있어야함

3NF (Third Normal Form)

  • 2NF를 만족 후
    전이적 부분 종속성을 없어야한다.
    - 2NF의 예시에서 state_code과 home_state가 같이 Employees 테이블에 존재


Slowly Changing Dimensions(SCD)

데이터를 데이터 웨어하우스에 적재할 때에 히스토리를 유지하는 것이 중요하다.
이를 유지하게 해주는 것이 바로 SCD 타입개념!

  • 보통 두 개의 timestamp 필드를 갖는 것이 좋음
    • created_at (생성시간으로 한번 만들어지면 고정됨)
    • updated_at (꼭 필요 마지막 수정 시간을 나타냄)

하지만 일부 속성들은 시간을 두고 변하게 되기 때문에
이미 적재된 상태에서 변화된 속성을 어떻게 반영해야 되는지 알아보자.

SCD Type 0

한번 쓰고 나면 바꿀 이유가 없는 경우들을 SCD Type 0으로 지정한다.

예시) 회원 등록일, 제품 첫 구매일

SCD Type 1

데이터가 새로 생기면 덮어쓰면 되는 컬럼들
처음 레코드 생성시에는 존재하지 않았지만 나중에 생기면 채우는 경우

예시) 고객 연간 소득

SCD Type 2

특정 범주형 키에 대한 데이터가 새로운 레코드로 추가되어야 하는 경우

예시) 고객의 등급 변화

티어가 regular에서 vip로 변경될 때

SCD Type 3

SCD Type 2의 대안으로 tier를 예로 들자면
[이전tier] 컬럼, [현재 tier] 컬럼을 생성.

이렇게 되면 변경시간도 별도 컬럼으로 존재해야함

새로 업데이트 될 때 마다 컬럼이 추가 되므로 그렇게 깔끔한 방법은 아닌 듯.

SCD Type 4 ⭐

특정 범주형 키에 대한 데이터를 새로운 Dimension 테이블에 저장하는 타입.

SCD Type 2의 변종이다.
예시) 별도의 테이블로 변경 내용을 저장.

일반적으로 사용되는 방법.

0개의 댓글