Database 什么';记录一般双人游戏结果的正确数据设计是什么?
假设游戏有两名玩家。每个玩家都有一个分数,最高分数获胜。用户表是不言而喻的。我想到的第一个设计如下: 匹配\u id、user1\u id、user2\u id、score1、score2 问题是,假设我想要一种快速的方法,通过win%对用户进行排名。在上表中,单个userid分散在user1\u id和user2\u id之间。它似乎需要多个查询,而且看起来很混乱。另一种方法是保留一个单独的统计表 用户id,winlossDatabase 什么';记录一般双人游戏结果的正确数据设计是什么?,database,Database,假设游戏有两名玩家。每个玩家都有一个分数,最高分数获胜。用户表是不言而喻的。我想到的第一个设计如下: 匹配\u id、user1\u id、user2\u id、score1、score2 问题是,假设我想要一种快速的方法,通过win%对用户进行排名。在上表中,单个userid分散在user1\u id和user2\u id之间。它似乎需要多个查询,而且看起来很混乱。另一种方法是保留一个单独的统计表 用户id,winloss 这使得查询变得简单,但在理论上似乎并不正确,因为stats表存储派生数
这使得查询变得简单,但在理论上似乎并不正确,因为stats表存储派生数据。有没有一种方法可以解决这个问题,它需要一个好的、干净的、理论上正确的、易于查询的数据结构?一个匹配中的每个用户都有一条记录如何?然后,主键是
match_id
和user_id
的组合。还包括一个布尔winner
字段
匹配id、用户id、分数、获胜者
虽然这不是你的要求的一部分,但这也很容易扩展到更多的玩家
查询win%只是一个问题:
SELECT winner, count(winner) FROM match_results
WHERE user_id = (some_user) GROUP BY winner;
我将有一个用户表(显然),一个名为Match的连接表,它只有Match id,还有一个事务表,它将有user\u id,Match\u id,score。因此,对于特定的匹配,将有两条记录对应于两个用户
此外,我还将在match表中存储获胜用户id的fk引用。这是一个快速找到每个用户%胜利的方法。哇,现在我在想象六边形网球场(平分和优势得分将非常复杂)和四面进球的足球比赛,而不仅仅是两个:-)