Hallo #,
habe gerade einen netten Problem.
Ein logischer Datensatz soll gesperrt werden,
logisch deshalb, weil das zu speichernde Objekt
intern in mehrere Tabellen gespeichert wird.
Ich kenne "Ich sperre, also bin ich" (Entwickler von anno dazumal).
Dort wurd in etwa folgendes gemacht:
- Lock-Tabelle
- Lock-Eintrag wird versucht eizutragen
(unique index sichert die Eindeutigkeit des Log-Eintrag ab)
- per Timer Lock-Datum ständig aktualisieren
(falls Rechner abstürzt, kann eine zu alte Sperre ignoriert werden)
Wo ich gerade hänge, war die Forderung "read commited" als TIL einzustellen.
Reicht denn der unique index nicht aus ?
Spätestens beim Commit der Transaktion knallt es doch, und man kann dem User sagen
"Datensatz gesperrt".
Die Frage ist also:
Reicht ein unqiue index aus, um die Eindeutigkeit eines Datensatzes zu gewährleisten ?
Ich denke: ja.
Heiko
PS:
Bitte keine Sprüche wie "update table set id=1 where id=1 ".
Der Datensatz muss auch gesperrt werden, wenn er noch gar nicht existiert,
der Nutzer also noch nicht gespeichert hat.
(Ich speicher nicht die
DB-ID direkt, das hat andere Gründe).