数据库建议用于计算玩家之间的赢/输

时间:2013-06-16 01:43:07

标签: database redundancy

跟踪数据库中所有玩家之间得分的最佳方法是什么?一名球员赢得/输掉对方的次数。

我想过一个duel表格,其中我会有3个列:duel_idwinner_idloser_id但我相信有更好的方法可以做到这一点,避免冗余。

编辑:我很抱歉不够清楚。实际上,玩家是从user表中随机挑选的。我需要知道谁赢了/输了谁。我之所以不喜欢我的解决方案,是因为在进行统计时,必须扫描整个duel表,以便返回两个玩家之间的赢/输金额。

2 个答案:

答案 0 :(得分:1)

表格有自己的id,两个外键 - player1_idplayer2_id,以及两列胜利wins_player1wins_player2

--------------------------------
| id | p1_id | p2_id | w1 | w2 |
--------------------------------
| 1  |   1   |   2   |  2 |  0 |
--------------------------------
| 2  |   1   |   3   |  1 |  1 |
--------------------------------
| ...|       |       |    |    |
--------------------------------

这样,当两个玩家玩游戏时你没有在表格中插入新的元组,你只需更新他们的分数。

例如,如果玩家1和2玩过,而玩家1赢了,你会这样做:

UPDATE scores WHERE p1_id = 1 AND p2_id = 2 SET w1 = w1 + 1;

答案 1 :(得分:0)

如果您不介意不知道谁与谁对应,您可以在用户数据表中添加total_wins列,并在每次匹配后为每个用户增加。

它具有不占用太多空间的优点。

但是如果你有一个非常大的应用程序,你的数据库可能会锁定很多查询和写入