Normalizované a denormalizované databáze

Database Design

Lis Sulmont

Curriculum Manager

Zpět k příkladu s knihkupectvím

Denormalizované: hvězdicové schéma

$$

Normalizované: schéma sněhové vločky

$$

Database Design

Denormalizovaný dotaz

Cíl: zjistit prodané množství všech knih Octavie E. Butlerové ve Vancouveru ve 4. čtvrtletí 2018

  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

Celkem 3 spoje

Database Design

Normalizovaný dotaz

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
Database Design

Normalizovaný dotaz (pokračování)

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

Celkem 8 spojů

Proč bychom tedy chtěli databázi normalizovat?

Database Design

Normalizace šetří místo

Denormalizované databáze umožňují redundanci dat

Database Design

Normalizace šetří místo

Normalizace odstraňuje redundanci dat

Database Design

Normalizace zajišťuje lepší integritu dat

$$

1. Zajišťuje konzistenci dat

Nutnost dodržovat konvence pojmenování kvůli referenční integritě, např. 'California', nikoli 'CA' nebo 'california'

2. Bezpečnější aktualizace, mazání a vkládání

Méně redundantních dat = méně záznamů ke změně

3. Snazší rozšiřitelnost při redesignu

Menší tabulky se rozšiřují snadněji než větší

Database Design

Normalizace databáze

Výhody

  • Normalizace odstraňuje redundanci dat: úspora úložiště

  • Lepší integrita dat: přesná a konzistentní data

Nevýhody

  • Složité dotazy vyžadují více výkonu CPU
Database Design

Vzpomínáte na OLTP a OLAP?

OLTP

nap. provozní databáze

Obvykle silně normalizované

  • Intenzivní zápis
  • Priorita rychlého a bezpečného vkládání dat

OLAP

nap. datové sklady

Obvykle méně normalizované

  • Intenzivní čtení
  • Priorita rychlých dotazů pro analýzu
Database Design

Pojďme si procvičit!

Database Design

Preparing Video For Download...