Javascript 存储用户';小测验/测试答案?

Javascript 存储用户';小测验/测试答案?,javascript,json,database,algorithm,Javascript,Json,Database,Algorithm,我构建测验/测试应用程序。 它在数据库中有2个表 第一个,测验表: quizes -------- title ..... questions 问题结构 { "answer": "rightanswer", "index": 0, "question": "What is the right answer?", "answers": [ "answers1", "answers2", "answers3", "answers4" ],

我构建测验/测试应用程序。 它在数据库中有2个表

第一个,测验表

quizes
--------
title
.....
questions
问题结构

{
"answer": "rightanswer", 
"index": 0, 
"question": "What is the right answer?", 
"answers": [
     "answers1", 
     "answers2", 
     "answers3", 
     "answers4"
   ], 
}
我有单独的表来存储用户的答案(user\u answers

所以,我的问题是,存储用户答案的正确方法是什么

第一种方式:

一旦用户打开测验页面,将所有问题复制到用户回答栏。只需询问他的答案和标记,然后更新用户的答案

user_answers
-----
id
quiz_id
.....
answers
第二种方式

一旦用户打开测验页面init blueprint json:

{
  "index": 0
  "mark": 5
}
在回答之后,将此json推送到数组并更新用户\u 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;
         }
     } 
 }
for(设i=0;i
这两种方法都有缺点 在第一个问题中,你必须多次复制问题。 在第二个循环中,若测验有很多问题,那个么一个循环将花费很多时间

那么什么是正确的方法呢?

这取决于你, 除此之外,我更喜欢后者,您的第二个解决方案是一个循环,它发生在客户机上,所以它不太重要!
我认为它的速度足够快,可以在不到一秒钟的时间内生成1000个问题,这样就可以了

我可能要一张像这样的桌子

CREATE TABLE `answers` (
  `id` INTEGER NULL AUTO_INCREMENT,
  `user_id` INTEGER,
  `quiz_id` INTEGER,
  `quiz_question_id` INTEGER, 
  `answer` VARCHAR(200),
  PRIMARY KEY (`id`)
);
CREATE UNIQUE INDEX no_duplicate_answers ON answers (user_id,quiz_id,quiz_question_id);

我可以建议一个更好的方法来储存你的问题, 假设您有一个问题模式:

{ 
  "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
} 
{
“奎齐德”:10,
“qid”:0,

“answerId”:0//是时候给每个问题和每个答案一个唯一的ID了。然后给每个答案一个问题ID,然后你就有了匹配它们的关系,不管它们是怎样的stored@NickD这是我听过的最愚蠢的事“超过5000个测验”这意味着您在大约4900个测验之前就已经长出了一个JSON文件。@NickD idk您使用的数据库,但是5000个测验,即使每个测验有100个问题,10000个用户已经完成了每个测验,也会有大约500万条记录,这对于MySQL/SQLite/MariaDB/PostgreSQLPlus来说是没有问题的。您可以在有多个问题的地方合并问题在这个模式中,所有答案都是可能的