用户创建的基于复杂成就的网站的Mysql数据库设计

时间:2011-10-13 04:07:35

标签: mysql database-design data-structures

背景故事

在我提出这个问题之前的一个小故事。

  • 我正在开发一个允许人们跟踪用户的Mysql驱动网站 为“复古”游戏创造了成就。
  • 到目前为止,我一直在跟踪成就,但愿意 喜欢以荣誉为基础的自我检查为每个人打开它 系统。
  • 我的登录工作正常,所以有一个登录表,用户名 和密码。 (还有其他专栏,我不认为它的重要性 回答)。
  • 最初,我打算为每个用户创建一个表,希望如此 将成千上万,但在阅读网站上的帖子后,香港专业教育学院 明白这是一个坏主意。

问题

我的问题如下:

最有效的表格结构是什么?

  • 我希望每个用户都有一个每场比赛的成就列表 实现和未实现代表,因此他们需要能够 从预设列表中添加游戏。
  • 由于大多数人拥有超过1个游戏,因此会有多个列表。
  • 我认为这是一对多关系,但我不太确定 如何将所有元素链接在一起,以便我可以开始编写 查询。

感谢您阅读本文及所提供的任何建议。

2 个答案:

答案 0 :(得分:1)

您应该拥有用户,游戏,成就和user_achievements表。成就表中的每个条目都可以链接到游戏ID。当用户获得某个成就时,您可以在user_achievements表中添加user_id和achievement_id的条目。如果没有该用户和成就的条目,这意味着他们没有实现它。

答案 1 :(得分:0)

您可以创建多个表格来表示系统各自的各个部分。实施例。

Table 'Users':
id
username
password
usesgames

Table 'Games':
id
gamename
gamedescription

Table 'Achievements':
id
gameid
userid
achievement
points

现在,您可以创建尽可能多的用户,而不会干扰成就,反之亦然。 想象一下,你创造了两个游戏。帝国时代和帝国时代II。这些将使用

在数据库中创建
1 Age of Empires - A fun strategy game
2 Age of Empires II - Version two of a fun strategy game

让我们说,那个用户“BoomBlaster”拥有这两个游戏,你可以在用户“usesgames”tabel行中制作一个逗号分隔列表,就像这样

1,2

想象您使用PHP,您可以使用explode();函数分隔它们

$games = "1,2";
$gamesarray = explode(",",$games);

然而,对此,您现在可以连接用户和游戏toghetter以获取数据库表“成就”中的成就通过说

SElECT * FROM Achievements WHERE gameid = $gameid AND userid = $userid;

我希望你看到我的观点。 最好的祝福。 纳斯