it-swarm.com.de

Wann sollten Sie denormalisieren?

Ich denke, wir sind alle mit Datenbanknormalisierung vertraut.

Meine Frage lautet: Welche Richtlinien verwenden Sie, wenn Sie die Tabellen denormalisieren möchten?

47
Richard

Denormalisieren, wenn es OLAP Operationen, normalisieren, wenn OLTP (aus dem verlinkten Artikel unter Abschnitt Denormalisierung)

Datenbanken für die Online-Transaktionsverarbeitung (OLTP) sind in der Regel stärker normalisiert als Datenbanken für die Online-Analyseverarbeitung (OLAP). OLTP Anwendungen zeichnen sich durch ein hohes Volumen kleiner Transaktionen aus, z. B. das Aktualisieren eines Verkaufsdatensatzes an einem Supermarktkassenschalter. Es wird erwartet, dass jede Transaktion die Datenbank in einem konsistenten Zustand verlässt. Datenbanken, die für OLAP-Vorgänge bestimmt sind, sind hauptsächlich "meistens gelesene" Datenbanken. OLAP-Anwendungen extrahieren in der Regel historische Daten, die sich über einen langen Zeitraum angesammelt haben Datenbanken, redundante oder "denormalisierte" Daten können Business-Intelligence-Anwendungen erleichtern. Insbesondere enthalten Dimensionstabellen in einem Sternschema häufig denormalisierte Daten. Die denormalisierten oder redundanten Daten müssen während der Verarbeitung zum Extrahieren, Transformieren, Laden (ETL) sorgfältig kontrolliert werden, und Benutzer sollten dies tun Es ist nicht gestattet, die Daten zu sehen, bis sie sich in einem konsistenten Zustand befinden. Die normalisierte Alternative zum Sternschema ist das Schneeflockenschema. In vielen Fällen hat der Bedarf an Denormalisierung nachgelassen, da Computer und RDBMS-Software geworden sind e leistungsfähiger, aber da das Datenvolumen im Allgemeinen zusammen mit der Hardware- und Softwareleistung gestiegen ist, verwenden OLAP-Datenbanken häufig immer noch denormalisierte Schemata.

Die Denormalisierung wird auch verwendet, um die Leistung auf kleineren Computern wie in computergesteuerten Registrierkassen und mobilen Geräten zu verbessern, da diese die Daten möglicherweise nur zum Nachschlagen verwenden (z. B. Preissuchen). Die Denormalisierung kann auch verwendet werden, wenn für eine Plattform (z. B. Palm) kein RDBMS vorhanden ist oder keine Änderungen an den Daten vorgenommen werden sollen und eine Antwort von Swift ist entscheidend).

35
billinkc

Normalisieren, bis es weh tut, denormalisieren, bis es funktioniert (d. H.: Leistung wird akzeptabel) :)

25
Andrei Rînea

Ein potenziell sinnvoller Grund für die Anwendung der kontrollierten Denormalisierung besteht darin, dass Sie eine Integritätsbeschränkung auf die Daten anwenden können, die sonst nicht möglich wären. Die meisten SQL-DBMS unterstützen Einschränkungen mit mehreren Tabellen nur sehr eingeschränkt. In SQL besteht die einzig wirksame Möglichkeit, bestimmte Einschränkungen zu implementieren, manchmal darin, sicherzustellen, dass die an der Einschränkung beteiligten Attribute alle in derselben Tabelle vorhanden sind - selbst wenn die Normalisierung vorschreibt, dass sie in separate Tabellen gehören.

Controlled Denormalisierung bedeutet, dass Mechanismen implementiert werden, um sicherzustellen, dass aufgrund redundanter Daten keine Inkonsistenzen auftreten können. Die Kosten dieser zusätzlichen Kontrollen und das Risiko inkonsistenter Daten müssen berücksichtigt werden, wenn entschieden wird, ob sich eine Denormalisierung lohnt.

Ein weiterer häufiger Grund für die Denormalisierung besteht darin, eine Änderung der Speicherstrukturen oder eine andere physikalische Optimierung zuzulassen, die das DBMS sonst nicht zulassen würde. Nach dem Prinzip Physical Data Independence sollte ein DBMS die Möglichkeit haben, interne Speicherstrukturen zu konfigurieren, ohne die logische Darstellung von Daten in der Datenbank unnötig zu ändern. Leider beschränken viele DBMS die physischen Implementierungsoptionen, die für ein bestimmtes Datenbankschema verfügbar sind, sehr stark. Sie neigen dazu, die Unabhängigkeit der physischen Datenbank zu beeinträchtigen, indem sie nur eine suboptimale Implementierung des gewünschten logischen Modells unterstützen.

Es sollte offensichtlich sein, aber es muss noch gesagt werden: In allen Fällen können nur Änderungen der physischen Implementierungsfunktionen die Leistung bestimmen - Funktionen wie interne Datenstrukturen, Dateien, Indizierung, Hardware usw. Normalisierung und Denormalisierung haben nichts mit Leistung oder Speicheroptimierung zu tun.

15
nvogel

Denormalisieren Sie, wenn Sie häufig auf berechnete Daten zugreifen, wie in den Antworten auf diese Frage vorgeschlagen. Die Kosten für das Speichern und Verwalten der berechneten Daten sind häufig geringer als die Kosten für das erneute Berechnen, wenn Ihr Lastprofil schwer lesbar ist.

4
Nick Chammas

Ich denormalisiere routinemäßig, damit ich die Datenintegrität mit Einschränkungen erzwingen kann. Ein Beispiel ist eine aktuelle Frage auf dieser Site - Ich repliziere eine Spalte in einer anderen Tabelle, damit ich sie mit einer CHECK-Einschränkung mit einer anderen Spalte vergleichen kann. Ein weiteres Beispiel für diese Technik ist mein Blog-Beitrag .

Sie können CHECK-Einschränkungen nicht zum Vergleichen von Spalten in verschiedenen Zeilen oder Tabellen verwenden, es sei denn, Sie verpacken solche Funktionen in skalare UDFs, die von einer CHECK-Einschränkung aufgerufen werden. Was ist, wenn Sie tatsächlich Spalten in verschiedenen Zeilen oder in verschiedenen Tabellen vergleichen müssen, um eine Geschäftsregel durchzusetzen? Angenommen, Sie kennen die Arbeitszeiten eines Arztes und möchten sicherstellen, dass alle Termine innerhalb der Arbeitszeiten liegen? Natürlich können Sie einen Auslöser oder eine gespeicherte Prozedur verwenden, um diese Geschäftsregel zu implementieren, aber weder ein Auslöser noch eine gespeicherte Prozedur können Ihnen eine 100% ige Garantie dafür geben, dass alle Ihre Daten sauber sind - jemand kann Ihren Auslöser deaktivieren oder löschen, einige eingeben verschmutzte Daten und aktivieren oder erstellen Sie Ihren Trigger erneut. Außerdem kann jemand Ihre Tabelle direkt ändern und gespeicherte Prozeduren umgehen. In beiden Fällen kann es vorkommen, dass Daten gegen Ihre Geschäftsregeln verstoßen, ohne dass Sie davon erfahren.

Lassen Sie mich zeigen, wie diese Geschäftsregel nur mit FK- und CHECK-Einschränkungen implementiert wird. Dadurch wird sichergestellt, dass alle Daten die Geschäftsregel erfüllen, solange alle Einschränkungen vertrauenswürdig sind.

Ein weiteres Beispiel ist ein Weg, um zu erzwingen, dass Zeiträume keine Lücken und keine Überlappungen aufweisen .

3
A-K