我正在在線muiltiplayer棋盤遊戲&有一個SQL服務器的問題。如何執行一個1到n的關係
讓我們假設遊戲允許兩個玩家。創建遊戲時,創建者將作爲第一個用戶添加。
此時,兩個用戶可以嘗試同時加入遊戲。其中一個用戶應該被阻止。
我的數據庫架構如下:
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.
我覺得我需要兩樣東西:
- 的一種方式基礎上,遊戲ID鎖定tbPlayersInGame。這會在添加玩家到遊戲時使用。從我讀過的內容來看,它聽起來像是一個關鍵範圍的鎖(在GameId上)會是合適的。
- 一種強制執行1對2關係的方法,以便嘗試添加第3個玩家將失敗。
我最終採取了這種方法。查詢是這樣的: 「事務隔離級別設置SERIALIZABLE BEGIN TRANSACTION IF(SELECT COUNT(*)FROM PlayersInGame WHERE遊戲ID = @GameId