정규화 및 비정규화 데이터베이스

데이터베이스 설계

Lis Sulmont

Curriculum Manager

서점 예제로 돌아가기

비정규화: 스타 스키마

$$

정규화: 스노우플레이크 스키마

$$

데이터베이스 설계

비정규화 쿼리

목표: 2018년 4분기 밴쿠버에서 판매된 Octavia E. Butler 도서의 총 수량 조회

  SELECT SUM(quantity) FROM fact_booksales
    -- Join to get city
    INNER JOIN dim_store_star on fact_booksales.store_id = dim_store_star.store_id
    -- Join to get author
    INNER JOIN dim_book_star on fact_booksales.book_id = dim_book_star.book_id
    -- Join to get year and quarter
    INNER JOIN dim_time_star on fact_booksales.time_id = dim_time_star.time_id
  WHERE 
    dim_store_star.city = 'Vancouver' AND dim_book_star.author = 'Octavia E. Butler' AND
    dim_time_star.year = 2018 AND dim_time_star.quarter = 4;
7600

총 조인 수: 3개

데이터베이스 설계

정규화 쿼리

SELECT
  SUM(fact_booksales.quantity)
FROM
  fact_booksales
  -- Join to get city
  INNER JOIN dim_store_sf ON fact_booksales.store_id = dim_store_sf.store_id
  INNER JOIN dim_city_sf ON dim_store_sf.city_id = dim_city_sf.city_id
  -- Join to get author
  INNER JOIN dim_book_sf ON fact_booksales.book_id = dim_book_sf.book_id
  INNER JOIN dim_author_sf ON dim_book_sf.author_id = dim_author_sf.author_id
  -- Join to get year and quarter
  INNER JOIN dim_time_sf ON fact_booksales.time_id = dim_time_sf.time_id
  INNER JOIN dim_month_sf ON dim_time_sf.month_id = dim_month_sf.month_id
  INNER JOIN dim_quarter_sf ON dim_month_sf.quarter_id =  dim_quarter_sf.quarter_id
  INNER JOIN dim_year_sf ON dim_quarter_sf.year_id = dim_year_sf.year_id
데이터베이스 설계

정규화 쿼리 (계속)

WHERE
  dim_city_sf.city = `Vancouver`
  AND 
  dim_author_sf.author = `Octavia E. Butler`
  AND
  dim_year_sf.year = 2018 AND dim_quarter_sf.quarter = 4; 
sum
7600

총 조인 수: 8개

그렇다면 왜 데이터베이스를 정규화할까요?

데이터베이스 설계

정규화로 공간 절약

비정규화 데이터베이스는 데이터 중복을 허용합니다

데이터베이스 설계

정규화로 공간 절약

정규화는 데이터 중복을 제거합니다

데이터베이스 설계

정규화와 데이터 무결성

$$

1. 데이터 일관성 강화

참조 무결성으로 명명 규칙 준수 필요, 예: 'California' ('CA'나 'california' 불가)

2. 안전한 수정·삭제·삽입

데이터 중복 감소 = 변경할 레코드 감소

3. 확장을 통한 재설계 용이

작은 테이블이 큰 테이블보다 확장하기 쉬움

데이터베이스 설계

데이터베이스 정규화

장점

  • 정규화로 데이터 중복 제거: 저장 공간 절약

  • 향상된 데이터 무결성: 정확하고 일관된 데이터

단점

  • 복잡한 쿼리는 더 많은 CPU 필요
데이터베이스 설계

OLTP와 OLAP 기억하시나요?

OLTP

예: 운영 데이터베이스

일반적으로 고도로 정규화

  • 쓰기 중심
  • 빠르고 안전한 데이터 삽입 우선

OLAP

예: 데이터 웨어하우스

일반적으로 낮은 정규화

  • 읽기 중심
  • 분석을 위한 빠른 쿼리 우선
데이터베이스 설계

연습해 봅시다!

데이터베이스 설계

Preparing Video For Download...