【问题标题】:Best practice to track progress of tasks for user in MYSQL database在 MYSQL 数据库中跟踪用户任务进度的最佳实践
【发布时间】:2016-04-11 04:46:33
【问题描述】:

所以我正在创建一个小型网络应用程序来跟踪用户完成任务时的情况。我正在努力确定布局我的数据库的最佳方式。

先有一些规则和逻辑来说明事情。有许多由颜色标识的任务。贪婪,红色,蓝色,黄色等。每个任务都有许多练习,1-40。所以green1、green2、green3等。所有的练习都有一个难度等级。我想通过将其标记为已完成来跟踪每个用户的所有任务/练习的进度。这意味着我可以计算所有已完成的任务并给他们一个任务的完成百分比。

目前我的数据库表如下所示:

每个任务(颜色)都有一个名为(颜色)任务信息的表,例如“greentaskinfo”:

+----------------------------+
| colorid  difficulty active |
| 1             H       Y    |
| 2             H       y    |
| 3             L       Y    |
| 4             L       y    |
+----------------------------+

然后对于任何颜色/任务都有一个进度表,例如 greenprogressinfo。这存储了每个用户的进度。

+-------------------------------------+
| progressid  userid colorid complete |
| 1             1       1       Y     |
| 2             1       2       Y     |
| 3             1       3       N     |
| 4             1       4       N     |
| 5             2       1       N     |
| 6             2       2       Y     |
| 7             2       3       N     |
| 8             2       4       Y     |
+-------------------------------------+

然后我可以计算有多少是完整的,其中 userid = x 和 complete = Y 并将其计算为总数的百分比。

这意味着当用户注册时,我需要为 9 个任务表自动创建 40 个条目。似乎效率不高。可能有比我看到的更多的问题。任何如何更好地设置它的专家建议将不胜感激。

【问题讨论】:

  • 为什么说需要预填充进度表;您可以在任务开始时插入带有 complete=N 的行,然后在完成时设置 complete=Y。没有行表示从未开始。
  • 另外为什么需要 9 个任务表?只有一个,并有一个颜色列。

标签: mysql database-design


【解决方案1】:

您展示的表格与您谈论任务和练习的口头要求不太一致。反映这种区别的设计如下所示:

Task
id
color

Exercise
id
task_id
difficulty
position    // if exercises should be ordered within tasks

User_Action
id
user_id
exercise_id

只要用户完成了一项练习(而不是在那之前),就创建一个 UserAction 记录。所以可以通过查询来询问用户是否完成了某项任务的所有练习

select *
from Exercise e
where task_id = givenTaskId
and not exists (
   select *
   from User_Action a
   where a.user_id = givenUser
   and a.exercise_id = e.id
)

这样您还可以获得更详细的进度信息,例如计算一项任务完成的练习次数。

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 2012-10-23
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多