我有一个存储的ID代表在地图上区域的表。每个地图包含1000个区域。 一个地区是一个地图的任何数量的地区的触摸。用户争夺地图不同区域的所有权。
数据库设计
目前,我有地图,表格,领土的一张桌子和地区的表。
tblMaps: MapID, MapName
tblTerritories: TerrID (unique game wide), MapID, OwnerID, Status, Modified
tblAreas: AreaID (1-1000), TerrID
此刻tblAreas只在地图内存储占用区域 - 不管是否有人拥有它,它不包含每个地图1000条记录。
当用户试图获取某些区域的所有权时,应用程序必须加入这三个表格并查询该地图内的所有拍摄区域。如果其中任何一个被采纳,它应该拒绝他的所有权尝试。如果所有区域都空闲,应创建一个新的区域,并在tblAreas中添加相关区域。
问题
我意识到我需要一个基于事务的系统,使两个用户不能在同一时间尝试“自己”的区域。现在据我所见,我必须锁定整个区域表格,查询区域是否空闲,插入新的区域和区域,提交它并解锁表格......或区域表格应包含全部1000每个地图的区域和锁应该应用于该地图的行。
希望有更好的选择,因为据我所见。锁定表格将意味着所有的区域数据在第二秒内无法访问,或者在行锁定时,表格中充满了无用的未占用区域。
我很困惑 - 究竟是什么区域?地图,我明白。地区只是地图的一个细分部分,可以拥有(我认为?)。区域是一组领土吗?或者是一个地区的一组地区? –
对不起,我已编辑它..地图由1000个区域组成。领土是由一个用户拥有的相邻区域的集合。 – Mark
+1好问题... –