Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 什么';记录一般双人游戏结果的正确数据设计是什么?_Database - Fatal编程技术网

Database 什么';记录一般双人游戏结果的正确数据设计是什么?

Database 什么';记录一般双人游戏结果的正确数据设计是什么?,database,Database,假设游戏有两名玩家。每个玩家都有一个分数,最高分数获胜。用户表是不言而喻的。我想到的第一个设计如下: 匹配\u id、user1\u id、user2\u id、score1、score2 问题是,假设我想要一种快速的方法,通过win%对用户进行排名。在上表中,单个userid分散在user1\u id和user2\u id之间。它似乎需要多个查询,而且看起来很混乱。另一种方法是保留一个单独的统计表 用户id,winloss 这使得查询变得简单,但在理论上似乎并不正确,因为stats表存储派生数

假设游戏有两名玩家。每个玩家都有一个分数,最高分数获胜。用户表是不言而喻的。我想到的第一个设计如下:

匹配\u id、user1\u id、user2\u id、score1、score2

问题是,假设我想要一种快速的方法,通过win%对用户进行排名。在上表中,单个userid分散在user1\u id和user2\u id之间。它似乎需要多个查询,而且看起来很混乱。另一种方法是保留一个单独的统计表

用户id,winloss


这使得查询变得简单,但在理论上似乎并不正确,因为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引用。这是一个快速找到每个用户%胜利的方法。

哇,现在我在想象六边形网球场(平分和优势得分将非常复杂)和四面进球的足球比赛,而不仅仅是两个:-)