ここには少なくとも2つのビジネスプロセスが関係しています。
空席を表示します。
選択した座席を予約します。
これらのプロセスは控えめに互いに追従しないため、2人が同じ座席を選択する可能性があるため、並行性の問題が発生します。
データベース設計で正しい一意性制約が割り当てられている場合、次の組み合わせになります。
-TheaterID
-SeatID
-EventID
一意である場合、データベースは重複を防ぎます。
次のシナリオも可能ですが、上記の提案された実装によって処理されます。
特定の劇場と特定のイベントで利用可能なグリッドビューを表示できると仮定すると:
- User1は利用可能な座席を表示します(そして座席1と2を取得します)
- User2は利用可能な座席を表示します(そして座席1と2を取得します)
- User1は電話で顧客と少し話します
- ユーザー2が顧客の席2を予約します
- User1は、顧客の座席2を予約しようとします(画面に空いていると表示されるため)
- 一意のインデックスにより、手順5でデータを交換できなくなります。
したがって、あなたがする必要があるのは、正しいデータベース設計と制約の適切な選択だけではないかもしれません。
必要に応じて、トランザクションキューを使用して、他のより複雑なアプローチが可能です。この場合、要求は最初にキューに書き込まれ、その後n秒ごとにプロセスを起動しますが、これはほとんど必要ないか、実用的ではありません。
本当に興味深いのは、ユーザー1のリストグリッドに何を表示するかです。