Hier sind mindestens 2 Geschäftsprozesse beteiligt.
Freie Plätze anzeigen.
Buchen Sie einen ausgewählten Sitzplatz.
Da diese Prozesse nicht maßlos aufeinander folgen und 2 Personen denselben Sitzplatz auswählen können, tritt das Problem der Parallelität auf.
Wenn Ihr Datenbankentwurf die korrekte Eindeutigkeitsbedingung zuweist, so dass die Kombination von:
-TheaterID
-SitzID
-EventID
sind eindeutig, dann verhindert die Datenbank Duplikate.
Das folgende Szenario ist ebenfalls möglich, wird jedoch von der oben vorgeschlagenen Implementierung berücksichtigt:
Angenommen, es kann eine Rasteransicht der für ein bestimmtes Theater und ein bestimmtes Ereignis verfügbaren Elemente angezeigt werden:
- Benutzer1 zeigt die verfügbaren Plätze an (und erhält die Plätze 1 und 2)
- Benutzer2 zeigt die verfügbaren Plätze an (und erhält die Plätze 1 und 2)
- Benutzer1 spricht ein wenig mit dem Kunden am Telefon
- User2 geht und bucht Platz 2 für seinen Kunden
- Benutzer1 versucht, Platz 2 für seinen Kunden zu buchen (da dies auf seinem Bildschirm als verfügbar angezeigt wird)
- Der eindeutige Index verhindert, dass Schritt 5 die Daten austauscht.
Alles, was Sie tun müssen, ist möglicherweise nichts mehr korrektes Datenbankdesign und die richtige Auswahl von Einschränkungen.
Andere komplexere Ansätze sind möglich, wenn Sie Transaktionswarteschlangen verwenden möchten. In diesem Fall werden Anforderungen zuerst in eine Warteschlange geschrieben und dann alle n Sekunden ein Prozess ausgelöst. Dies ist in Ihrem Fall jedoch kaum erforderlich oder praktisch.
Der wirklich interessante Teil ist, was das Listenraster für Benutzer 1 anzeigen soll.