2009-11-20 6 views
7

Was sind die Vor- und Nachteile der Entnormalisierung einer Unternehmensanwendungsdatenbank, da dadurch das Schreiben von Berichten vereinfacht wird?De-Normalisierung von Live-Daten für Berichte - Gut oder Schlecht?

Pro - Entwerfen von Berichten in SSRS wird wahrscheinlich "einfacher" sein, da keine Joins erforderlich sind.

Con - Die Entwicklung/Pflege der App zur Verarbeitung von de-normalisierten Daten wird durch die Duplizierung von Daten und Synchronisation schwieriger.

Andere?

+0

Ich erwäge nicht, De-Normalisierung für Sake für Berichte. Ich konstruiere ein Argument, damit ich nicht muss. –

+0

Durch die Normalisierung wird das Einfügen von Daten in eine Datenbank viel einfacher (einschließlich der Kosten, die sicherstellen, dass alles konsistent ist). Die Denormalisierung erleichtert das Abrufen von Daten aus einer Datenbank. –

Antwort

19

Denormalisierung für Berichte ist schlecht, m'kay.

Ansichten erstellen oder ein denormalisiertes Data Warehouse ist gut.

Ansichten haben die meisten meiner Berichtsanforderungen gelöst. Data Warehouses sind großartig, wenn Benutzer fast ständig Berichte generieren oder wenn Ihre Ansichten langsamer werden.

diesem Grund sollten Sie Ihre Datenbank

  1. Um die Sammlung von Beziehungen von unerwünschten Insertion zu befreien, Aktualisierung und Löschung Abhängigkeiten normalisieren wollen;
  2. Um die Notwendigkeit der Umstrukturierung der Sammlung von Beziehungen zu reduzieren, wie neue Arten von Daten eingeführt werden, und damit die Lebensdauer von Anwendungsprogrammen zu erhöhen;
  3. Um das relationale Modell für Benutzer informativer zu machen;
  4. Um die Sammlung von Relationen neutral zu den Abfragestatistiken zu machen, wo sich diese Statistiken mit der Zeit ändern können.

-E.F. Codd „Weitere Normalisierungs des Data Base Relationale Modell“ über wikipedia

+2

Ansicht ist nicht immer die Antwort, obwohl so viele sie empfehlen. Wenn Sie aufgrund eines stark normalisierten Datenbankentwurfs eine komplexe Verknüpfung haben, kann die Laufzeit für eine Ansicht inakzeptabel werden. –

+2

+1 für mKay - jk, meine Gedanken genau –

+0

Ich stimme Irwin, Ansichten werden nicht helfen, wenn das Problem Leistung – ennuikiller

6

Der einzige Zeitpunkt, an dem Sie die De-Normalisierung in Betracht ziehen sollten, ist, wenn die Zeit, die der Bericht benötigt, nicht akzeptabel ist. De-Normalisierung verursacht Konsistenzprobleme, die manchmal unmöglich zu bestimmen sind, besonders in großen Datensätzen

+0

Ich würde zustimmen und hinzufügen: Wenn Sie sich ent-normalisieren, sollten Sie auch sicherstellen, dass Sie eine Prozedur oder einen Prozess definieren, um sicherzustellen, dass alle de-normalisierten Daten synchron und aktuell gehalten werden. – FrustratedWithFormsDesigner

0

Ein weiterer Nachteil ist, dass die Daten, die wahrscheinlich nicht in Echtzeit zu sein, da es einige Zeit um die Daten zu bewegen ist von einer normalisierten Form zu gehen ein de-normalisiert. Wenn jemand möchte, dass der Bericht bis zur Sekunde der Anforderung erscheint, kann das in dieser Situation schwierig sein.

Wenn dies eine Duplizierung der Synchronisation im ursprünglichen Post ist, habe ich es leider nicht so gesehen.

+0

Eigentlich ging es nicht um Just-in-Time-De-Normalisierung. Aber die Strukturen werden permanent de-normalisiert. Um was wurde ich gebeten? –

+0

Meine Absicht war, dass sich einige Anforderungen für Berichte im Laufe der Zeit ändern können und während der Bericht im Moment für jeden Monat oder jedes Quartal erstellt werden kann, möchte jemand die Daten so schnell wie möglich erhalten und somit entsteht das Dilemma. –

+0

Ich verstehe. Momentan werden die Berichte in Echtzeit über die SSRS-Berichtsanzeige ausgeführt. Die Benutzer haben eine Reihe von Dropdowns und Feldern, über die sie die Parameter ändern und nach ihren Wünschen erneut ausführen können. Unser aktuelles normalisiertes Modell hat keine Leistungsprobleme mit diesem Echtzeitprozess. –

4

Denormalisieren Sie nicht, nur um die Komplexität in der Berichterstattung loszuwerden, es kann zu großen Problemen im Rest der Anwendung führen. Entweder erzwingen Sie nicht die Regeln, die zu schlechten Daten führen, oder wenn Sie das tun, dann können Einfügungen, Löschungen und Aktualisierungen für alle stark verlangsamt werden, nicht nur für die zwei oder drei Personen, die Berichte ausführen.

Wenn die Berichte wirklich nicht ordnungsgemäß ausgeführt werden können, erstellen Sie ein denormalisiertes Data Warehouse, und füllen Sie es in einem nächtlichen oder wöchentlichen Feed auf. Die Art von Berichten, die dies normalerweise benötigen, ist im Allgemeinen nicht wichtig, wenn die Daten aktuell sind, da es sich normalerweise um monatliche, vierteljährliche oder jährliche Berichte handelt, die große Datenmengen im Nachhinein verarbeiten (und insbesondere aggregieren).

2

Sie können beide ...Lassen Sie die normalisierte Datenbank für Anwendungen. Erstellen Sie anschließend eine denormalisierte Datenbank für Berichte und erstellen Sie eine Anwendung, die regelmäßig Daten von einer Datenbank in die andere kopiert.

Berichte müssen nicht immer die neuesten aktualisierten Daten enthalten. In den meisten Fällen können Sie problemlos alle 1 Stunde ein Update in der Berichtsdatenbank und nur einmal am Tag durchführen.

1

Jenseits der Data Warehouse und Ansichten Lösungen in anderen Antworten, die in gewisser Weise gut sind, wenn Sie bereit sind, etwas Leistung zu opfern, um eine gute bis zur letzten Sekunde Daten zu erhalten, aber immer noch eine normalisierte Datenbank möchten Wenn Sie in Oracle eine Materialized View mit Fast Refresh beim Commit oder in Sql Server verwenden, können Sie Clustered-Indizes für eine Ansicht verwenden.