为具有可变数量的玩家的多人游戏设计MySQL表

时间:2014-07-21 19:32:01

标签: php mysql sql

我在多人游戏中膝盖深处,发现我正在用MySQL做一些皱眉的行动(我是数据库和PHP的初学者)。

我有一个用户表,其中包含所有相关信息,以及一个包含大部分相关信息的游戏表。我的问题是我正在为每个游戏动态创建一个包含用户ID,他们的分数和其他游戏特定数据的表。我知道这是不好的做法,所以我希望将其与我的游戏表中的单个条目合并,但由于一些问题,我无法弄清楚如何做到这一点:

  • 每个游戏可以有3-6个玩家,所以我想我必须假设最大值并且不填写条目?
  • 玩家应该可以输入多个游戏,因此在users表中只有一个“active_game”列无法使用

我一直在寻找资源,但我能找到的最好的是在列中包含“伪数组”也是不好的做法。这意味着如果我确实有一个“active_games”列,那么最好将数据设置为所有当前活动的game_id的CSV。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

您需要三张桌子:

  1. 用户相关数据集的表格。
  2. 与游戏相关的数据集的表格。
  3. 将用户分配到游戏的表格(使用ID)。
  4. <强>原因

    • 您可以设置最大值。相应数据集中游戏的玩家数量。
    • 每场比赛都不需要新牌桌。
    • 您可以为每个游戏分配每个玩家。
    • 您的数据库结构为normalized

答案 1 :(得分:1)

以下是一种可以通过简单方式安排数据库来保存此信息的方法:

表1:

PLAYERS(user_id)
Primary key: user_id

表2:

GAMES(game_id, game_type, etc.)
Primary key: game_id

表3:

PLAYER_GAME_DATA(user_id, game_id, score, active)
Primary key: user_id, game_id

因此,每个玩家都有一个玩家参赛,每个游戏都有一个GAMES条目,你将两个玩家与PLAYER_GAME_DATA联系起来,每个游戏中的每个玩家都有一个条目。 PLAYER_GAME_DATA中的user_id和game_id列将是指向前两个表的外键。

对于每个玩家和每个游戏,您可以在PLAYER_GAME_DATA中有多个条目,这是可以的。

希望这有帮助。