Bases de données normalisées et dénormalisées

Conception de bases de données

Lis Sulmont

Curriculum Manager

Revenons à notre librairie

Dénormalisée : schéma en étoile

$$

Normalisée : schéma en flocon

$$

Conception de bases de données

Requête dénormalisée

But : obtenir la quantité de livres d'Octavia E. Butler vendus à Vancouver au T4 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

Total : 3 jointures

Conception de bases de données

Requête normalisée

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
Conception de bases de données

Requête normalisée (suite)

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

Total : 8 jointures

Alors, pourquoi normaliser une base de données ?

Conception de bases de données

La normalisation économise de l'espace

Les bases dénormalisées entraînent une redondance des données

Conception de bases de données

La normalisation économise de l'espace

La normalisation élimine la redondance des données

Conception de bases de données

La normalisation améliore l'intégrité des données

$$

1. Assure la cohérence des données

Respecter les conventions de nommage en raison de l'intégrité référentielle, p. ex. « California », pas « CA » ni « california »

2. Mises à jour, suppressions et insertions plus sûres

Moins de redondance = moins d'enregistrements à modifier

3. Refonte plus facile par extension

De petites tables s'étendent plus facilement que de grandes tables

Conception de bases de données

Normalisation des bases de données

Avantages

  • La normalisation élimine la redondance : économie d'espace

  • Meilleure intégrité : données précises et cohérentes

Inconvénients

  • Les requêtes complexes exigent plus de CPU
Conception de bases de données

Vous vous rappelez d'OLTP et d'OLAP ?

OLTP

p. ex., bases opérationnelles

Généralement très normalisées

  • Écriture intensive
  • Priorisent des insertions plus rapides et plus sûres

OLAP

p. ex., entrepôts de données

Généralement moins normalisées

  • Lecture intensive
  • Priorisent des requêtes analytiques plus rapides
Conception de bases de données

Passons à la pratique !

Conception de bases de données

Preparing Video For Download...