2011-01-22 27 views
2

假设游戏有两个玩家。每个球员都有一个得分和最高得分。用户表是不言而喻的。我想到的第一件设计如下:记录通用双人游戏结果的正确数据设计是什么?

match_id,user1_id,user2_id,score1,score2

的问题是假设我想取胜%排名用户的快捷方式。在上表中,单个用户ID将分散在user1_id和user2_id之间。它似乎需要多个查询,似乎很混乱。另一种方法是保持一个单独的统计数据表格

USER_ID,winloss

这使得查询很容易,但似乎并没有在理论上正确,因为统计数据表存储派生数据。有没有办法解决这个问题,这涉及到一个很好,干净的理论上正确的数据结构,这很容易查询?

回答

3

如何在比赛中为每个用户记录一条记录?主键是match_iduser_id的组合。还包括一个布尔winner字段。

match_id,USER_ID,得分,获胜者

虽然不是你要求的一部分,这也很容易地扩展到更多的玩家。

查询取胜%是一个简单的问题:

SELECT winner, count(winner) FROM match_results 
WHERE user_id = (some_user) GROUP BY winner; 
+0

哇,现在我正在想象六角网球场(得分在平手和优势等级上将非常复杂),而在所有四方都有目标的足球比赛,而不仅仅是两个:-) – paxdiablo 2011-01-22 14:51:07

0

我将有一个用户表(明显),称为与之匹配的连接表只匹配ID,这将有USER_ID,match_id事务表,得分了。因此,对于特定的比赛,将有两个记录对应于两个用户。

此外,我还会在匹配表中存储获胜的user_id的fk引用。只需快速找到每个用户的胜率即可。