Mein Vorschlag:
a) Eine Tabelle zur Verqwaltung von Transaktionsnummern (z.B. Start, Ende, Nummer, valide). Als Name schlage ich TransaktionTable vor)
b) Alle Änderung in eine separater Tabelle (zb. ChangeTable als Name) speichern. Die Strucktur z.B. Transaktionsnummer, betroffene Tabelle, betroffenens Feld, Typ des Feldes, alter Wert, neuer Wert, Typus der Änderung[Create,Modify,Delete])
c) in der Datenbank eine Funktionalität realisieren die alle Einträge einer Transaktion aus ChangeTabelle in die eigentlichen Tabellen schreibt.
Zugriff von außen (eventuell über einen Dienst/Schnitstelle oder ähnliches gekapselt):
lesen: direkt aus den Tabellen
schreiben:
a) Transaktionsnummer holen /öffnen
b) alle Änderungen in ChangeTable zwischen speichert
c) Transaktion schließen
Knackpunkt hierbei ist die Funktionalität welche die Daten aus Changetable in die Zieltabellen schreibt.
Diese muss sogestaltet sein dass bei einem Fehler alle möglicherweise geänderten Einträge auf die in der ChangeTable zwischen gespeicherten Altwerte zurückgesetzt werden. Hierbei die 2 Sonderfälle Erzeugen eines Datensatzes (kein alter Wert vorhanden) und Entfernen eines Datensatzes (kein neuer Wert vorhanden) beachten.
Wenn Du die ChangeTable nicht löscht hast Du auch ein Logging womit Du ausgehend von einem validen Stand alle Änderungen neu einspielen kannst. Dazu dürfte aber auch eine einfache Logdatei reichen.