0

我目前有一个 MySQL 表设置,它只保存用户的最佳分数。如果他们获得更好的分数,则更新之前的分数。我还想要一个 24 小时排行榜,它只显示最近... 24 小时内发布的分数。

想到两个选择:

1) 每个排行榜有 2 个单独的表格。一个“最佳分数”排行榜,每个用户只保存 1 个分数,一个“24 小时”排行榜,每个用户保存 1 个分数并带有时间戳。这意味着每次提交分数时都需要将其发送到 2 个表而不是 1 个,但与下一个选项相比,数据占用空间将是最小的。

2) 有 1 个表,允许为每个用户发布重复分数,为分数加上时间戳,然后简单地用我需要的数据(总体最佳分数、24 小时内的分数等)查询巨大的分数表。

有什么想法/建议吗?这是我第一次处理 PHP/MySQL,所以我不确定在设计/效率方面最好的方法是什么。

4

2 回答 2

2

对于规范化数据库,您应该只有 1 个表用于所有分数。您应该只插入,而不是更新或删除。

然后,例如,如果您想找到最高分,您可以MAX在查询中应用 a。

如果您想查找过去 24 小时内的分数,可以将其添加到您的WHERE子句中。

于 2012-11-19T00:42:27.183 回答
0

我建议只用一张表来保存最好的分数。

有两个表来解决您的问题的一些缺点是:

  • 要呈现信息,您可能需要表之间的连接(性能不如规范化表)
  • 代码的可读性和可维护性应该较差。
  • 为了保持一定的一致性,您应该使用事务来更新两者。

仅使用一张表,您应该在将在查询中使用的字段上创建索引以显示 24 排行榜。即:候选索引将是用于 WHERE 子句的时间戳。

于 2012-11-19T00:53:22.493 回答