W grę wchodzą co najmniej 2 procesy biznesowe.
Pokaż dostępne miejsca.
Zarezerwuj wybrane miejsce.
Ponieważ procesy te nie następują po sobie nadmiernie, a ponieważ 2 osoby mogą wybrać to samo miejsce, pojawia się problem współbieżności.
Jeśli projekt bazy danych przypisuje poprawne ograniczenie unikatowości, aby kombinacja:
-TheaterID
-SeatID
-EventID
są unikalne, baza danych zapobiegnie duplikowaniu.
Możliwy jest również następujący scenariusz, który zostanie rozwiązany przez powyższą sugerowaną implementację:
Zakładając widok siatki dostępnej dla danego teatru i danego zdarzenia można wyświetlić:
- Użytkownik 1 wyświetla dostępne miejsca (i otrzymuje miejsca 1 i 2)
- Użytkownik2 wyświetla dostępne miejsca (i otrzymuje miejsca 1 i 2)
- Użytkownik 1 rozmawia trochę z klientem przez telefon
- Użytkownik2 idzie i rezerwuje miejsce 2 dla swojego klienta
- Użytkownik 1 próbuje zarezerwować miejsce 2 dla swojego klienta (ponieważ pokazuje to jako dostępne na ekranie)
- Unikalny indeks uniemożliwia przejście do kroku 5 danych.
Tak więc wszystko, co musisz zrobić, to nic więcej jak poprawny projekt bazy danych i właściwy wybór ograniczeń.
W razie potrzeby możliwe są inne, bardziej złożone podejścia, przy użyciu kolejek transakcji. W takim przypadku żądania są zapisywane najpierw w kolejce, a następnie uruchamiane co n sekund, ale nie jest to konieczne ani praktyczne w twoim przypadku.
Naprawdę interesującą częścią jest to, co powinna pokazywać siatka listy dla użytkownika 1?