mySQL - Blokowanie tabel a blokowanie wierszy

Opis aplikacji

Mam tabelę, która przechowuje identyfikatory, które reprezentują obszary na mapie. Każda mapa zawiera 1000 obszarów.Terytorium to dowolna liczba dotkniętych obszarów mapy. Użytkownicy walczą o prawo własności do różnych obszarów mapy.

Projekt bazy danych

Obecnie mam tabelę map, tabelę terytoriów i tabelę obszarów.

tblMaps: MapID, MapName

tblTerritories: TerrID (unique game wide), MapID, OwnerID, Status, Modified

tblAreas: AreaID (1-1000), TerrID

W chwili obecnej tblAreas przechowuje tylko zajęte obszary na mapie - nie zawiera 1000 rekordów na mapę, niezależnie od tego, czy ktoś jest jej właścicielem.

Gdy użytkownik próbuje przejąć na własność niektóre obszary, aplikacja musi połączyć się z trzema tabelami i zapytać o wszystkie obszary na tej mapie. Jeśli któryś z nich zostanie podjęty, powinien odrzucić próbę własności. Jeśli wszystkie obszary są wolne, należy utworzyć nowe terytorium i dodać odpowiedni obszar w tblAreas.

Problem

Zrozumiałem, że potrzebuję systemu opartego na transakcjach, aby dwóch użytkowników nie próbowało jednocześnie „posiadać” obszaru. O ile widzę, muszę albo zablokować całą tabelę obszaru, zapytać, czy obszary są wolne, wstawić nowe terytorium i jego obszar, zatwierdzić i odblokować tabelę ... LUB tabela Obszary powinna zawierać wszystkie 1000 obszary każdej mapy i blokady powinny być stosowane do wierszy tej mapy.

Mam nadzieję, że istnieje lepsza opcja, ponieważ o ile widzę. Zablokowanie tabeli oznacza, że ​​wszystkie dane obszarowe są niedostępne dla tej drugiej lub z blokowaniem wiersza, tabela jest pełna bezużytecznych niezajętych obszarów.

questionAnswers(1)

yourAnswerToTheQuestion