온라인 muiltiplayer 보드 게임 &에 SQL 서버 질문이 있습니다.1 대 n 관계를 적용하는 방법
게임에 2 명의 플레이어가 있다고 가정합니다. 게임이 생성되면 작성자가 첫 번째 사용자로 추가됩니다.
이 시점에서 두 명의 사용자가 동시에 게임에 참가하려고 할 수 있습니다. 이러한 사용자 중 한 명이 차단되어야합니다. 다음과 같이
내 데이터베이스 스키마는 다음과 같습니다
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에서 키 범위 잠금과 같은 소리가 적합 할 것입니다.
- 3 대 플레이어를 추가하려는 시도가 실패 할 수 있도록 1 대 2 관계를 강화하는 방법.
나는이 접근법을 끝내었다. 'SET 트랜잭션 격리 수준 SERIALIZABLE INSERT INTO PlayersInGame을 BEGIN (<게임 게임 ID = @GameId FROM MaxPlayers을 선택 PlayersInGame 게임 ID = @GameId로부터 SELECT COUNT (*)) TRANSACTION IF를 BEGIN : 쿼리는 같은 것이 있었다. .. 는 TRAN RETURN 0 END 롤백 TRAN에게 RETURN을 COMMIT -1 '답장을 보내 – Buurin