0

我正在为成就系统创建一个数据库(就像你在暴雪游戏中看到的那样)。我想要一个显示游戏中所有成就的当前进度的 GUI,这意味着我需要为用户查询所有成就的进度才能填充 GUI。我计划取得大约 100 项成就。

这带来了一个设计问题。设计数据库和查询代码以查询约 100 位字段的进度的最佳方法是什么?

似乎蛮力方法是获取整行成就,然后对行中的每个字段进行一些硬编码字符串比较以确定我们正在处理的成就。

另一种可能的解决方案可能是基于表的列索引有一个大的 switch 语句并处理每种情况的每个成就(不需要修改表或您必须重构大量 C++ 代码)。

我很想知道你们可能对此有任何其他设计。谢谢!

4

2 回答 2

1

我建议使用 3 个表构建解决方案。这些表是用户、成就和 user_achievements。用户将通过 users 表中的 u_id 标识。成就将通过成就表中的 a_id 来标识。然后,您将通过在 user_achievements 表中插入一行来跟踪用户的成就,其中包括一个用于标识用户的 u_id 和一个用于标识成就的 a_id。user_achievements 表还将包含一个列,该列将指定给定用户的该成就的完成百分比。

于 2012-09-06T03:50:19.920 回答
0

遇到这个问题,即使它已经 5 岁了,也许有人会对以下方法感兴趣。

  • 成就通常被分解为数字(其余的,如名称,每个成就的描述可以放在站点/应用程序核心以避免膨胀数据库)。
  • 简单点,我们不是 FB,不需要单独的表格,所以在“users”表格中我们只添加 1 个单列:“Achievements”它是一个 varchar(50)。括号中的数字 (50) 将取决于您对该列的实际需求(即它存储了多少数据)。
  • 所以你最终在成就列的每个单元格中都有一个数字序列:10982039482084109384

从左到右阅读这行数字如下:用户已达到“1098 个个人资料浏览量”,收到“2039 个赞”等。可选地,添加一个分隔符以便于区分 + 以在第一个用户有 25 个赞时立即处理案例,然后是 125,然后是 2039(2 位、3 位、4 位 - 或者另一种选择是使用 0025,然后是 0125,然后是 2039,因为您知道每个成就的最大位数是 4)。但是仍然可以说我们决定使用分隔符,即逗号:

1098,2039,4820,8410,9384

然后,一旦您需要数据,只需选择属于特定用户 ID 的成就,然后(如果您添加了分隔符)

explode (',', $array)

那么您的网站 php 核心知道前 4 位数字代表“个人资料视图”,并且可以说这意味着他有一个 10 级徽章用于个人资料视图(1 个徽章代表 100 个视图)。

在此之上,您可以轻松地进行操作,而无需进一步的 SQL 查询。例如,用户想知道他获得 20 级徽章的进度,您显示:他有 1098/2000(或 55%)的进度。

此时,成就描述、名称、级别信息存储在站点核心中,而百分比则在移动中计算。

希望逻辑清晰,并且可能对社区中的任何人有用。

干杯!

于 2017-08-03T08:18:49.353 回答