试卷随机题目随机选项数据库设计
创作时间:
作者:
@小白创作中心
试卷随机题目随机选项数据库设计
引用
CSDN
1.
https://blog.csdn.net/qq_32419139/article/details/144286761
如何做到试卷的题目选项随机:
最近接到一个需求,就是根据题库中的题目,生成试卷,不过有随机题目这种生成,可以选择多种要求,例如:各个题型的数量要求,题目乱序,选项乱序。
针对此需求,数据库表结构该如何设计,实现呢?
一、设计思路
- 首先题目的录入应该考虑,答案不能固定,应该考虑根据答案的需要来确定题目的正确性,然后选项乱序后,仍然可以根据序号,来确定正确答案
- 选项乱序后的展示效果, 例如 选项为 ABCD ,乱序后其实也应该为ABCD ,不过每个选项内容要变,所以这里也采用顺序来处理,而非固定值
- 根据题目生产试卷后,移除题目,应该不影响历史试卷,所以这里应该考虑采用一种快照方式,将题目保存到试卷中,而且要做到乱序后,明确正确答案
- 根据题目生产试卷后,修改题目,应该考虑已经生成的试卷,应该同步修改这个被修改过的题的题目内容或者选项
二、具体表设计
这里大概一共有如下几张表:题目表,题目选项表,试卷表,试卷题目关系表
题目表
CREATE TABLE `question` (
`id` bigint(20) NOT NULL COMMENT '问题id',
`title` mediumtext NOT NULL COMMENT '题干',
`question_type` varchar(55) DEFAULT NULL COMMENT '试题类型 单选 多选 填空 主观题',
`analysis` mediumtext COMMENT '试题解析',
`answer_order` tinyint(2) DEFAULT '0' COMMENT '答案严格顺序:0-不需要 1-需要(只作用于填空题)',
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id',
`del_flag` char(1) DEFAULT '0' COMMENT '0-正常,1-删除',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='题目表';
题目选项表
CREATE TABLE `question_option` (
`id` bigint(20) NOT NULL COMMENT '答案主键',
`question_id` bigint(20) NOT NULL COMMENT '问题id',
`content` varchar(255) DEFAULT NULL COMMENT '答案内容',
`answer` tinyint(1) NOT NULL DEFAULT '0' COMMENT '正确答案: 0-否 1-是',
`sort` int(4) DEFAULT NULL COMMENT '答案顺序',
`del_flag` char(1) DEFAULT '0' COMMENT '0-正常,1-删除',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='题目选项';
由于选项可以乱序,这里采用一对多实现题目和选项的关联,并标记正确答案,其中答案顺序sort与答案answer同样重要
试卷表
CREATE TABLE `assignment` (
`id` bigint(20) NOT NULL COMMENT '试卷主键',
`name` varchar(55) DEFAULT NULL COMMENT '考试名称',
`score` int(4) NOT NULL DEFAULT '100' COMMENT '考试总分值',
`mark` varchar(255) DEFAULT NULL COMMENT '作业要求',
`question_order` tinyint(2) DEFAULT '0' COMMENT '题目顺序: 0-乱序 1-有序',
`option_order` tinyint(2) DEFAULT '0' COMMENT '选项顺序: 0-乱序 1-有序 (单选,多选)',
`del_flag` char(1) DEFAULT '0' COMMENT '0-正常,1-删除',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='试卷';
试卷题目表
CREATE TABLE `assignment_item` (
`id` bigint(20) NOT NULL COMMENT '题id',
`assignment_id` bigint(20) NOT NULL COMMENT '试卷id',
`question_id` bigint(20) NOT NULL COMMENT '问题id',
`answer_json` text COMMENT '问题答案json:[{"optionId":1,"content":3,"answer":0},{"optionId":2,"content":4,"answer":1}]',
`sort` int(2) NOT NULL DEFAULT '0' COMMENT '排序',
`score` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '题目分值',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='试卷题目';
这里采用answer_json 类似json的方式,记录每个题目的选项以及正确答案,处理方式更加灵活,可以做到即使乱序后,依然能知道正确答案,当然这json内容,也是根据之前的题目和选项生成的(乱序与否均可)
总结
如上就实现了对于目前需求的数据库设计,这里简单说下,前端展示的问题:
对于题目的展示
返回的数据为(题目–对应多个题目选项),前段可以根据选项遍历,展示选项内容,根据题目是否为正确答案,选择是否标记正确选项,而选项的项目名称例如:ABCD 这种应该忽略,弱化,按照顺序根据长度,遍历的时候,按照正常 A B C D 的顺序展示即可
对于试卷中的题目展示
其实与上面同理,不同的是,这次后端需要对于题目中的 answer_json解析,解析后数据格式仍然与上面的题目中的题目选项内容保持一致,所以依然展示选项的时候,还是根据选项的长度来展示 ABCD ,然后每个后边直接展示选项内容即可,选项的正确答案,依然根据answer 为1 处理
热门推荐
地台设计:家居空间的实用美学
财务助理和出纳岗位的不同在哪里?
阿卡西记录:宇宙的生命之书
汽车随便加哪种汽油都可以吗?当然不是!加错造成发动机严重损伤
如何确认小红书账号是否被限流(从8个方面进行检测,帮助您找出被限流的原因)
昆明的保租房开始不好租了
新手必看:选购山地车的关键要素详述
重大突破!国家超算无锡中心成功复现AlphaFold3模型
有人欠40块钱不还怎么办
济公传说:是历史还是神话?
成都不限购区域盘点:哪个区域发展最好、生活配套齐全?
乙肝感染者必读!四个阶段揭示不同后果,认清自我状况守护肝健康
什么花代表歉意?如何用花卉表达歉意?
旅行中怎样合理搭配衣物
感冒药别乱吃,小心引起肝功能损害!这几种感冒药千万别一块用
郁达夫:故都的秋
如何降低或者提高家庭养鱼水体中的酸碱度?什么方式最稳定?
二极管伏安特性曲线特点图文分析
“3·15” 以案释法丨不慎买到过期食品,教你如何维权!
橄榄油的健康秘密:不同等级的橄榄油有何区别?
夫妻双双中毒!医生:无特效解毒剂!不要采!
如何检测水管漏水点
阿列夫数:一个重要的数学常数及其应用
夫妻双双中毒!医生:无特效解毒剂!不要采!
如何利用维生素K2增强骨骼和心血管健康:全面解析功效、食物、副作用及搭配营养素
广西宁明:“推普+爱国主义教育”推动铸牢中华民族共同体意识
青岛中小学集团化办学覆盖率高达85%,南北教育差距缩小
白天不发烧晚上发烧是怎么回事
吃了2只螃蟹胆固醇会高吗
腐植酸的分类和作用详解