- 1 Section
- 10 Lessons
- unbegrenzt
- Relationale Datenbanken & ER-Modell10
- 1.1Was ist eine Datenbank? DBMS, Schema, Instanz
- 1.2ERM: Entitäten, Attribute, Beziehungen
- 1.3ER-Diagramm: Chen-Notation
- 1.4ER-Diagramm: Krähenfußnotation
- 1.5Kardinalitäten: 1:1, 1:N, M:N
- 1.6Vom ER-Modell zum Datenbankschema
- 1.7Normalisierung: 1. Normalform
- 1.8Normalisierung: 2. und 3. Normalform
- 1.9Denormalisierung
- 1.10Aufgaben ER-Modell & Normalisierung
Denormalisierung
Bis hier galt eine einfache Regel: Je normalisierter ein Schema, desto besser. 1. Normalform, 2. und 3. Normalform beseitigen Redundanz, verhindern Anomalien, machen die Datenbank konsistent. Das ist die Lehrbuch-Welt. In der Praxis stößt diese Regel an eine Grenze: Performance. Eine hochnormalisierte Datenbank kann für komplexe Abfragen langsam sein, weil sie viele Tabellen per JOIN verknüpfen muss.
Denormalisierung ist der bewusste Schritt zurück: Man fügt absichtlich Redundanzen oder berechnete Werte hinzu, um Abfragen zu beschleunigen. Das klingt erst einmal nach Verrat an der reinen Lehre – ist es aber nicht. Es ist eine bewusste Trade-off-Entscheidung: Wir nehmen mehr Speicher und komplexere Updates in Kauf, um Lesezugriffe drastisch zu beschleunigen. In dieser Lektion lernst du, wann und wie das sinnvoll ist – und wann es ein Fehler wäre.
1) Wann denormalisieren? Die zentrale Frage
Die Faustregel: Denormalisierung lohnt sich, wenn Lesezugriffe deutlich häufiger sind als Schreibzugriffe – und wenn die normalisierte Variante zu langsam wäre. Klassische Beispiele:
- Online-Shop: Produktdetailseite wird Millionen Mal gelesen, der Preis wird selten geändert.
- Reporting / BI: Tagesreports lesen massive Datenmengen, schreiben nichts.
- Data Warehouse: Riesige Datenbestände, Abfragen über Jahre, nur nachts neue Daten geladen.
- Statistiken / Dashboards: „Zahl der Bestellungen pro Kunde" – wird ständig angezeigt, ständig die gleiche Berechnung.
Umgekehrt ist Denormalisierung tabu bei OLTP-Systemen mit hohem Schreibaufkommen – Buchungssysteme, Bestellabwicklung, Online-Banking. Hier kostet jede Redundanz, weil bei jedem Update mehrere Stellen geändert werden müssen und das Risiko von Inkonsistenzen steigt. Mehr zur Trennung in Transaktionen.
2) Performance-Slider: Reads vs. Writes
Spiele mit dem Verhältnis von Lese- zu Schreibzugriffen und beobachte, wie sich die Performance der normalisierten vs. der denormalisierten Version verändert. Bei reinem Lesen gewinnt Denormalisierung deutlich – bei vielen Schreibzugriffen kippt das Verhältnis:
📐 Normalisiert (3NF)
🚀 Denormalisiert
3) Typische Denormalisierungs-Techniken
Denormalisierung ist nicht „die Normalisierung rückgängig machen". Es gibt mehrere konkrete Techniken, die sich für unterschiedliche Probleme eignen:
| Technik | Was wird gemacht | Wann sinnvoll |
|---|---|---|
| Redundante Spalte | Wert aus einer anderen Tabelle kopieren, statt JOIN zu fahren | Spalte wird oft gelesen und selten geändert (z. B. Kundenname in Bestellung) |
| Vorberechnete Aggregate | Summen, Zähler oder Durchschnitte bei Schreibzugriff sofort aktualisieren | Statistiken wie „Anzahl Bestellungen pro Kunde", Dashboards |
| Verschmolzene Tabellen | Zwei 1:1-verbundene Tabellen zu einer machen | Performance-kritische 1:1-Beziehungen, fast immer gemeinsam gelesen |
| Materialized Views | SELECT-Ergebnis wird als „virtuelle Tabelle" gespeichert und periodisch aktualisiert | Komplexe Reports, die zeitnah aber nicht in Echtzeit aktuell sein müssen |
| JSON-Spalten | Komplexe Daten als JSON in einer Spalte, statt vielen verknüpften Tabellen | Variable, halbstrukturierte Daten – Annäherung an NoSQL |
| Caching-Schicht | Schnell-Speicher wie Redis vor der DB | Häufig wiederholte identische Abfragen |
Die Wahl der Technik hängt vom konkreten Engpass ab. Wichtig: Denormalisierung sollte immer gemessen werden, nicht geraten. Erst Last messen, dann optimieren – nicht andersrum. Tools wie EXPLAIN in SQL und Indexe sind oft die ersten Schritte, bevor man zu Denormalisierung greift.
4) Data Warehouse und das Star-Schema
Die Königsdisziplin der bewussten Denormalisierung ist das Star-Schema, das in Data Warehouses dominiert. Im Zentrum steht eine große Fakten-Tabelle (Bestellungen, Verkäufe, Logeinträge), umgeben von Dimensions-Tabellen (Kunde, Produkt, Zeit, Ort). Die Dimensions-Tabellen sind absichtlich denormalisiert – sie enthalten alle Attribute, ohne sich auf weitere Tabellen zu verweisen:
5) Use-Cases nebeneinander gestellt
Wann normalisieren, wann denormalisieren? Die Praxis trennt klar nach Lese- vs. Schreibe-Charakter des Systems:
Buchhaltung (OLTP)
Viele kleine Schreibtransaktionen. Konsistenz lebenswichtig. → Streng normalisieren (3NF).
Online-Banking
Geld-Transaktionen, ACID-Garantien notwendig. → 3NF, keine Redundanz.
Lagerverwaltung
Bestand muss sekundengenau stimmen, viele Updates. → 3NF.
Data Warehouse
Riesige Datenbestände, komplexe Reports, kaum Live-Schreibzugriff. → Star-Schema (denormalisiert).
Produktkatalog Online-Shop
Sehr viele Lesezugriffe, gelegentliche Updates. → Selektive Denormalisierung (z. B. Kategorie-Name in Produkt).
Reports & Dashboards
Aggregierte Statistiken, aus mehreren Quellen vorberechnet. → Materialized Views, Caching.
6) Die Risiken nicht unterschätzen
Denormalisierung ist mächtig, aber gefährlich. Die wichtigsten Risiken, die du im Hinterkopf haben musst:
- Inkonsistenz durch fehlende Synchronisation: Wenn der Kundenname in der
kunde-Tabelle UND in derbestellung-Tabelle gespeichert wird und sich der Name ändert, müssen beide Stellen aktualisiert werden. Vergisst die Anwendung das, divergieren die Daten. - Komplexere Anwendungslogik: Die App muss die Redundanz verstehen und pflegen. Was vorher die DB automatisch sicherstellte (über Constraints und JOINs), liegt jetzt in der Anwendung – mehr Code, mehr Fehlerpotenzial.
- Höherer Speicherbedarf: Daten werden mehrfach gespeichert. Bei TB-Datenbanken ein realer Kostenfaktor.
- Schwierigere Migrationen: Schemaänderungen treffen viele Stellen gleichzeitig. Backups werden größer und langsamer.
- Versuchung, alles zu denormalisieren: Wer einmal die Performance-Magie erlebt hat, will sie überall. Aber jede Redundanz hat einen Preis.
Praxis-Tipp: Beginne immer normalisiert. Miss die Performance. Denormalisiere gezielt nur die Stellen, die nachweislich Engpässe sind. Und dokumentiere die Denormalisierung gut – damit der nächste Entwickler nicht versehentlich eine Constraint verletzt, weil er die Redundanz nicht kennt. Siehe Projektdokumentation.
7) Wie aktualisiert man redundante Daten?
Wenn man bewusst Daten dupliziert, gibt es drei Strategien, sie konsistent zu halten – jede mit eigenen Trade-offs:
- Anwendungs-Logik: Beim Update den Wert in allen Tabellen gleichzeitig schreiben. Vorteil: keine DB-Magie nötig. Nachteil: Wenn man eine Stelle vergisst, schweigt die DB.
- Datenbank-Trigger: Automatische Synchronisation per Trigger bei jedem Update. Vorteil: zentral, schwer zu umgehen. Nachteil: schwerer zu debuggen, kann Performance kosten.
- ETL-Job / Materialized View: Nicht in Echtzeit, sondern periodisch (z. B. nachts) aktualisieren. Vorteil: einfach, performant. Nachteil: kurzfristige Inkonsistenz möglich.
Welche Strategie passt, hängt von der Akzeptanz für vorübergehende Inkonsistenz ab. Bankkontostände müssen sofort konsistent sein → Trigger oder Transaktion. Tagesreport reicht alle 5 Minuten aktuell → ETL-Job. Eine gute Architektur trifft diese Entscheidung bewusst – nicht zufällig.
Zusammenfassung
Die Denormalisierung ist der bewusste Schritt zurück von der reinen Normalisierungslehre, um Lese-Performance zu gewinnen. Sie ist sinnvoll bei lese-lastigen Workloads (Reports, Shops, Data Warehouses), tabu bei schreibintensiven OLTP-Systemen (Banking, Buchungssysteme). Typische Techniken: redundante Spalten, vorberechnete Aggregate, verschmolzene Tabellen, Materialized Views, JSON-Spalten, Caching-Schichten. Das Star-Schema im Data Warehouse ist die strukturierte Form der Denormalisierung: eine zentrale Fakten-Tabelle plus denormalisierte Dimensions-Tabellen. Risiken: Inkonsistenz, höhere App-Komplexität, mehr Speicher, schwierigere Migrationen. Strategien zur Konsistenzsicherung: Anwendungs-Logik, DB-Trigger, ETL-Jobs. Faustregel: Beginne normalisiert, miss die Performance, denormalisiere gezielt – nicht prophylaktisch. In modernen Architekturen wird das oft getrennt: OLTP normalisiert, OLAP/DWH denormalisiert.
Verwandte Lektionen: 2. und 3. Normalform · Datenbankindizes · SQL vs. NoSQL · und mehrWeitere relevante Lektionen1. NormalformER-Modell zu SchemaSQL ViewsSQL TriggerTransaktionenRedis als CacheMongoDBDB-Reports
