将多个值存储在一个数据库列中
问题描述:
我试图创建一个数据透视表来帮助跟踪我的应用程序中的“挑战”。基本上我有一个challenge_task
数据透视表,创建一个挑战和任务之间的关系。当处于挑战状态的用户完成我想要分辨的任务时,我可以跟踪用户的进度。存储多个用户完成挑战任务的最佳方式是什么?将多个值存储在一个数据库列中
我在数据透视表中考虑添加一个名为user_completed
的json
列来处理这个问题,并为每个完成挑战任务的用户存储user_id
。
所以challenge_task
会是什么样子
challenge_id | task_id | user_completed
这是一个好办法吗?还是有什么更适合这一点?
答
我推荐一个数据库结构是这样的:
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)
答
我不推荐Json,如果你想索引你的数据,因为Json不能被索引。 我认为你应该在用户和任务之间建立一个数据透视表,并创建必要的关系。
“在一个数据库列多个值”几乎总是一个坏主意。 – Uueerdo
@Uueerdo如果一个挑战只有两个用户,那么我应该像数据透视表上的'user_a_completed'和'user_b_completed'列一样,并在用户完成时添加'user_id' – Packy
只需每次创建一个新行。无需将多个用户标识存储在一行中。 –