2017-09-25 160 views
0

我试图创建一个数据透视表来帮助跟踪我的应用程序中的“挑战”。基本上我有一个challenge_task数据透视表,创建一个挑战和任务之间的关系。当处于挑战状态的用户完成我想要分辨的任务时,我可以跟踪用户的进度。存储多个用户完成挑战任务的最佳方式是什么?将多个值存储在一个数据库列中

我在数据透视表中考虑添加一个名为user_completedjson列来处理这个问题,并为每个完成挑战任务的用户存储user_id

所以challenge_task会是什么样子

challenge_id | task_id | user_completed 

这是一个好办法吗?还是有什么更适合这一点?

+3

“在一个数据库列多个值”几乎总是一个坏主意。 – Uueerdo

+0

@Uueerdo如果一个挑战只有两个用户,那么我应该像数据透视表上的'user_a_completed'和'user_b_completed'列一样,并在用户完成时添加'user_id' – Packy

+4

只需每次创建一个新行。无需将多个用户标识存储在一行中。 –

回答

1

我推荐一个数据库结构是这样的:

challenge: challenge_id | other data 
task: task_id | other data 
user: user_id | other data 

challenge_task: challenge_task_id | challenge_id | task_id 
       | possibly more data (such as deadline for completion) 

challenge_task_users: challenge_task_id | user_id 
        | possibly more data (such as status: accepted, in progress, completed) 
0

我不推荐Json,如果你想索引你的数据,因为Json不能被索引。 我认为你应该在用户和任务之间建立一个数据透视表,并创建必要的关系。

0

我不推荐你在一个数据库列中插入多个值。


注意:这是我的意见。只是分享我使用它的方式。

一个名为tasks_settings的表,它具有任务设置。

Example 1

,我觉得这种方式灵活,因为我随时都可以修改标题,描述和容易奖励。我也可以在这里添加2个字段valid_till和valid_for。因此,您可以在一段时间后过期,并且仅限于员工或所有用户等特殊职位。

另一台名为users_tasks

Example 2

这一个控制用户。他们是否完成了任务。这也可以实现你正在寻找的东西。

id | challenge_id | task_id | username | user_completed 

我希望这对你有帮助!

相关问题