Database normalizzati e denormalizzati

Progettazione di database

Lis Sulmont

Curriculum Manager

Torniamo al nostro esempio della libreria

Denormalizzato: schema a stella

*

Normalizzato: schema a fiocco di neve

*

Progettazione di database

Query denormalizzata

Obiettivo: trovare quanti libri di Octavia E. Butler sono stati venduti a Vancouver nel quarto trimestre del 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;

DNT_CURLY_TAG_1

7600

DNT_CURLY_TAG_1

Totale di 3 unioni

Progettazione di database

Query normalizzata

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
Progettazione di database

Query normalizzata (continua)

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

Totale di 8 unioni

Allora, perché dovremmo voler normalizzare un database?

Progettazione di database

La normalizzazione ti fa risparmiare spazio

I database denormalizzati permettono la ridondanza dei dati.

Progettazione di database

La normalizzazione ti fa risparmiare spazio

La normalizzazione elimina la ridondanza dei dati.

Progettazione di database

La normalizzazione garantisce una migliore integrità dei dati.

$$

1. Garantisce la coerenza dei dati

Devi rispettare le regole di come si scrivono i nomi per mantenere l'integrità dei riferimenti, tipo "California", non "CA" o "california".

2. Aggiornamento, rimozione e inserimento più sicuri

Meno dati ridondanti = meno record da modificare

3. Più facile da riprogettare grazie all'estensione

I tavoli più piccoli sono più facili da allungare rispetto a quelli più grandi.

Progettazione di database

Normalizzazione del database

Vantaggi

  • La normalizzazione elimina la ridondanza dei dati: risparmia spazio di archiviazione

  • Migliore integrità dei dati: dati accurati e coerenti

Svantaggi

  • Le query complesse richiedono più CPU.
Progettazione di database

Ti ricordi OLTP e OLAP?

OLTP

ad esempio, database operativi

Di solito molto normalizzato

  • Intensivo in scrittura
  • Dai la priorità a un inserimento dei dati più veloce e sicuro

OLAP

ad esempio, magazzini di dati

Di solito meno normalizzato

  • Ad alta intensità di lettura
  • Dai la priorità alle query più veloci per l'analisi
Progettazione di database

Passiamo alla pratica!

Progettazione di database

Preparing Video For Download...