Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Effektive Verwaltung von Datenänderungen

Es hört sich so an, als ob Sie versuchen, eine Temporal Database . Zeitliche Unterstützung war eine der wichtigsten Ergänzungen des ANSI/ISO SQL:2011-Standards. MySQL hinkt (wie die meisten RDBMS) dem Standard hinterher. Stellen Sie sich Temporal Database als DBMS-Äquivalent zu CVS/SVN/Git vor.

Im Gegensatz dazu kann die von uns verwendete herkömmliche Datenbank ohne zeitliche Merkmale als Aktuelle Datenbank bezeichnet werden .

In einer aktuellen Datenbank , wenn Sie versuchen, zeitliche Unterstützung zu implementieren, können Sie mit unterschiedlichen Ansätzen in vielerlei Hinsicht scheitern:

  • Der One-Table-Ansatz. Wenn Sie Änderungen vornehmen müssen, führen Sie UPDATEs durch auf Ihren Originalaufzeichnungen, und es sei denn, Sie haben eine Art selbst entwickelter Trigger-/Audit-Logik, fehlt der Verlaufspfad. Selbst wenn Sie ein Prüf-/Änderungsprotokoll haben, müssten Sie hässlich nachforschen, um den Änderungsverlauf zu rekonstruieren.

  • Der Zwei-Tabellen-Ansatz. Anstatt Änderungen vor Ort vorzunehmen, teilen Sie Ihre Daten in zwei Tabellen auf, eine mit den Basis-/Originaldatensätzen (z. B. Buchung) und eine andere Tabelle für Ihre Änderungen/Modifikationen/Deltas. Dann sind zumindest Ihre Originaldaten erhalten, aber Sie müssen wieder komplexe Logik schreiben, um die Originaldaten mit darauf geschichteten Änderungen anzuzeigen. Es wird noch schlimmer, wenn Sie nur etwas wollen der vorgenommenen Änderungen.

  • Der vorberechnete resultierende Tabellenansatz . Sie führen 3 oder mehr Tabellen:die Basisdatensätze, die Änderungen und auch eine Tabelle, die versucht, immer das Ergebnis zu haben (hält die Basis + Änderungen auf dem neuesten Stand). Viel Glück beim Schreiben der Trigger und Prozeduren, um diese Berechnung durchzuführen, wenn Sie INSERTs ausführen , und der Himmel helfe Ihnen bei einem UPDATE oder DELETE wird gebraucht. Das Setup ist anfällig und könnte aus der Synchronisierung geraten, wie z. B. Deadlocks und Rollback. Wenn Sie dies nicht innerhalb der DB mit Triggern/Prozeduren tun, könnten Sie versuchen, die resultierende Berechnung im Anwendungscode zu implementieren, aber dabei viel Glück haben - und es könnte bei Multithread-Verbrauchern hässlich werden. Und dennoch haben Sie mit einigen keinen einfachen Zugriff auf Ergebnisse Änderungen angewendet.

Fazit: Wenn Sie nicht auf MySQL beschränkt sind, sollten Sie wirklich in Betracht ziehen, eine DB mit eingebauter temporärer Unterstützung zu verwenden. Andernfalls werden Sie das Rad neu implementieren.