Moin!
naja, du fügst ein Feld der Tabelle hinzu, speicherst darin deine Sperrungsdaten. Die Sperrungsdaten werden erzeugt, wenn die "Adresse zum Ändern" aufgerufen wird. Ist das Feld zu dem ZEitpunkt NULL, kann eine Sperrung erfolgen, ansonsten behandelst du den anderen Zustand als Fehlerfall und erweitertst deine Programmlogik entsprechend (Redirect) o.ä.. Wenn dann erfolgreich gespeichert wurde, setzt du das Sperrfeld wieder auf NULL.
Alternativ wird beim Abrufen der Daten aus der Tabelle dieser Originalzustand mit gespeichert und beim erneuten Beschreiben zunächst die Unverändertheit der bisherigen Daten festgestellt.
Sollte sich die DB in der Zwischenzeit geändert haben, kann man zunächst in einem automatischen Schritt feststellen, ob sich die Änderung auf alle Datenfelder auswirkt, oder nur auf einzelne (z.B. zwischenzeitlich ist nur die Telefonnummer geändert worden), die vom aktuellen Bearbeitungsschritt nicht geändert wurden. In so einem Fall lassen sich beide Änderungen störungsfrei zusammenfassen.
Oder man fügt einen manuellen Bearbeitungsschritt ein, der den Originalzustand, die Änderungen des aktuellen Benutzers und die zwischenzeitlich eingetretene Änderung in der DB auflistet und eine manuelle Zusammenfügung der Daten verlangt. Sofern der automatisierte Schritt stattfindet (was nicht zwingend die beste Lösung sein muß), wären an diesem Punkt nur Felder betroffen, die von beiden Benutzern parallel und unterschiedlich geändert wurden.
Allerdings muß man beachten, dass der aktuelle Benutzer nicht unbedingt den Hintergrund der zwischenzeitlichen Bearbeitung kennt und möglicherweise einfach seine Änderung in die Datenbank packt, ohne zu recherchieren, welche Information (seine oder die des zwischenzeitlichen Bearbeiters) denn korrekt ist.
- Sven Rautenberg
"Love your nation - respect the others."