Burada en az 2 iş süreci var.
Mevcut koltukları göster.
Seçili koltuk için yer ayırtın.
Bu süreçler birbirini çok fazla takip etmediğinden ve 2 kişi aynı sandalyeyi seçebileceğinden eşzamanlılık sorunu ortaya çıkmaktadır.
Eğer veritabanı tasarımınız doğru benzersiz kısıtı atarsa, aşağıdakilerin birleşimi:
-TheaterID
-SeatID
-EventID
benzersiz, sonra veritabanı çiftleri önleyecektir.
Aşağıdaki senaryo da mümkündür ancak yukarıda belirtilen uygulamalarla halledilir:
Belirli bir tiyatro ve belirli bir etkinlik için uygun bir ızgara görüntüsü varsayalım:
- Kullanıcı1 mevcut koltukları gösterir (ve 1 ve 2 numaralı koltukları alır)
- Kullanıcı2 mevcut koltukları gösterir (ve 1 ve 2 numaralı koltukları alır)
- Kullanıcı1 telefonda müşteri ile biraz konuşuyor
- Kullanıcı2 gider ve müşterisi için 2. koltukta yer alır
- Kullanıcı1 müşterisi için 2. koltukta rezervasyon yapmaya çalışır (çünkü ekranda mevcut olduğunu gösterir)
- Benzersiz dizin, 5. adımın verileri değiştirmesini önler.
Bu yüzden yapmanız gereken tek şey daha doğru bir veritabanı tasarımı ve kısıtlamalara uygun bir seçim olamaz.
İşlem kuyruklarını kullanarak isterseniz daha karmaşık yaklaşımlar da mümkündür. Bu durumda, talepler önce bir kuyruğa yazılır, sonra her n saniyede bir işlem başlatır, ancak bu sizin durumunuzda pek gerekli veya pratik değildir.
Gerçekten ilginç olan kısım, kullanıcı 1 için liste kılavuzunun göstermesi gereken şey nedir?