Teams denormalisieren oft aus den falschen Gründen: Sie haben generell Angst vor Joins. Das ist in der Regel ein Zeichen für vage Leistungsfolklore und nicht für messbare Ergebnisse.
Der stärkere Grund für Denormalisierung ist die Form der Arbeitslast. Wenn ein Lese-Pfad heiß, stabil und teuer zu rekonstruieren ist, dann kann die Duplizierung eines sorgfältig ausgewählten Datenausschnitts der richtige Kompromiss sein.
Wo Denormalisierung tatsächlich hilft
Ein gängiges Beispiel ist ein Bestell-Dashboard, das immer die gleiche zusammengefasste Ansicht benötigt:
- Bestell-ID
- Kundenname
- aktueller Status
- Gesamtsumme
Wenn diese Seite extrem heiß ist, besteht eine Möglichkeit darin, eine Lese-optimierte Tabelle oder materialisierte Sicht zu pflegen:
CREATE MATERIALIZED VIEW order_summaries AS
SELECT
o.id,
c.name AS customer_name,
o.status,
o.total_amount
FROM orders o
JOIN customers c ON c.id = o.customer_id;
Das ist eine Leistungstechnik. Es ist kein Grund, das relationale Design überall sonst aufzugeben.
Der Kompromiss
Denormalisierung kauft Lese-Geschwindigkeit, indem sie Schreibkomplexität einführt:
- duplizierte Daten
- Aktualisierungslogik
- Ungültigkeitsregeln
- Abweichungsrisiko, wenn die Projektion veraltet ist
Wenn die Abfrage nicht wirklich heiß ist oder wenn Indizes das Problem beheben, kann Denormalisierung mehr Wartungsarbeit als Wert schaffen.
Bessere Regel
Beginnen Sie mit normalisierten Tabellen und guten Indizes. Messen Sie den realen Engpass. Denormalisieren Sie nur, wenn das Lese-Muster stabil genug ist, dass Duplizierung günstiger ist als Neuberechnung.
Joins sind nicht der Feind. Unermessliche Architekturentscheidungen sind es.
Weitere Literatur