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

Conception de bases de données

Lis Sulmont

Curriculum Manager

Retour à notre exemple de librairie

Dénormalisé : schéma en étoile

$$

Normalisé : schéma en flocon de neige

$$

Conception de bases de données

Requête dénormalisée

Objectif : obtenir le nombre total de livres d'Octavia E. Butler vendus à Vancouver au quatrième trimestre de 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

Total de 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 de 8 jointures

Alors, pourquoi souhaiterions-nous normaliser une base de données ?

Conception de bases de données

La normalisation permet de gagner de l'espace

Les bases de données dénormalisées permettent la redondance des données

Conception de bases de données

La normalisation permet de gagner de l'espace

La normalisation élimine la redondance des données

Conception de bases de données

La normalisation garantit une meilleure intégrité des données

$$

1. Assure la cohérence des données

Il est impératif de respecter les conventions de dénomination en raison de l'intégrité référentielle, par exemple « Californie » et non « CA » ou « californie »

2. Mise à jour, suppression et insertion plus sécurisées

Moins de redondance des données = moins d'enregistrements à modifier

3. Plus facile à repenser en élargissant

Les tableaux plus petits sont plus faciles à agrandir que les tableaux plus grands

Conception de bases de données

Normalisation de base de données

Avantages

  • La normalisation élimine la redondance des données : économies sur le stockage

  • Amélioration de l'intégrité des données : données précises et cohérentes

Inconvénients

  • Les requêtes complexes nécessitent davantage de ressources CPU
Conception de bases de données

Vous vous souvenez des termes OLTP et OLAP ?

OLTP

par exemple, bases de données opérationnelles

Généralement très normalisé

  • À forte intensité d'écriture
  • Priorité à une saisie plus rapide et plus sécurisée des données

OLAP

par exemple, entrepôts de données

Généralement moins normalisé

  • À forte intensité de lecture
  • Priorité aux requêtes plus rapides pour l'analyse
Conception de bases de données

Passons à la pratique !

Conception de bases de données

Preparing Video For Download...