Normalisierte und denormalisierte Datenbanken

Datenbankdesign

Lis Sulmont

Curriculum Manager

Zurück zu unseren Buchhandlungen

Denormalisiert: Star-Schema

$$

Normalisiert: Snowflake-Schema

$$

Datenbankdesign

Denormalisierte Abfrage

Ziel: Ermitteln, wie viele Bücher von Octavia E. Butler im vierten Quartal 2018 in Vancouver verkauft wurden

  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

3 Joins insgesamt

Datenbankdesign

Normalisierte Abfrage

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
Datenbankdesign

Normalisierte Abfrage (Fortsetzung)

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

8 Joins insgesamt

Warum sollten wir also eine Datenbank normalisieren?

Datenbankdesign

Normalisierung spart Platz

Denormalisierte Datenbanken sorgen für Datenredundanz.

Datenbankdesign

Normalisierung spart Platz

Normalisierung eliminiert Datenredundanz.

Datenbankdesign

Normalisierung sorgt für bessere Datenintegrität

$$

1. Erzwingt Datenkonsistenz

Namenskonventionen müssen aufgrund referenzieller Integrität eingehalten werden, z. B. „California” statt „CA” oder „Kalifornien”

2. Aktualisieren, Entfernen und Einfügen ist sicherer

Weniger Datenredundanz = weniger Datensätze, die geändert werden müssen

3. Einfacher umzugestalten durch Erweiterung

Kleinere Tabellen leichter erweiterbar als größere Tabellen

Datenbankdesign

Datenbanknormalisierung

Vorteile

  • Normalisierung eliminiert Datenredundanz: spart Speicherplatz

  • Bessere Datenintegrität: genaue und einheitliche Daten

Nachteile

  • Für komplexe Abfragen mehr CPU-Leistung erforderlich
Datenbankdesign

Zusammenhang mit OLTP und OLAP

OLTP

z. B. operative Datenbanken

Normalerweise stark normalisiert

  • Schreibintensiv
  • Priorisiert das schnellere und sicherere Einfügen von Daten

OLAP

z. B. Data Warehouses

Normalerweise weniger normalisiert

  • Lese-intensiv
  • Priorisiert schnellere Abfragen für Analytics
Datenbankdesign

Lass uns üben!

Datenbankdesign

Preparing Video For Download...