双人游戏的数据库架构

时间:2013-06-28 01:25:28

标签: 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
  • 不幸的是,表格中的数据现在是多余的

2 个答案:

答案 0 :(得分:4)

我建议使用游戏桌,玩家桌和第三桌来建立更好的关系模型,以处理玩家与游戏的多对多关系。类似的东西:

game( game_id, date, description, .... )
player( player_id, name, .... )
player_game( player_id, game_id, score )

现在您有一个非常灵活的规范化(非冗余等)架构。

游戏的赢家是:

select max(score), player_id from player_game where game_id = 'somegame'

玩家的总分数为:

select sum(score) from player where player_id = 'someplayer'

等等......

答案 1 :(得分:0)

我肯定会为每个分数做一行(即每场比赛2行)。我会存储玩家和积分,如果我想要对手玩家/积分,我会分开查看。我几乎肯定会为每个游戏都有一个单独的表格,它会提到比赛时的内容等等。

没有冗余数据,一切都很容易收集等。