资讯专栏INFORMATION COLUMN

论某教育机构考试系统设计

陈伟 / 2474人阅读

摘要:前言近期在做一套答题系统,参考了某教育机构的设计。题库名称如上述表结构,题库即为分类,所以没有过度设计。试题试题应该算是整个系统设计过程中比较繁琐的一部分了。判分到判分这步算是整个考试完成了,那是不可能的,实际完成了不到的功能。

前言

近期在做一套答题系统,参考了某教育机构的设计。本章跟大家聊聊考试系统中的核心 - 如何考试?

简单点说,所谓考试系统就是答题系统,通过答题完成进行判分后返回其答题结果即完成整个流程。

当然过程中有些数据需要存储,有些则可在后期查询计算(个人理解),如有误导请速喷

如上图所示,一套试卷有N道试题,每道试题又是由题干与选项、答案组成,这样才汇聚了完整的一套答题(考试)系统。

试卷

一次考试(问卷)则使用一套试卷,考试(问卷)与考试则为一对一的关系,而试卷与考试(问卷)则是多对多的关系

CREATE TABLE `company_paper` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "试卷名称",
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

这只是一份简单的设计,具体要看实际需求,如果是考试相关需求需要添加

考试时间 (time)

考试及格分数 (grade)

而类似字段实际不应加在试卷上,上面已经说过了试卷与考试是多对多的关系,所以上述字段应加入在考试表中。

CREATE TABLE `company_examine` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `paper_id` int(11) NOT NULL COMMENT "试卷编码",
  `start_time` int(11) NOT NULL COMMENT "开考时间",
  `time_limit` int(11) NOT NULL COMMENT "限时",
  `score` double NOT NULL COMMENT "通过分数",
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

上述为考试表,考试表通过paper_id绑定对应试卷。

题库

题库与试卷没有关系,是以试题为对象的分类管理罢了。将试题归类后在添加试卷动作时选择试题比较方便。


当然,他也是一个多对多的关系。

CREATE TABLE `company_question_database` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "题库名称",
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

如上述表结构,题库即为分类,所以没有过度设计。

试题

试题应该算是整个系统设计过程中比较繁琐的一部分了。先来看下数据表

CREATE TABLE `company_question` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `database_id` int(11) NOT NULL COMMENT "所属题库",
  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "题目",
  `option` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "选项",
  `answer` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "答案",
  `type` tinyint(4) NOT NULL DEFAULT "0" COMMENT "类型 0单选 1多选",
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

首先按照传统考试的试卷将试题分为三大部分

题干(题目)

选项

答案

这三大部分汇总为一道题,这里的option与answer选择使用序列化方式去存储

// 选项
>>> serialize (["A"=>"选项A","B"=>"选项B"])
=> "a:2:{s:1:"A";s:7:"选项A";s:1:"B";s:7:"选项B";}"
// 答案
>>> serialize (["A"])
=> "a:1:{i:0;s:1:"A";}"

没有使用json方式存储有俩点原因,自认为mysql对json的查询做的不够完善,sql写的太复杂,其后者则是扩展性不够强,低版本不兼容。

判分

到判分这步算是整个考试完成了80%,那是不可能的,实际完成了不到50%的功能。依旧引用电商相关文章的那句话

把能存储的全部存起来

判分这里是这样做的

CREATE TABLE `company_user_paper` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT "用户编码",
  `paper_id` int(11) NOT NULL COMMENT "试卷编码",
  `answer` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "答案",
  `score` double(8,2) NOT NULL DEFAULT "0.00" COMMENT "得分",
  `correct` double(8,2) NOT NULL DEFAULT "0.00" COMMENT "正确率",
  `date_length` int(11) NOT NULL DEFAULT "0" COMMENT "考试用时长",
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

见上表,将用户每次考试的动作细节全部记录,方便查询,答案这块依旧使用的序列化的方式。在检查答案时,直接反序列化计算数组差集既完成判分,获取交集也是没问题的。

$answerArr = unserialize($answer)
$successAnswerArr = unserialize($successAnswer)
array_diff($answerArr,$successAnswerArr)

考试毕竟不是一道题那么简单,你可以选择迭代去完成。如果题目数量比较大。或者用户相对集中,建议还是使用队列去异步完成判分操作并通过socket或者其他方式通知到客户端(web端)更保险一些。

致谢

本章的内容到此结束,感谢你看到这里,希望本篇可以帮到你。谢谢!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71910.html

相关文章

  • 论某教育机构考试系统设计

    摘要:前言近期在做一套答题系统,参考了某教育机构的设计。题库名称如上述表结构,题库即为分类,所以没有过度设计。试题试题应该算是整个系统设计过程中比较繁琐的一部分了。判分到判分这步算是整个考试完成了,那是不可能的,实际完成了不到的功能。 showImg(https://segmentfault.com/img/bVbiNGI?w=720&h=449); 前言 近期在做一套答题系统,参考了某教育...

    AaronYuan 评论0 收藏0
  • 当下最有价值的这18个云计算认证

    摘要:下面就让我们来看看你应该考虑哪些最受欢迎的云计算认证。是一个国际机构,负责推动云计算专业人员的标准培训和认证。目前,提供一个认证和五个云认证,范围从专业云管理员到专业云解决方案架构师。关于IT,如果说有一点可以肯定的,那就是投资云永远也不晚。随着云对IT和整个业务越来越重要,对云技能的需求也只会越来越大。但是,要证明你在这个竞争激烈的就业市场中具有所需的技能和知识,可能是一件很难的事情。如果...

    Bryan 评论0 收藏0
  • 【2022考研最后40天】要注意这4个时间节点和这5件事情

    摘要:请考生务必妥善保管个人网报用户名密码及准考证居民身份证等证件,避免泄露丢失造成损失。自主划线院校会在月陆续公布初试成绩基本要求。锁定时间到达后,如招生单位未明确受理意见,锁定解除,考生可继续填报其他志愿。 ...

    jaysun 评论0 收藏0
  • 持续的合规性,持续的迭代:如何成功地通过IT审计

    摘要:持续合规,持续迭代对于大多数学生来说,考试日是他们教育生涯中最紧张的经历之一。在您的生态系统中实现审计合规性可能是一个反复的过程,并且不必在审计到期前的五天内进行压缩。迭代的范围和执行是事情容易崩溃的地方。持续合规,持续迭代:对于大多数学生来说,考试日是他们教育生涯中最紧张的经历之一。考试是对你学习、吸收和反刍课程能力的半公开声明,虽然及格的奖励相当平凡,但失败的后果是巨大的。我的教育经验表...

    codercao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<