Hallo zusammen!
Ich stehe vor folgender Aufgabe:
Auf einer Website mit diversen verschiedenen Formularen (Kundenstamm,
Produkte, ...), deren Daten in einer mySQL-Datenbank gespeichert
werden, sollen sämtliche Änderungen nachvollziehbar gespeichert sein.
Bisher werden Änderungen mit einem UPDATE-Statement einfach
gespeichert.
Problem für den Auftraggeber: Er kann nicht mehr sehen,
1. welcher Wert zuvor in der Datenbank stand
2. wer hat die Änderungen vorgenommen (also welcher auf der Website
angemeldete Benutzer)
3. wann wurde diese Änderung vorgenommen.
Und zwar soll _jede_ Änderung nachvollziehbar sein, nicht nur die
letzte. Also eine Art Historie/Verlauf.
Wie kann man dies, vor allem für beliebig viele Formulare/DB-Tabellen
am besten lösen?
Zudem sind viele Formulare über mehrere DB-Tabellen mittels
Primärschlüssel verteilt (Normalform halt).
Am einfachsten wäre es natürlich, für jede betroffene Tabelle eine
"Kopie" der Tabelle anzufertigen, in welcher bei einem Update zuerst
eine Kopie des alten Eintrags erstellt wird.
Aber dieses hat viele Nachteile:
- Immenser Overhead an Daten (z.B. falls nur ein Feld geändert wurde)
- Abhängigkeiten über Indizes
Beispiel: Es wird eine Änderung an einem Produkt vorgenommen. Dieser
Datensatz enthält u.a. die ID zu dem Hersteller. Was, wenn dieser
geändert wird oder gelöscht, etc? Dann könnte man mit den Datensatz
aus der Historie nichts mehr anfangen, da es keinen Bezug mehr gibt.
Mögliche Lösung: Sämtliche Abhängigkeiten auflösen, was z.T. über
viele Tabellen geschehen müsste (Produkt -> Hersteller -> Adresse,
Produkt -> Lieferant -> Adresse ...)
Dies wäre aber nicht nur sehr komplex, sondern würde auch einen
Overhead und eine Redundanz an Daten bedeuten, die jenseits von gut
und böse sind.
Zudem müssen neue Indizes generiert werden, um die Kopien miteinander
zu verknüpfen.
Daher bin ich diese Möglichkeit sehr kritisch gegenüber.
Hat hier jemand eine bessere Idee?
Vielen Dank!