javascript - 存储用户测验/测试答案的正确方法是什么?
问题描述
我构建测验/测试应用程序。它在数据库中有2个表。
第一个,测验表:
quizes
--------
title
.....
questions
问题结构
{
"answer": "rightanswer",
"index": 0,
"question": "What is the right answer?",
"answers": [
"answers1",
"answers2",
"answers3",
"answers4"
],
}
而且我有单独的表来存储用户的答案(user_answers)。
user_answers
-----
id
quiz_id
.....
answers
所以,我的问题是,存储用户答案的正确方法是什么。
第一种方式:
一旦用户打开测验页面,将所有问题复制到user_answers / answer列。只需质疑他的答案并标记,然后更新user_answers / answer。
第二种方式
一旦用户打开测验页面初始化蓝图 json:
{
"index": 0
"mark": 5
}
回答后将此 json 推送到数组并更新user_answers / answer,并且每次只需合并问题和答案数组,例如:
for (let i = 0; i < questions.length; i++) {
for (let j = 0; j < userAnswers.length; j++) {
if (userAnswers[j].index == i) {
questions[i].mark = userAnswers[j].mark;
}
}
}
两种方式都有缺点在第一种方式中,您必须多次复制问题。如果测验有很多问题,第二个循环将花费大量时间。
那么正确的方法是什么?
解决方案
我可以建议一种更好的方法来存储您的问题,假设您有一个问题模式:
{
"qid" : 0,
"question": "What is the answer",
"answers": [
{ "text" : "Answer one" , "isAnswer" : false },
{ "text" : "Answer two" , "isAnswer" : false },
{ "text" : "Answer three" , "isAnswer" : true }
]
}
对于答案架构
{
"quizId" : 10,
"qid" : 0,
"answerId" : 0 // <- here index , but you can take unique answer ids also for a question
}
这样你只需要运行一个循环来得到答案,或者编写一个稍微复杂的聚合查询来得到答案。
推荐阅读
- javascript - 如何检查具有特定键值的对象是否存在
- r - R:缺乏互动性
- android - 将Android项目上传到github时如何忽略资产文件夹?
- php - Laravel 8 渲染belongsToMany 关系
- python - 根据分组数据中的特定条件过滤行 - python
- docker - 其他可能的 Docker 日志位置?
- javascript - React Native,设置所选索引的ID
- excel - 用于 Excel 的 SAS 插件插入列
- android - 查找 android 库的托管位置
- java - 每次发送或接收消息时,如何使最后联系的用户出现在 recyclerview 的列表顶部?