Ci sono almeno 2 processi aziendali coinvolti qui.
Mostra posti disponibili.
Prenota un posto selezionato.
Poiché questi processi non si susseguono immodificamente e poiché 2 persone possono selezionare lo stesso posto, sorge il problema della concorrenza.
Se la progettazione del database assegna il vincolo di unicità corretto in modo che la combinazione di:
-TheaterID
-SeatID
-EventID
sono univoci, quindi il database eviterà i duplicati.
È anche possibile il seguente scenario, ma sarà curato dall'implementazione suggerita sopra:
Supponendo che una vista a griglia sia disponibile per un determinato teatro e un determinato evento possano essere visualizzati:
- Utente1 visualizza i posti disponibili (e ottiene i posti 1 e 2)
- Utente2 visualizza i posti disponibili (e ottiene i posti 1 e 2)
- Utente1 parla un po 'con il cliente al telefono
- Utente2 va e prenota il posto 2 per il suo cliente
- L'utente1 tenta di prenotare il posto 2 per il suo cliente (perché mostra come disponibile sul suo schermo)
- L'indice univoco impedisce al passaggio 5 di commutare i dati.
Quindi tutto ciò che devi fare potrebbe essere niente più corretta progettazione del database e scelta corretta sui vincoli.
Altri approcci più complessi sono possibili se lo si desidera, utilizzando le code delle transazioni. In questo caso, le richieste vengono scritte prima in una coda, quindi avvia un processo ogni n secondi, ma nel tuo caso non è quasi necessario o pratico.
La parte davvero interessante è cosa dovrebbe mostrare la griglia dell'elenco per l'utente 1?