构建在线php游戏的数据库。如何在mySQL数据库中找到2人之间的游戏

时间:2012-08-21 05:10:08

标签: php mysql database database-design

我正在使用PHP编写游戏。出于我的问题的目的,我们可以将我的游戏与iPhone上的“Words with Friends”进行比较,对于那些不熟悉游戏的人来说,这是一个在线/移动拼字游戏。游戏包括3个主要步骤:

  • 前两个用户决定开始游戏。
  • 第二,在数据库表“DATA”中创建一个新行 保存两个用户的游戏数据。
  • 第三,最后,两人重新安置到他们玩的新页面 游戏。当游戏结束时,“DATA”表中的行就是 删除和赢/输被保存并反映在“USER”表中。 与单词和朋友一样,用户可以在任何情况下拥有多个“开放游戏” 时刻。这意味着他们不必在另一场比赛之前完成一场比赛 启动。
MySQL数据库中的

背景:我将至少有两个表,一个用于标记为USER的通用播放器数据,另一个用于保持当前正在进行的游戏统计数据:DATA。每个用户在创建帐户时都会获得一个唯一的9位ID主键。

我需要一些关于用于完成这样的事情的最佳实践的建议。我有一些想法,在我看来相当原始,他们会工作,但我想使用更专业的东西。

我的一个想法是获取两个用户ID的较低数量,并将其连接到较大的ID的开头,并将其保存在数据库中。一个例子。我们有2位用户:adam和alan。他们的ID分别为123456789223456789。这两个开始一个游戏,在DATA表中创建一个GAMEID等于123456789223456789的新行。他们在比赛中途进行比赛并退出比赛。第二天他们尝试开始新游戏。数据库检查哪个用户具有较小的ID并将它们连接在一起以检查游戏记录是否已存在。它注意到已经开始的123456789223456789游戏,而不是创建一个全新的游戏,它将它们带回到他们正在进行的游戏中。

我觉得这肯定是过度杀戮,应该有一个更容易解决这个问题的方法。请欣赏,建议或提示。

1 个答案:

答案 0 :(得分:2)

将游戏与用户关联起来的简单user_games表就足够了。您甚至可以为活动标记或最后一个活动的日期时间添加。

CREATE TABLE user_games (
  user_id INT NOT NULL,
  game_id INT NOT NULL,
  UNIQUE KEY index_user_games_on_user_game (user_id, game_id),
  KEY index_user_games_on_game (game_id)
);

不要通过编写无法正确编制索引的密钥来使其过于复杂。索引是阻止你的桌子成为一个不可思议的混乱的原因。 user_id可以查询此表格以查找他们的游戏列表,game_id可以查找游戏中的用户,或者同时查看用户是否存在于游戏中。