如何在发生电源故障时坚持学生在线测验数据

时间:2011-08-01 06:28:29

标签: asp.net session state

我需要一个关于场景的建议。例如。如果一个学生正在他的家中在线进行评估测验,并且在这个测验期间......在测验中间发生了电子故障。那么在那种情况下,我们将如何管理国家。我的意思是可能的解决方案......解决方案可以是任何形式。请给出你如何处理这种情况的建议。以前,使用会话和缓存存储状态。

提前致谢。

4 个答案:

答案 0 :(得分:1)

会话是易变的,仅用于存储可以丢失的数据。如果要保留某些数据,则应将其存储在数据库中。

答案 1 :(得分:1)

学生方面的电力故障

您的测验可能会在页面之间流动,每页都会将数据发送到服务器。您应该将发布的数据保存到某些持久性介质(数据库最好)。

重启后识别用户

  1. 用户是匿名的

    如果您的用户在参加测验之前不需要登录,则必须以某种方式识别它们。为他们提供一个持久性cookie,其中包含您在数据库中使用的一些标识符来存储他们的答案,因此如果电源关闭并且当他们回来时您仍然能够知道他们是谁,因为cookie将自动发送给您。这里的问题当然是当多个学生使用同一台机器时会发生什么。你也必须解决这个问题。最简单的方法是让您的用户登录您的测验应用。

  2. 用户已登录

    这是一个简单的案例,您只需将答案及其ID保存即可。它的工作原理类似于第一个例子,但区别在于,你知道他们究竟是谁(知道他们的名字等)。

  3. 如果你有几个测验怎么办?

    如果是这种情况,您可能不希望为每个人创建一个单独的表来存储答案。在这种情况下,最好的方法是使用单个表模式:

    UserID, QuizID, CurrentStep, Answers
    -------------------------------------
    

    这将为您提供有关用户在测验中的位置的所有信息(因此您可以在断电后继续)并将答案保存为XML数据。当测验是一个分阶段的过程并且用户返回到现有的未完成测验时,当前步骤可以帮助您。这将帮助您向他们显示第一个未完成的步骤,以便他们可以轻松地继续他们离开的地方。

    这将为您提供足够的可能性,以在同一个表中存储多个不同的测验。 XML数据可以提供简单直接的答案或分支答案。取决于你的测验是什么样的。

    您应该选择什么样的数据库?

    您可以选择MySql,Oracle或SQL Server等原理图数据库,也可以使用可能更适合您需求的document-oriented database。根据您使用的平台,您将找到合适的doc-type DB。

    基于问题库的评估

    正如你所说,你有一堆问题,我怀疑像这样的数据库架构应该支持业务流程。你有这些表:

    • Subject - 如果您有各种研究主题的集中申请,则需要此表
    • Group - 已定义问题组并与主题表相关联;小组可能是第一学期,第二学期或类似的;这些小组将有可能选择一组与某个主题相关的评估问题,并且是应该评估的小组的一部分。
    • Question - 这是实际的问题库;每个问题都有相关数据到表 Group ;此表可能有其他元数据,其中包含有关问题级别的信息,可以计入结果问题/答案点
    • Student - 你的学生最有可能登录这个应用程序,正如几位回答者在这里指出的那样,它也是推荐的方法,特别是因为我怀疑学生将使用共同设施工作站,这意味着多个学生可能正在使用同一台电脑
    • Assessment - 这是一个中心表格,其中包含有关学生参加评估测试的数据;它与学生表相关,在评估开始时有时间戳等。
    • AssessmentQuestion - 用于记录学生答案的关系表;评估开始时,会创建此表中的X个记录,这实际上指向为相应问题池中的学生选择的特定问题;它至少有三列:StudentID,QuestionID和answer(可空);如果允许学生设置不知道或类似的答案,则需要其他列;在这种情况下,将添加一个附加列AnswerState,它将与具有预定义状态的查找表相关。

    当学生开始评估并且同时发生电源故障时,您始终可以知道学生已经回答了哪些问题以及哪些问题仍然应答。

    您还可以使用其他正确答案的表格,以便评估自动进行,并在评估问题全部完成后立即给出结果。

    选择问题的算法可以通过某种方式完成,从长远来看,问题的分布均匀。

    但是你可以使系统变得更复杂,甚至更多的管理数据可以自动执行尽可能多的任务,并使它们可配置,因此它将更有用。

答案 2 :(得分:1)

  • 根据登录信息将数据存储在数据库中。
  • 将问卷分成小块(不超过10个问题)并保存在每个块之间
    • 这意味着如果断电,用户最多可以丢失10个问题,如果这是不可接受的,您可以在用户回答每个问题时将临时答案保存到cookie中(清除cookie,因为信息保存到db )
      • 这假设您可以使用cookies;如果您不被允许依赖cookie,则需要使用AJAX定期将答案发布到服务器。

答案 3 :(得分:0)

简单地说,您应该将数据存储到数据库中。如果您在任何时候关心未预见的电源关闭,您应该“经常”存储数据。为每个步骤存储有关当前状态的装置,信息。每个步骤(未开始,正在进行,已完成)更新进度信息。如果用户试图再次开始相同的测验,你正在检查状态,如果它仍在进行中(意味着他没有完成它,因为失败)你允许继续。

完成这样的模型并不是那么困难。考虑到测试数据已经存在于数据库中,您必须使用诸如步骤,状态和保存数据等几个表来扩展数据库。