2

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

  • 第一个两个用户决定开始游戏。
  • 第二,在保存两个用户的游戏数据的数据库表“DATA”中创建一个新行。
  • 第三,也是最后,两人被重新定位到他们玩游戏的新页面。当游戏结束时,“DATA”表中的行被删除,赢/输被保存并反映在“USER”表中。就像 Words with Friends 一样,用户可以随时拥有多个“打开的游戏”。这意味着他们不必在另一场比赛开始之前完成一场比赛。

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

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

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

我觉得这肯定过头了,应该有一个更简单的方法来解决这个问题。请我感谢和建议或提示。

4

1 回答 1

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查找游戏中的用户,或同时查找用户是否存在于游戏中。

于 2012-08-21T06:07:52.283 回答