我需要一个关于场景的建议。例如。如果一个学生正在他的家中在线进行评估测验,并且在这个测验期间......在测验中间发生了电子故障。那么在那种情况下,我们将如何管理国家。我的意思是可能的解决方案......解决方案可以是任何形式。请给出你如何处理这种情况的建议。以前,使用会话和缓存存储状态。
提前致谢。
答案 0 :(得分:1)
会话是易变的,仅用于存储可以丢失的数据。如果要保留某些数据,则应将其存储在数据库中。
答案 1 :(得分:1)
您的测验可能会在页面之间流动,每页都会将数据发送到服务器。您应该将发布的数据保存到某些持久性介质(数据库最好)。
用户是匿名的
如果您的用户在参加测验之前不需要登录,则必须以某种方式识别它们。为他们提供一个持久性cookie,其中包含您在数据库中使用的一些标识符来存储他们的答案,因此如果电源关闭并且当他们回来时您仍然能够知道他们是谁,因为cookie将自动发送给您。这里的问题当然是当多个学生使用同一台机器时会发生什么。你也必须解决这个问题。最简单的方法是让您的用户登录您的测验应用。
用户已登录
这是一个简单的案例,您只需将答案及其ID保存即可。它的工作原理类似于第一个例子,但区别在于,你知道他们究竟是谁(知道他们的名字等)。
如果是这种情况,您可能不希望为每个人创建一个单独的表来存储答案。在这种情况下,最好的方法是使用单个表模式:
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)
答案 3 :(得分:0)
简单地说,您应该将数据存储到数据库中。如果您在任何时候关心未预见的电源关闭,您应该“经常”存储数据。为每个步骤存储有关当前状态的装置,信息。每个步骤(未开始,正在进行,已完成)更新进度信息。如果用户试图再次开始相同的测验,你正在检查状态,如果它仍在进行中(意味着他没有完成它,因为失败)你允许继续。
完成这样的模型并不是那么困难。考虑到测试数据已经存在于数据库中,您必须使用诸如步骤,状态和保存数据等几个表来扩展数据库。