私はオンラインmuiltiplayerボードゲーム&にSQLサーバの質問があります。1対nの関係を適用する方法
ゲームで2人のプレーヤーが使用できると仮定します。ゲームが作成されると、作成者が最初のユーザーとして追加されます。
この時点で、2人のユーザーがゲームに同時に参加しようとする可能性があります。これらのユーザーの1人をブロックする必要があります。次のように
私のデータベーススキーマは次のとおりです。
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.
私は二つのことのように必要な、私は感じる:
- GameIdに基づいてtbPlayersInGameをロックする方法を。これは、プレーヤーをゲームに追加する際に使用されます。私が読んだところでは、GameId上のキーレンジロックのように聞こえるのは適切でしょう。
- 3対1のプレイヤーを追加しようとする試みが失敗するように1対2の関係を強制する方法。
私はこのアプローチをとった。 「SETトランザクション分離レベルSERIALIZABLE INSERT INTO PlayersInGameをBEGIN (<ゲームGameId = @GameId FROM MaxPlayersを選択PlayersInGame GameId = @GameId FROM SELECT COUNT(*))TRANSACTION IFをBEGIN:クエリのようなものでした。 ... はTRAN RETURN 0 END ROLLBACK TRAN RETURN -1' 返信用 – Buurin