msc*_*cky 2 sql database-schema
让我们进行一场由两名球员(或球队)进行的比赛,其中结果由两名球员的得分表示(例如足球)。是否有一种惯用的方式将此类游戏的结果存储在关系数据库中?
我想出了两种可能的模式,但似乎都不够通用。
1. 每场比赛一排
将有一个games带有列的表格,game_id, winner, loser, winner_points, loser_points每个游戏将存储在表格的一行中。
2. 每场比赛两排
将有一个games带有列的表game_id, player, opponent, player_points, opponent_points。每个游戏将存储在表的两行中,并且它们将具有相同的game_id.
SELECT AVG(player_points) FROM games WHERE player = some_player我会建议一个更好的关系模型,其中包含一个游戏表、一个玩家表和第三个表来处理玩家与游戏的多对多关系。就像是:
game( game_id, date, description, .... )
player( player_id, name, .... )
player_game( player_id, game_id, score )
Run Code Online (Sandbox Code Playgroud)
现在您有一个非常灵活的规范化(非冗余等)模式。
要找到他的游戏赢家,您可以:
select max(score), player_id from player_game where game_id = 'somegame'
Run Code Online (Sandbox Code Playgroud)
要查找玩家的总积分,您可以:
select sum(score) from player_game where player_id = 'someplayer'
Run Code Online (Sandbox Code Playgroud)
等等...