Sei molto vicino al tuo design, ma non del tutto.
Prima di tutto, il tuo tavolo evento deve contenere il numero di biglietti ancora disponibili per il tuo evento (oltre a qualsiasi altra cosa tu voglia lì).
In secondo luogo, la tua tabella di deposito a garanzia deve avere una colonna DATETIME che indichi quando scade il deposito a garanzia. Devi impostare quel valore ogni volta che i biglietti vanno in deposito a garanzia.
In terzo luogo, la transazione di deposito di biglietti in deposito a garanzia deve
- Blocca la riga dell'evento.
- leggi la colonna dei biglietti disponibili. (interrompi se non sono disponibili abbastanza)
- inserisci una riga nella tabella escrow
- aggiorna la riga dell'evento per diminuire la colonna dei biglietti disponibili.
- sblocca la riga dell'evento.
In quarto luogo, l'azione di completamento della vendita deve eliminare la riga di deposito a garanzia e inserire una riga di biglietto venduto. Questo non è difficile.
In quinto luogo, è necessaria un'operazione di pulizia dell'escrow. Questo deve cercare tutte le righe di deposito a garanzia che sono scadute (che hanno una data di scadenza nel passato) e, per ognuna:
- Blocca la riga dell'evento corrispondente.
- leggi il numero di biglietti depositati in garanzia dal tavolo escrow
- elimina la riga della tabella di deposito a garanzia.
- aggiorna la riga dell'evento per aumentare la colonna dei biglietti disponibili.
- sblocca la riga dell'evento.
Il trucco è avere il numero di disponibili i biglietti vengono mantenuti in modo da essere interbloccati correttamente, in modo che le condizioni di gara tra gli utenti non svendano eccessivamente il tuo evento.