mySQL - Bloqueo de tablas vs bloqueo de filas

Descripción de la aplicación

Tengo una tabla que almacena identificadores que representan áreas en un mapa. Cada mapa contiene 1000 áreas.Un territorio es cualquier número de áreas de un mapa que están tocando. Los usuarios luchan por la propiedad de diferentes áreas del mapa.

Diseño de base de datos

Actualmente tengo una tabla de mapas, una tabla de territorios y una tabla de áreas.

tblMaps: MapID, MapName

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

tblAreas: AreaID (1-1000), TerrID

Por el momento, tblAreas solo almacena áreas ocupadas dentro de los mapas, no contiene 1000 registros por mapa, independientemente de si alguien lo posee.

Cuando un usuario intenta tomar posesión de algunas áreas, la aplicación debe unirse a las tres tablas y consultar todas las áreas tomadas dentro de ese mapa. Si se toma alguno de ellos, debe rechazar su intento de propiedad. Si todas las áreas están libres, se debe crear un nuevo territorio y agregar el área correspondiente en tblAreas.

Problema

Me di cuenta de que necesito un sistema basado en transacciones para que dos usuarios no intenten "poseer" el área al mismo tiempo. Ahora, por lo que puedo ver, debo bloquear toda la tabla de Área, consultar para ver si las áreas están libres, insertar un nuevo territorio y su área, confirmarla y desbloquear la tabla ... O la tabla de Áreas debe contener los 1000 Las áreas de cada mapa y el bloqueo solo deben aplicarse a las filas de ese mapa.

Esperemos que haya una mejor opción porque, por lo que puedo ver. El bloqueo de la tabla significará que no se puede acceder a todos los datos del área durante ese segundo o, si la fila está bloqueada, la tabla está llena de áreas desocupadas y desocupadas.

Respuestas a la pregunta(1)

Su respuesta a la pregunta