如何强制执行1到n的关系

Buu*_*rin 5 sql locking integrity

我正在开发一个在线muiltiplayer棋盘游戏并且有一个SQL服务器问题.

让我们假设游戏允许两个玩家.创建游戏时,创建者将被添加为第一个用户.

此时,两个用户可以尝试同时加入游戏.应阻止其中一个用户.

我的数据库架构如下:

tbGame - contains a list of all games. PrimaryKey is GameId
tbPlayers - contains a list of all registered users. PrimaryKey is PlayerId
tbPlayersInGame - contains a list of all players in each game. Foreign key 
                  relations to tbGame and tbPlayers.
Run Code Online (Sandbox Code Playgroud)

我觉得我需要两件事:

  1. 一种基于GameId锁定tbPlayersInGame的方法.这将在向游戏添加玩家时使用.从我所读到的,它听起来像一个键范围锁(在GameId上)将是合适的.
  2. 一种强制执行1对2关系的方法,以便尝试添加第3个玩家将失败.

Dyl*_*ith 1

一些建议:

1) 当您尝试写入 tbPlayersInGame 表时,首先执行 SELECT 以确保游戏未满,然后插入表。将此 SELECT 和 INSERT INTO 包装在事务中,并将事务隔离级别设置为可序列化。

2) 没有单独的 tbPlayersInGame 表,而是 tbGame 中有 2 个字段:Player1Id、Player2Id