데이터 비정규화

Microsoft Fabric로 데이터 변환 및 분석

Luis Silva

Solution Architect - Data & AI

정규화란?

  • 중복을 줄이고 무결성을 높이도록 데이터 조직
  • 관계형 모델 창시자 컴퓨터 과학자 Tedd Codd가 1970년에 제시한 원칙 기반
  • 제3정규형(3NF): 비키 속성은 기본 키에만 종속
Microsoft Fabric로 데이터 변환 및 분석

정규화란?

  • 정규화는 키와 새 테이블로, 중복을 초래할 속성을 대체하여 달성합니다.

 

중복을 줄이기 위해 테이블을 세 개로 분할하는 개념 다이어그램

Microsoft Fabric로 데이터 변환 및 분석

정규화 예시

비디오 게임 제목과 퍼블리셔, 장르가 있는 예시 테이블. 예: 게임 Gran Turismo, 퍼블리셔 Sony, 장르 Racing

  • publishergenre 값에 중복 텍스트가 많습니다.
Microsoft Fabric로 데이터 변환 및 분석

정규화 예시

비디오 게임 테이블의 퍼블리셔와 장르 설명을 별도 테이블로 분리하고, 게임 테이블의 텍스트를 숫자 ID로 대체한 예시

  • publishergenre 텍스트는 이제 한 번만 저장됩니다.
  • Games 테이블에서 publishergenre를 대체한 숫자 키는 공간을 덜 차지합니다
Microsoft Fabric로 데이터 변환 및 분석

비정규화

  • 비정규화는 중복을 활용해 데이터 모델을 평탄화합니다. 정규화의 반대입니다.
  • 비정규화는 테이블 수를 줄이지만 중복은 늘어납니다.

여러 테이블을 하나로 조인하는 개념 다이어그램

Microsoft Fabric로 데이터 변환 및 분석

언제 정규화를 사용해야 할까요?

  • OLTP 트랜잭션 시스템

    • 데이터 쓰기(개별 INSERT/UPDATE/DELETE) 최적화
    • 데이터 무결성 보장
  • 팩트 테이블

    • 수백만 행
    • 저장 공간 절감
    • 모델 이해 단순화
    • 스타 스키마의 기반

 

스타 스키마 다이어그램: 팩트 테이블 강조

Microsoft Fabric로 데이터 변환 및 분석

언제 비정규화를 사용해야 할까요?

  • 차원 테이블
    • 일반적으로 팩트 테이블보다 훨씬 작음
    • 중복 = 조인 감소 = 더 빠른 쿼리
    • 중복 저장 비용보다 쿼리 성능 향상이 큼
    • 스타 스키마는 스노우플레이크보다 단순함

 

스타 스키마 다이어그램: 차원 테이블 강조

Microsoft Fabric로 데이터 변환 및 분석

비정규화 구현

 

 

세 가지 도구 아이콘: SQL, Spark, Dataflows

Microsoft Fabric로 데이터 변환 및 분석

SQL로 비정규화 구현

  • SELECT + JOIN 문
-- [dim_videogames]: Videogames table
-- [dim_genres]: Genres table
-- [dim_publishers]: Publishers table

SELECT game_id, title, gen.genre, pub.publisher
FROM dim_videogames_norm vidg
JOIN dim_genres gen
  ON vidg.genre_id = gen.genre_id
JOIN dim_publishers pub
  ON vidg.publisher_id = pub.publisher_id
Microsoft Fabric로 데이터 변환 및 분석

Spark로 비정규화 구현

  • DataFrame join( ) 및 select( )
# [videogamesDF]: Videogames DataFrame
# [genresDF]: Genres DataFrame
# [publishersDF]: Publishers DataFrame

videogames1DF = videogamesDF.join(genresDF, ["genre_id"])
videogamesdenormDF = videogames1DF.join(publishersDF, ["publisher_id"])
videogamesdenormDF.select("game_id", "title", "genre_id", "publisher_id").show()
Microsoft Fabric로 데이터 변환 및 분석

Dataflows로 비정규화 구현

  • 쿼리로 데이터 로드
  • 쿼리 결합에는 변환인 Merge queries 또는 Merge queries as new 사용

Dataflow 스크린샷: videogames, genres, publishers 쿼리를 Merge queries as new로 결합

Microsoft Fabric로 데이터 변환 및 분석

Laten we oefenen!

Microsoft Fabric로 데이터 변환 및 분석

Preparing Video For Download...