„Denormalisierung“ – Versionsunterschied

[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K Kleinigkeiten, Replaced: z.B. → z. B. (5) using AWB
→‎Nachteile: zusätzliche Links eingetragen
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Unter '''Denormalisierung''' versteht man die fehlerhaft nicht durchgeführte oder bewusste Rücknahme einer [[Normalisierung (Datenbank)|Normalisierung]] zum Zweck der Verbesserung des Laufzeitverhaltens einer [[Datenbankanwendung]].
Unter '''Denormalisierung''' versteht man die bewusste Rücknahme einer [[Normalisierung (Datenbank)|Normalisierung]] zum Zweck der Verbesserung des Laufzeitverhaltens einer [[Datenbankanwendung]]. Aus Sicht der [[ANSI-SPARC-Architektur]] wird Denormalisierung nur zum Design der internen Ebene angewendet. Die interne Ebene (auch physische Ebene genannt) ist die die physische Sicht der Datenbank. Sie beschreibt, wie auf dem Speichermedium im Computer die Daten abgelegt werden.


Ein logisch ideales ("normalisiertes") [[Datenmodell]] ist volkommen [[Redundanz (Informationstheorie)|redundanzfrei]] - abgesehen von der technisch notwendigen Mehrfachspeicherung von Fremdschlüsseln bei [[Schlüssel (Datenbank)|Primärschlüssel]]-[[Schlüssel (Datenbank)#Fremdschlüssel|Fremdschlüssel]]-Beziehungen.
Die Zugriffszeit einer [[SQL]]-Abfrage hängt wesentlich davon ab, wie viele Tabellen miteinander verknüpft werden müssen. Ein logisch ideales ("normalisiertes") [[Datenmodell]] enthält nur minimale Redundanz. Vollkommene Redundanzfreiheit kann schon prinzipbedingt nicht erreicht werden da die Primärschlüssel-Fremdschlüssel Beziehungen per se Redundanz enthalten. Sämtliche mehrfach auftretenden Datenbankinhalte (z. B. ein Branchenname in einer Firmentabelle) werden in separate [[Datenbanktabelle]]n (in diesem Beispiel eine Branchenkatalog-Tabelle) ausgelagert. Dies ist aber mit dem Nachteil verbunden, dass bei jeder Abfrage zusätzliche Tabellen mit einbezogen werden müssen. Unter bestimmten Umständen kann dies die Zugriffszeit vervielfachen.


Die Zugriffszeit einer [[SQL]]-Abfrage hängt wesentlich davon ab, wie viele Tabellen miteinander verknüpft werden müssen. Um eine bessere Zugriffs-Performens zu erreichen, ist es in vielen Fällen sinnvoll, die Inhalte von mehreren Tabellen in einer Tabelle zu speichern. Damit kann die Ausführung eines Joins bei der Evaluierung einer Abfrage vermieden werden.
Dem kann man nun begegnen, indem man in einzelnen kritischen Fällen die Normalisierung unter Inkaufnahme der dadurch entstehenden [[Redundanz (Informationstheorie)|Redundanz]] wieder zurücknimmt. Im Einzelnen stehen dem Datenbankexperten eine Vielzahl von Denormalisierungsmöglichkeiten zur Verfügung, z. B.:


Mit Denormalisierungen lassen sich oftmals wesentlich größere [[Leistung (Informatik)|Performance]]-Verbesserungen erreichen als mit einem [[Tuning (Datenbank)|Tuning der Datenbankinstallation]].
* Auflösen von ausgelagerten Katalogen,
* Ersetzen von numerischen durch "sprechende" Schlüssel oder verständliche Abkürzungen, die an vielen Stellen der Anwendungssoftware für ein Verständnis der Daten ausreichen (z. B. das Kennzeichen "D" als sprechender Schlüssel für Deutschland),
* Verwendung der Kataloginhalte selbst als Schlüssel, so dass der Katalog selbst nur selten mit einbezogen werden muss,
* Redundante Speicherung von Detaildaten an mehreren Stellen, z. B. einmal in einer separaten Detailtabelle, und zusätzlich in einer Liste der eigentlichen Tabelle.


== Bereiche der Denormalisierung ==
Vielfach werden entsprechende Tools bereits vom Datenbanksystem selbst bereit gestellt, z. B. als so genannte "Persistent Views": dabei wird eine View, (die auch komplizierte Joins enthalten kann) für den Benutzer völlig transparent als Datenbestand abgelegt. Greift man auf diese View zu, so erhält man dieselbe Performance als wenn der Datenbestand in denormalisierter Form vorliegen würde. Gibt es ein solches Tool nicht, so geht an der Denormalisierung kein Weg vorbei. Allerdings empfiehlt es sich, eine relational korrekte Struktur zu Grunde zu legen, und aus dieser durch geeignete Trigger bzw. Manipulatorroutinen eine "Aggregatstabelle" zu befüllen und befüllt zu halten. (Die Aggregatstabelle ist hier dasselbe wie eine Persistent View, allerdings nicht transparent: sie muss in der Datenstruktur wie jede andere Tabelle auch angelegt und danach verwaltet werden.) Der Vorteil dieser Methode besteht darin, dass es in der relationalen Struktur eine Art "oberste Instanz" gibt. Ergeben sich Inkonsistenzen durch die Redundanzen der denormalisierten Tabellen, so können Aggregatstabellen einfach entleert und aus dem "richtigen" Datenbestand neu aufgebaut werden. Gibt es nur noch denormalisierte Datenbestände, so wird eine Fehlersuche bzw. -behebung beinahe unmöglich.
=== Rücknahme der erster Normalform ===
Verstöße gegen die [[Normalisierung (Datenbank)#Erste Normalform (1NF)|erste Normalform]] werden meistens zur Vermeidung einer unnötigen Komplizierung des Datenhaushalts und der damit verbundenen Systemkomponenten vorgenommen.


Die erste Normalform fordert eine atomare Speicherung von Daten, das bedeutet, dass in einem [[Entity-Relationship-Modell#Begriffe|Attribut]] (=einem Datenbankfeld) nur '''atomare''' (=unzerteilbare) Informationen abgelegt werden dürfen. Beispiel: Die Definition eines 100 Zeichen langen Datenfeldes zur Aufnahme von einer oder mehrerer Telefonnummern verstößt gegen die Forderung der ersten Normalform. Um die erste Normalform zu erfüllen, müsste für die Speicherung der Telefonnummern eine eigene Tabelle geschaffen werden. So könnten zu einer Person beliebig viele Telefonnummern gespeichert werden. Die Unterbringung einer oder mehrerer Telefonnummern in einem einzigen Datenfeld ist jedoch oft völlig ausreichend und die Komplexität des Systems wird dadurch reduziert.
Mit Denormalisierungen lassen sich oftmals wesentlich größere [[Leistung (Informatik)|Performance]]-Verbesserungen erreichen als mit einem [[Tuning (Datenbank)|Tuning der Datenbankinstallation]]. Nachteilig ist aber der zusätzliche Aufwand der getrieben werden muss, um die redundanten Daten konsistent zu halten und die Gefahr von Datenanomalien auf Grund der redundanten Speicherung.


Ein weiteres Beispiel für eine aus praktischen Gründen sinnvolle Verletzung der ersten Normalform ist die Speicherung von Titel, Vorname und Nachname in einem einzigen Datenfeld. Solange in dem System nicht auf die Einzelkomponenten des Namens zugegriffen werden muss, wäre eine Speicherung der einzelnen Namenskomponenten in einem einzigen Textfeld ebenfalls eine gute Möglichkeit zur Vereinfachung des Systems.
Nachteilig ist auch, dass bereits fertiggestellte Programme im Zuge der Performance-Optimierung wieder geändert werden müssen. Der dadurch entstehende Mehraufwand kann nur vermieden werden,


Bei den meisten Datenbanken wird die Straße und die Hausnummer (mit evtl. noch ergänzenden Buchstaben) in einem einzigen Datenfeld gespeichert, obwohl das strenggenommen auch gegen die erste Normalform verstößt.
* wenn die Programme bereits auf einem realitätsnahen Datenbestand unter voller Lastsimulation entwickelt werden, so dass der Optimierungsbedarf bereits zu Beginn der Entwicklung erkannt wird, oder
* indem solche [[Softwaretechnologie]]n eingesetzt werden, die nachträgliche Softwareänderungen infolge von Datenstrukturänderungen weitgehend automatisieren.


=== Rücknahme der zweiten oder dritten Normalform ===
Ein weiterer Einsatzfall für denormalisierte Datenbanken ist das [[Sternschema]] für ein [[Data Warehouse]] (Datenlager).
Die Begründung zur Rücknahme der [[Normalisierung (Datenbank)#Zweite Normalform (2NF)|zweiten]] oder [[Normalisierung (Datenbank)#Dritte Normalform (3NF)|dritten Normalform]] ist meistens die Vermeidung eines Joins und damit die Vereinfachung und Beschleunigung der Lesezugriffe. Es betrifft typischerweise zwei Tabellen, die in einer 1:N-Beziehung zueinander stehen. Beispiel: Mitarbeiter und Abteilung. Wenn viele performenskritische Lesezugriffe die Daten der Mitarbeiter und zusätzlich den Abteilungsnamen benötigen, dann kann die zusätzliche Speicherung des Abteilungsnamens in jedem Satz der Mitarbeitertabelle sinnvoll sein. Diese Zugriffe können dann alleine aus den Daten in der Mitarbeitertabelle bedient werden. Der zusätzliche Zugriff auf die Abteilungs-Tabelle ist nicht mehr erforderlich.

Diese Art der Denormalisierung wird oft perfektioniert bei der Modellierung von [[Sternschema#Fakten- und Dimensionstabellen|Dimensions-Tabellen]] für ein [[Data Warehouse]] (Datenlager). Bei normalisierten Dimensions-Tabellen spricht man von einem [[Schneeflockenschema]]. Bei denormalisierten Dimensions-Tabellen spricht man von einem [[Sternschema]]. Ein Sternschema kommt mit viel weniger Tabellen aus. Dadurch wird die Gestaltung von Abfragen einfacher und die Ausführung der Abfragen wird performanter. In der Praxis wird meistens dem Sternschema der Vorzug gegeben.

=== Vorweggenommene Aggregation ===
Zur Ausführung von Abfragen müssen oft umfangreiche [[Aggregation (OLAP)|Aggregationen]] ausgeführt werden. Das ist besonders bei [[Online Analytical Processing|OLAP-Systemen]] der Fall. Wenn die Antwortzeit der Abfragen in nicht mehr akzeptable Bereiche kommt, dann können die Aggregationen auch vorweg berechnet und gespeichert werden. Ideal ist das bei Systemen, die nur in der Nacht aktualisiert werden. Dann werden nach der eigentlichen Aktualisierung der Daten auch alle möglichen Aggregationen berechnet und gespeichert. Wenn dann ein Anwender während des Tages eine [[Betriebswirtschaftliche Kennzahl|Kennzahl]] ([[Key Performance Indicator|KPI]]) anfordert, dann sind alle dafür erforderlichen Aggregationen bereits vorhanden und die Kennzahl kann sekundenschnell ausgegeben werden.

=== Fragmentierung ===
Man unterscheidet horizontale und vertikale Fragmentierung.

Bei der Horizontalen Fragmentierung wird die Gesamtheit aller Datensätze auf mehrere Tabellen aufgeteilt. Wenn diese Tabellen auf dem selben Server liegen, dann handelt es sich meistens um Partitionierung. Die einzelnen Tabellen können aber auch auf unterschiedlichen Servern liegen. So können z.B. die Daten für die Geschäfte in den USA auch auf einem Server in den USA liegen und die Daten für die Geschäfte mit Europa liegen auf einem Server in Deutschland. Diese Aufteilung wird auch als Regionalisierung bezeichnet.

Bei der Vertikalen Fragmentierung werden die abhängigen Attribute (nicht-Schlüssel-Attribute) einer Tabelle in zwei oder mehrere Gruppen aufgeteilt. Aus jeder Gruppe wird eine eigene Tabelle. Jede Tabelle erhält zusätzlich alle Schlüssel-Attribute. Das kann dann sinnvoll sein, wenn alle Attribute zu einem Schlüssel ein großes Datenvolumen haben (z.B. >4KB) jedoch nur auf wenige Attribute sehr häufig zugegriffen wird. Dann kann man die wenigen häufig zugegriffenen Attribute in eine Gruppe zusammenfassen und den Rest in eine zweite Gruppe zusammenfassen.

=== Partitionierung ===
Partitionierung ist ein Spezialfall der horizontalen Fragmentierung.

Große Datenbestände lassen sich leichter administrieren, wenn die Daten einer Relation in mehrere kleine Teile (=Partitionen) aufgeteilt und diese separat gespeichert werden. Wenn eine Partition einer Tabelle gerade aktualisiert wird, dann können andere Partitionen der Tabelle zur selben Zeit reorganisiert werden. Wenn in einer Partition ein Fehler entdeckt wird, dann kann diese einzelne Partition aus einer Datensicherung wiederhergestellt werden, während Programme auf die anderen Partitionen weiter zugreifen können. Die meisten etablierten Datenbankhersteller bieten Partitionierung an, siehe z.B. [[DB2#Partitionierung|Partitionierung bei DB2]] und [[MySQL#Partitionierung|Partitionierung bei MySQL]].

=== Index ===
Die Erstellung von [[Datenbankindex|Indices]] ist auch eine redundante Datenspeicherung und damit - genau genommen - eine Denormalisierung. Der Vorteil eines Index liegt darin, dass die Datenbank diese Datenstruktur selber aktualisiert bei jeder Änderung der Basistabelle. Indices sind vor allem dann gut geeignet zur Performens-Steigerung, wenn die Daten selten geändert werden aber sehr oft gelesen werden. Es gibt Datenbanken, für die so viele Indices definiert wurden, dass '''alle''' Abfragen alleine aus den in den Indices gespeicherten Daten ausgeführt werden können (index only requests). Dadurch vervielfacht sich das zu speichernde Datenvolumen und Datenänderungen werden sehr aufwändig. Die Lese-Performens kann jedoch mit excelenten Zugriffszeiten glänzen.

== Nachteile ==
Nachteilig ist oft der zusätzliche Aufwand der getrieben werden muss, um die [[Redundanz (Informationstheorie)#Datenbanken und Datenstrukturen|redundanten]] Daten [[Konsistenz (Datenbank)|konsistent]] zu halten und die Gefahr von [[Anomalie (Informatik)|Datenanomalien]] auf Grund der redundanten Speicherung.

Dieser Nachteil kann jedoch in vielen Fällen praktisch aufgehoben werden, wenn es gelingt, die Aktualisierung der redundant gespeicherten Daten an das Datenbankmanagementsystem zu delegieren.

Die Datenbankhersteller bieten verschiedene Funktionen, um redundant gespeicherte Informationen automatisch zu aktualisieren.
* Dass die Aktualisierung eines Index automatisch erfolgt, ist schon so selbstverständlich, dass man es gar nicht anders erwartet.
* Die einzelnen Partitionen einer Tabelle können unter einem einheitlichen Tabellennamen angesprochen werden.
* Die Vorwegnahme von Aggregationen wird durch [[Sicht (Datenbank)#Materialized View|Materialized Views]] unterstützt, die diese Aggregationen automatisch im erforderlichen Umfang aktualisieren.
* Ferner gibt es [[Datenbanktrigger|Trigger]], mit denen redundant gespeicherte Daten automatisch aktualisiert werden können.

Wenn das Datenbankmanagementsystem solche Aufgaben übernimmt, dann mag die Aktualisierung eines einzelnen Datensatzes dadurch nur unmerklich verlangsamt werden. Massendatenverarbeitungen können durch die Nutzung solcher Funktionen allerdings deutlich langsamer werden.

Meistens hat eine Denormalisierung einen zusätzlichen Speicherbedarf zur Folge. Oft ist man jedoch bereit, für eine Verbesserung der Performens die Kosten für zusätzlichen Speicherplatz zu tragen. Im Einzelfall muss abgewogen werden, ob die Vorteile es wert sind, die damit verbundenen Nachteile in kauf zu nehmen.


[[Kategorie:Datenbankmodellierung]]
[[Kategorie:Datenbankmodellierung]]

Version vom 24. Januar 2009, 22:40 Uhr

Unter Denormalisierung versteht man die bewusste Rücknahme einer Normalisierung zum Zweck der Verbesserung des Laufzeitverhaltens einer Datenbankanwendung. Aus Sicht der ANSI-SPARC-Architektur wird Denormalisierung nur zum Design der internen Ebene angewendet. Die interne Ebene (auch physische Ebene genannt) ist die die physische Sicht der Datenbank. Sie beschreibt, wie auf dem Speichermedium im Computer die Daten abgelegt werden.

Ein logisch ideales ("normalisiertes") Datenmodell ist volkommen redundanzfrei - abgesehen von der technisch notwendigen Mehrfachspeicherung von Fremdschlüsseln bei Primärschlüssel-Fremdschlüssel-Beziehungen.

Die Zugriffszeit einer SQL-Abfrage hängt wesentlich davon ab, wie viele Tabellen miteinander verknüpft werden müssen. Um eine bessere Zugriffs-Performens zu erreichen, ist es in vielen Fällen sinnvoll, die Inhalte von mehreren Tabellen in einer Tabelle zu speichern. Damit kann die Ausführung eines Joins bei der Evaluierung einer Abfrage vermieden werden.

Mit Denormalisierungen lassen sich oftmals wesentlich größere Performance-Verbesserungen erreichen als mit einem Tuning der Datenbankinstallation.

Bereiche der Denormalisierung

Rücknahme der erster Normalform

Verstöße gegen die erste Normalform werden meistens zur Vermeidung einer unnötigen Komplizierung des Datenhaushalts und der damit verbundenen Systemkomponenten vorgenommen.

Die erste Normalform fordert eine atomare Speicherung von Daten, das bedeutet, dass in einem Attribut (=einem Datenbankfeld) nur atomare (=unzerteilbare) Informationen abgelegt werden dürfen. Beispiel: Die Definition eines 100 Zeichen langen Datenfeldes zur Aufnahme von einer oder mehrerer Telefonnummern verstößt gegen die Forderung der ersten Normalform. Um die erste Normalform zu erfüllen, müsste für die Speicherung der Telefonnummern eine eigene Tabelle geschaffen werden. So könnten zu einer Person beliebig viele Telefonnummern gespeichert werden. Die Unterbringung einer oder mehrerer Telefonnummern in einem einzigen Datenfeld ist jedoch oft völlig ausreichend und die Komplexität des Systems wird dadurch reduziert.

Ein weiteres Beispiel für eine aus praktischen Gründen sinnvolle Verletzung der ersten Normalform ist die Speicherung von Titel, Vorname und Nachname in einem einzigen Datenfeld. Solange in dem System nicht auf die Einzelkomponenten des Namens zugegriffen werden muss, wäre eine Speicherung der einzelnen Namenskomponenten in einem einzigen Textfeld ebenfalls eine gute Möglichkeit zur Vereinfachung des Systems.

Bei den meisten Datenbanken wird die Straße und die Hausnummer (mit evtl. noch ergänzenden Buchstaben) in einem einzigen Datenfeld gespeichert, obwohl das strenggenommen auch gegen die erste Normalform verstößt.

Rücknahme der zweiten oder dritten Normalform

Die Begründung zur Rücknahme der zweiten oder dritten Normalform ist meistens die Vermeidung eines Joins und damit die Vereinfachung und Beschleunigung der Lesezugriffe. Es betrifft typischerweise zwei Tabellen, die in einer 1:N-Beziehung zueinander stehen. Beispiel: Mitarbeiter und Abteilung. Wenn viele performenskritische Lesezugriffe die Daten der Mitarbeiter und zusätzlich den Abteilungsnamen benötigen, dann kann die zusätzliche Speicherung des Abteilungsnamens in jedem Satz der Mitarbeitertabelle sinnvoll sein. Diese Zugriffe können dann alleine aus den Daten in der Mitarbeitertabelle bedient werden. Der zusätzliche Zugriff auf die Abteilungs-Tabelle ist nicht mehr erforderlich.

Diese Art der Denormalisierung wird oft perfektioniert bei der Modellierung von Dimensions-Tabellen für ein Data Warehouse (Datenlager). Bei normalisierten Dimensions-Tabellen spricht man von einem Schneeflockenschema. Bei denormalisierten Dimensions-Tabellen spricht man von einem Sternschema. Ein Sternschema kommt mit viel weniger Tabellen aus. Dadurch wird die Gestaltung von Abfragen einfacher und die Ausführung der Abfragen wird performanter. In der Praxis wird meistens dem Sternschema der Vorzug gegeben.

Vorweggenommene Aggregation

Zur Ausführung von Abfragen müssen oft umfangreiche Aggregationen ausgeführt werden. Das ist besonders bei OLAP-Systemen der Fall. Wenn die Antwortzeit der Abfragen in nicht mehr akzeptable Bereiche kommt, dann können die Aggregationen auch vorweg berechnet und gespeichert werden. Ideal ist das bei Systemen, die nur in der Nacht aktualisiert werden. Dann werden nach der eigentlichen Aktualisierung der Daten auch alle möglichen Aggregationen berechnet und gespeichert. Wenn dann ein Anwender während des Tages eine Kennzahl (KPI) anfordert, dann sind alle dafür erforderlichen Aggregationen bereits vorhanden und die Kennzahl kann sekundenschnell ausgegeben werden.

Fragmentierung

Man unterscheidet horizontale und vertikale Fragmentierung.

Bei der Horizontalen Fragmentierung wird die Gesamtheit aller Datensätze auf mehrere Tabellen aufgeteilt. Wenn diese Tabellen auf dem selben Server liegen, dann handelt es sich meistens um Partitionierung. Die einzelnen Tabellen können aber auch auf unterschiedlichen Servern liegen. So können z.B. die Daten für die Geschäfte in den USA auch auf einem Server in den USA liegen und die Daten für die Geschäfte mit Europa liegen auf einem Server in Deutschland. Diese Aufteilung wird auch als Regionalisierung bezeichnet.

Bei der Vertikalen Fragmentierung werden die abhängigen Attribute (nicht-Schlüssel-Attribute) einer Tabelle in zwei oder mehrere Gruppen aufgeteilt. Aus jeder Gruppe wird eine eigene Tabelle. Jede Tabelle erhält zusätzlich alle Schlüssel-Attribute. Das kann dann sinnvoll sein, wenn alle Attribute zu einem Schlüssel ein großes Datenvolumen haben (z.B. >4KB) jedoch nur auf wenige Attribute sehr häufig zugegriffen wird. Dann kann man die wenigen häufig zugegriffenen Attribute in eine Gruppe zusammenfassen und den Rest in eine zweite Gruppe zusammenfassen.

Partitionierung

Partitionierung ist ein Spezialfall der horizontalen Fragmentierung.

Große Datenbestände lassen sich leichter administrieren, wenn die Daten einer Relation in mehrere kleine Teile (=Partitionen) aufgeteilt und diese separat gespeichert werden. Wenn eine Partition einer Tabelle gerade aktualisiert wird, dann können andere Partitionen der Tabelle zur selben Zeit reorganisiert werden. Wenn in einer Partition ein Fehler entdeckt wird, dann kann diese einzelne Partition aus einer Datensicherung wiederhergestellt werden, während Programme auf die anderen Partitionen weiter zugreifen können. Die meisten etablierten Datenbankhersteller bieten Partitionierung an, siehe z.B. Partitionierung bei DB2 und Partitionierung bei MySQL.

Index

Die Erstellung von Indices ist auch eine redundante Datenspeicherung und damit - genau genommen - eine Denormalisierung. Der Vorteil eines Index liegt darin, dass die Datenbank diese Datenstruktur selber aktualisiert bei jeder Änderung der Basistabelle. Indices sind vor allem dann gut geeignet zur Performens-Steigerung, wenn die Daten selten geändert werden aber sehr oft gelesen werden. Es gibt Datenbanken, für die so viele Indices definiert wurden, dass alle Abfragen alleine aus den in den Indices gespeicherten Daten ausgeführt werden können (index only requests). Dadurch vervielfacht sich das zu speichernde Datenvolumen und Datenänderungen werden sehr aufwändig. Die Lese-Performens kann jedoch mit excelenten Zugriffszeiten glänzen.

Nachteile

Nachteilig ist oft der zusätzliche Aufwand der getrieben werden muss, um die redundanten Daten konsistent zu halten und die Gefahr von Datenanomalien auf Grund der redundanten Speicherung.

Dieser Nachteil kann jedoch in vielen Fällen praktisch aufgehoben werden, wenn es gelingt, die Aktualisierung der redundant gespeicherten Daten an das Datenbankmanagementsystem zu delegieren.

Die Datenbankhersteller bieten verschiedene Funktionen, um redundant gespeicherte Informationen automatisch zu aktualisieren.

  • Dass die Aktualisierung eines Index automatisch erfolgt, ist schon so selbstverständlich, dass man es gar nicht anders erwartet.
  • Die einzelnen Partitionen einer Tabelle können unter einem einheitlichen Tabellennamen angesprochen werden.
  • Die Vorwegnahme von Aggregationen wird durch Materialized Views unterstützt, die diese Aggregationen automatisch im erforderlichen Umfang aktualisieren.
  • Ferner gibt es Trigger, mit denen redundant gespeicherte Daten automatisch aktualisiert werden können.

Wenn das Datenbankmanagementsystem solche Aufgaben übernimmt, dann mag die Aktualisierung eines einzelnen Datensatzes dadurch nur unmerklich verlangsamt werden. Massendatenverarbeitungen können durch die Nutzung solcher Funktionen allerdings deutlich langsamer werden.

Meistens hat eine Denormalisierung einen zusätzlichen Speicherbedarf zur Folge. Oft ist man jedoch bereit, für eine Verbesserung der Performens die Kosten für zusätzlichen Speicherplatz zu tragen. Im Einzelfall muss abgewogen werden, ob die Vorteile es wert sind, die damit verbundenen Nachteile in kauf zu nehmen.