Il y a au moins deux processus opérationnels impliqués ici.
Afficher les places disponibles.
Réservez une place choisie.
Étant donné que ces processus ne se succèdent pas de manière immodérée et que deux personnes peuvent choisir le même siège, le problème de la simultanéité se pose.
Si votre conception de base de données assigne la contrainte d'unicité correcte afin que la combinaison de:
-TheaterID
-SID
-EventID
sont uniques, la base de données empêchera les doublons.
Le scénario suivant est également possible mais sera pris en charge par la mise en œuvre suggérée ci-dessus:
En supposant qu'une vue de grille disponible pour un théâtre donné et un événement donné puisse être affichée:
- Utilisateur1 affiche les sièges disponibles (et obtient les sièges 1 et 2)
- User2 affiche les sièges disponibles (et obtient les sièges 1 et 2)
- Utilisateur1 parle un peu avec le client au téléphone
- User2 s'en va réserver le siège 2 pour son client
- L'utilisateur 1 essaie de réserver le siège 2 pour son client (car il apparaît comme disponible sur son écran)
- L'index unique empêche l'étape 5 de commuer les données.
Donc, tout ce que vous devez faire peut ne rien être de plus une conception de base de données correcte et un choix approprié de contraintes.
D'autres approches plus complexes sont possibles si vous le souhaitez, en utilisant des files d'attente de transactions. Dans ce cas, les demandes sont d'abord écrites dans une file d'attente, puis un processus est lancé toutes les n secondes, mais cela n'est guère nécessaire ou pratique dans votre cas.
La partie la plus intéressante est ce que la grille de liste pour l’utilisateur 1 devrait afficher.