mephisto-online hat geschrieben:@bfm
Kann man denn mehrere commits zurückrollen, d.h. gibt es sowas wie ne history ?
Ein commit heißt für die DB, schreibe jetzt die Daten "hart" in die Tabellen. Bis zu einem commit können (fast) alle Änderungen durch ein rollback zurückgedreht werden. Erst mit dem commit sind die Änderungen in der Datenbank auch für andere User sichtbar.
Beginne Transaktion
=> ändere Tabelle A
=> ändere Tabelle B
=> ändere Tabelle C
Beende Transaktion
==> wenn kein Fehler aufgetreten ist ==> commit ==> schreibe alle Daten hart auf die Platte
==> bei einem Fehler oder vielleicht, weil der User die Aktion abbrechen kann (Simulation der Datenänderung) ==> rollback ==> dreh alles wieder zurück wie vor Beginn Transaktion
Eine history musst wahrscheinlich selber programmieren. Da kommt es dann darauf an, was du als Ergebnis willst.
Es kann ausreichend sein, alle Änderungen einfach in einer (Logging-)Tabelle zu protokollieren: Tabelle x, Feld a, Wert alt = 1, Wert neu = 2, Datum, Uhrzeit, User
oder
in der Tabelle x hat jeder Datensatz noch ein zusätzliches Feld für "gültig ab". Falls Lücken in der Historie erlaubt sein sollen noch zusätzlich "gültig bis"
Heutige Standardsoftware bietet beides. Erstens muss nach dem BDSG feststellbar sein, wer wann welche Daten eingibt, ändert oder löscht und zweitens will man mit der historischen Datenhaltung eine Art Archivierung erreichen.
mfg