Denormalisierung ist ein Ansatz zur Beschleunigung der leseorientierten Datenabfrage in einer relationalen Datenbank, bei dem der Datenbankadministrator selektiv bestimmte Instanzen redundanter Daten zurückfügt, nachdem die Datenstruktur normalisiert wurde. Eine denormalisierte Datenbank ist nicht zu verwechseln mit einer Datenbank, die nie normalisiert wurde.
Bei der Normalisierung in SQL speichert eine Datenbank unterschiedliche, aber zusammengehörige Datentypen in separaten logischen Tabellen, den sogenannten Relationen. Wenn eine Abfrage Daten aus mehreren Tabellen in einer einzigen Ergebnistabelle kombiniert, nennt man dies einen Join. Die Performance eines solchen Joins angesichts komplexer Abfragen ist oft der Anlass für den Administrator, die Alternative der Denormalisierung zu untersuchen.
Normalisierung vs. Denormalisierung
Mehrere Joins in derselben Abfrage können sich negativ auf die Performance auswirken. Mit zunehmender Anzahl von Tabellen, die durch den Entwurf erzeugt werden, kann die Komplexität der Joins einen inakzeptablen Rechen-Overhead erzeugen. Joins können E/A-intensiv sein und die Ausführung der zugehörigen Abfrage kann unangemessen viel Zeit in Anspruch nehmen, was manchmal sogar zum Absturz von Anwendungen führen kann.
Bei der Datenbankdenormalisierung fügen Datendesigner disparate Tabellen zusammen. Dies geschieht auf Kosten einer Reihe von Datenredundanzen, aber es kann nützlich sein, um die Anzahl der Joins zu reduzieren und damit die Abläufe zu beschleunigen. Der Kompromiss für den Datenbankdesigner besteht darin, Datenbanksysteme zu erstellen, die weniger große oder mehr kleine Tabellen haben, je nach Ressourcen und Anforderungen an die Interaktivität der Abfragen. Der Designer muss dies auch gegen Probleme der Datenredundanz abwägen, insbesondere gegen die Möglichkeit einer erhöhten Dateninkonsistenz.
Nach der Duplizierung von Daten muss der Datenbankdesigner berücksichtigen, wie mehrere Instanzen der Daten gepflegt werden sollen. Eine Möglichkeit, eine Datenbank zu denormalisieren, besteht darin, dem Datenbankmanagementsystem zu erlauben, redundante Daten auf der Festplatte zu speichern. Dies hat den zusätzlichen Vorteil, dass die Konsistenz der redundanten Kopien gewährleistet ist. Da die Kosten für Festplatten im Laufe der Jahre gesunken sind, haben solche Ansätze an Beliebtheit gewonnen. Die Hersteller von relationalen Datenbanken haben ihre Datenbanken verbessert, um eine bessere Konsistenz zu gewährleisten, wenn Denormalisierung eingesetzt wird.
Logisches Datendesign
Einer der Ansätze zur Denormalisierung ist die Denormalisierung des eigentlichen logischen Datendesigns. Dies kann schnell zu inkonsistenten Daten führen. Regeln, die Constraints genannt werden, können verwendet werden, um zu spezifizieren, wie redundante Kopien von Informationen synchronisiert werden, aber sie erhöhen die Komplexität des Datenbankdesigns und laufen außerdem Gefahr, die Schreibgeschwindigkeit zu beeinträchtigen.
Zu den üblichen Fällen, in denen Denormalisierung effektiv eingesetzt werden kann, gehören vorverknüpfte Tabellen, die Daten für gemeinsame Verwendungen bündeln, geteilte Tabellen, die auf bestimmte Benutzergruppen zugeschnitten sind, und kombinierte Tabellen, die Eins-zu-Eins- und Eins-zu-Viel-Beziehungen konsolidieren.
Denormalisierung in Data Warehousing und NoSQL
In relationalen Data Warehouses spielt Denormalisierung oft eine wichtige Rolle. Dies gilt insbesondere für dimensionale Datenbanken, wie sie der einflussreiche Data-Warehouse-Architekt und -Autor Ralph Kimball vorschreibt. Seine Betonung auf dimensionalen Strukturen, die Denormalisierung verwenden, soll die Ausführung von Abfragen beschleunigen, was besonders in Data Warehouses wichtig sein kann, die für Business Intelligence verwendet werden. Denormalisierung hilft Data-Warehouse-Administratoren, eine besser vorhersagbare Leistung zu gewährleisten.
Beispiele für Denormalisierung gehen über die Denormalisierung in SQL hinaus. Eine Art der Denormalisierung findet auch außerhalb von relationalen Datenbanken Anwendung. Die Technik wird häufig in Anwendungen eingesetzt, die auf NoSQL-Datenbanken basieren, insbesondere auf dokumentenorientierten NoSQL-Datenbanken. Solche Datenbanken liegen oft Content-Management-Architekturen für Web-Profilseiten zugrunde, die von Leseoptimierungen profitieren. Das Ziel der Denormalisierung in diesem Kontext ist es, den Zeitaufwand für das Zusammenstellen von Seiten mit disparaten Profildaten zu reduzieren. In solchen Fällen wird die Aufrechterhaltung der Datenkonsistenz zur Aufgabe der Anwendung und damit des Anwendungsentwicklers.