Normaliserade och denormaliserade databaser

Databasdesign

Lis Sulmont

Curriculum Manager

Tillbaka till bokhandelsexemplet

Denormaliserat: stjärnschema

$$

Normaliserat: snöflingschema

$$

Databasdesign

Denormaliserad fråga

Mål: hämta antal sålda böcker av Octavia E. Butler i Vancouver, kvartal 4 år 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

Totalt 3 joins

Databasdesign

Normaliserad fråga

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
Databasdesign

Normaliserad fråga (forts.)

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

Totalt 8 joins

Varför skulle vi vilja normalisera en databas?

Databasdesign

Normalisering sparar utrymme

Denormaliserade databaser möjliggör dataredundans

Databasdesign

Normalisering sparar utrymme

Normalisering eliminerar dataredundans

Databasdesign

Normalisering ger bättre dataintegritet

$$

1. Säkerställer datakonsistens

Referensintegritet kräver enhetliga konventioner, t.ex. 'California', inte 'CA' eller 'california'

2. Säkrare uppdatering, borttagning och infogning

Mindre dataredundans = färre poster att ändra

3. Enklare att utöka vid omstrukturering

Mindre tabeller är lättare att bygga ut än större

Databasdesign

Databasnormalisering

Fördelar

  • Normalisering eliminerar dataredundans: sparar lagringsutrymme

  • Bättre dataintegritet: korrekt och konsekvent data

Nackdelar

  • Komplexa frågor kräver mer processorkraft
Databasdesign

Kommer du ihåg OLTP och OLAP?

OLTP

t.ex. operativa databaser

Vanligtvis högt normaliserat

  • Skrivintensivt
  • Prioriterar snabb och säker infogning av data

OLAP

t.ex. datalager

Vanligtvis mindre normaliserat

  • Läsintensivt
  • Prioriterar snabba frågor för analys
Databasdesign

Nu kör vi en övning!

Databasdesign

Preparing Video For Download...