Ci sono almeno 2 processi aziendali coinvolti qui.
Mostra posti disponibili.
Prenota un posto selezionato.
Poiché questi processi non si susseguono in modo smodato e poiché 2 persone possono selezionare la stessa sede, 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 unici, quindi il database impedirà i duplicati.
Il seguente scenario è anche possibile ma verrà preso in considerazione dall'implementazione suggerita sopra:
Supponendo che sia possibile visualizzare una vista a griglia di un determinato teatro e un determinato evento:
- Utente1 visualizza i posti disponibili (e ottiene i posti 1 e 2)
- Utente2 visualizza i posti disponibili (e ottiene i posti 1 e 2)
- L'utente1 parla un po 'con il cliente al telefono
- L'utente2 va e prenota il posto 2 per il suo cliente
- L'utente1 prova a prenotare il posto 2 per il suo cliente (perché è visibile sul suo schermo)
- L'indice univoco impedisce al passaggio 5 di spostare i dati.
Quindi tutto ciò che devi fare potrebbe essere niente più design di database corretto e scelta corretta sui vincoli.
Sono possibili altri approcci più complessi, se lo si desidera, utilizzando le code di transazione. In questo caso, le richieste vengono scritte prima in una coda, quindi viene eseguito un processo ogni n secondi, ma ciò è difficilmente necessario o pratico nel tuo caso.
La parte davvero interessante è che cosa dovrebbe mostrare la griglia elenco per l'utente 1?