我正在建立一个样本在线考试平台(我在学习Ruby on Rails的过程中),其中包含以下规范:
第一次尝试:
student
-student_id
-name
question
-question_id
-text
option
-option_id
-text
-is_correct
-question_id
student_answer
-student_id
-question_id
-option_id
虽然我们只能存储正确的问题,但我已决定加入' option_id'在student_answer表中,以防我将来需要显示统计数据(最难的问题等)。
到目前为止,一个问题有很多选项,每个选项都属于一个问题,每次学生回答问题时都会创建一个student_answer行。
在我看来,这种方法存在一些性能问题,因为对于每个测试,我们必须选择用户给出的所有答案,将它们按question_id分组,每个问题计算它具有的正确时间已经回答,得到一组不应该显示的question_id,最后从1000个初始减去我们刚刚排除的那些中选择10个随机问题。
我的另一个想法是为每个用户提供{[0,0,1,...,1]}形式的JSON数组。每个单元格都是id匹配数组索引的问题的正确答案数,但我发现这是一个坏主意。
由于我在数据库设计方面相对初学者,我希望对我的方法有一些反馈。请随意提出与上述完全不同的方法。
非常感谢。
答案 0 :(得分:1)
我认为您可能需要在选项表中包含question_id。
一种方法是将一些处理转移到Ruby中。
答案 1 :(得分:0)
如果只有一个答案可以正确,那么为什么在选项表中存储正确性,问题记录应该包含正确答案的外键。
您描述了一些未被您的设计添加的实体。您可能不需要存储测试'但是这个,以及student_answer上的主键使得模型更容易回答有关数据的不同问题。
答案 2 :(得分:0)
我认为你有一个很好的方法,我可能也会这样做。 - symcbean确实在上面提出了一个很好的观点,但我的解决办法是在student_answer表中存储一个布尔列,以确定答案是否正确。