Frage

Ich versuche, um zu bestimmen, wie ich historische Transaktionsdaten gespeichert werden sollte.

Soll ich es in einer einzigen Tabelle, wo der Datensatz nur mit einem neuen Zeitstempel jedes Mal wieder eingesetzt wird?

Soll ich die historischen Daten in eine separate ‚Geschichte‘ Tabelle auszubrechen und nur aktuelle Daten halten in der ‚aktiven‘ Tabelle.

Wenn ja, wie am besten mache ich das? Mit einem Trigger, der automatisch kopiert die Daten in der History-Tabelle? Oder mit Logik in meiner Anwendung?

Update pro Welbog Kommentar:

Es werden große Mengen an historischen Daten (Hunderttausende von Zeilen - schließlich möglicherweise Millionen) sein

In erster Linie sucht und Reporting-Operationen auf den historischen Daten ausgeführt werden.

Die Leistung ist ein Anliegen. Die Durchsuchungen sollten nicht die ganze Nacht laufen müssen, um Ergebnisse zu erzielen.

War es hilfreich?

Lösung

Wenn die Anforderung ausschließlich für die Berichterstattung ist, sollten Sie einen separaten Data Warehouse aufzubauen. Auf diese Weise können Sie verwenden, Datenstrukturen wie langsam Dimensionen zu ändern, die für die historische Berichterstattung viel besser sind, aber in einem Transaktionssystem nicht gut funktionieren. Die resultierende Kombination bewegt sich auch die historische Berichterstattung aus Ihrer Produktionsdatenbank, die eine Leistung und Wartung Gewinn sein wird.

Wenn Sie diese Geschichte müssen innerhalb der Anwendung zur Verfügung stehen, dann sollten Sie irgendeine Art von Versionierung oder logischer Löschen-Funktion implementieren oder alles voll contra machen und neu formulieren (das heißen Transaktionen nie gelöscht werden, nur umgekehrt und angepasst). Sehr genau überlegen, ob Sie wirklich müssen diese, wie es wird viel Komplexität hinzuzufügen. eine Transaktionsanwendung zu machen, die die historischen Zustand rekonstruieren kann, ist wesentlich schwieriger als es aussieht. Finanz-Software (z Abschluss von Versicherungen Syteme) versagt diese viel mehr zu tun, als Sie vielleicht denken.

Wenn Sie die Geschichte allein für die Audit-Protokollierung benötigen, Schattentabellen und die Audit-Protokollierung Triggern machen. Das ist viel einfacher und robuster als zu versuchen, richtig und umfassend die Audit-Protokollierung in der Anwendung zu implementieren. Die Auslöser werden auch Änderungen an der Datenbank von Quellen außerhalb der Anwendung aufzunehmen.

Andere Tipps

Diese Frage geht entlang der Linie der Business-Logik. Kennen Sie Ihre Geschäftsanforderungen zuerst, dann von dort aus starten. Ein Data Warehouse ist eine schöne Lösung für diese Art von Situation. ETL geben Ihnen viele Möglichkeiten in mit Datenströmen zu tun. Ihr Grundkonzept der ‚Geschichte‘ vs ‚Aktiv‘ ist ganz richtig. Ihre Geschichte Daten werden effiziente und flexibler, wenn in einem Data Warehouse mit all ihren Dimensionen und Faktentabellen gehalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top