Du är väldigt nära din design, men inte riktigt där.
Först och främst måste ditt evenemangsbord innehålla det antal biljetter som fortfarande är tillgängliga för ditt evenemang (utöver vad du vill ha där).
För det andra måste din depositionstabell ha en DATETIME-kolumn som anger när depositionen löper ut. Du måste ställa in det värdet när biljetter går in i deposition.
För det tredje måste transaktionen med att sätta biljetter i deposition
- lås händelseraden.
- läs kolumnen för tillgängliga biljetter. (avbryt om det inte finns tillräckligt många tillgängliga)
- infoga en rad i spärrtabellen
- uppdatera händelseraden för att minska kolumnen för tillgängliga biljetter.
- lås upp händelseraden.
För det fjärde måste åtgärden för att slutföra försäljningen radera depositionsraden och infoga en såld biljettrad. Det här är inte svårt.
För det femte behöver du en depositionsrensning. Detta måste leta efter alla spärrade rader som har löpt ut (som har ett utgångsdatum i det förflutna) och för var och en:
- lås motsvarande händelserad.
- läs antalet deponerade biljetter från depositionstabellen
- ta bort depositionstabellraden.
- uppdatera händelseraden för att öka kolumnen för tillgängliga biljetter.
- lås upp händelseraden.
Tricket är att ha antalet tillgängliga biljetter underhålls på ett sätt som är korrekt låsta, så att tävlingsförhållandena mellan användare inte översäljer ditt evenemang.