系统有一个考试模块,应该怎么保存用户的答案

目前只考虑使用mysql数据库,跟同事讨论了两种方案,一种是当用户答完题以后
所有的答案以json的形式保存为数据库的一条记录,另一种是每个答案都保存为
一条记录
各位IT大佬有没有什么建议或者思路,需要考虑到当答案保存到数据库以后,会
存在修改答案这个操作。

这个肯定要使用第二种方式的,每道题每个答案都保存为一条记录,
1.方便后期修改答案更新数据。
2.最主要的就是、在你做数据分析、数据计算的时候,json非常不利于数据聚合操作,
比如计算某道题目的正确性、某些人题目正确性分布等等时JSON很不好处理。
3.保存为JSON没有任何优势、来回还要解析、也不能节约多少空间,MYSQL很强大,不用担心数据量的问题,
很多办法解决,以后数据量大了分区就好。

总之、第二种。

我们之前也做过你这个类似的功能,我们采用的是第二种方式,表结构是:

CREATE TABLE `AnswerResult` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录ID',
  `MemberId` int(11) NOT NULL COMMENT '成员ID',
  `TestPaperId` int(11) NOT NULL COMMENT '试卷ID',
  `QuestionsId` int(11) NOT NULL COMMENT '题目ID',
  `Answer` varchar(512) DEFAULT NULL COMMENT '答案',
  `CreateTime` int(11) DEFAULT NULL COMMENT '答题时间  时间戳',
  `UpdateTime` int(11) DEFAULT NULL COMMENT '更新时间 时间戳',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

图片说明

后面在建1个试卷信息表,1个试题信息表与1个成员信息表与之关联,这样的结构可以实现许多复杂的查询和统计,对后面的需求变化兼容较好.

建议数据库答案表设计为: 考试人,试卷编码,试题编码,试题序列,填写答案 等,
设计原则:
1: 选择答案后保存答案,方便后期修改
2: 记录已做试题顺序,方便考题回顾
3: 保存试卷的相关信息
4: 保存考试人相关信息

建议存json,一次考试一条数据更加清晰。

建议第二种方法,数据容易统计分析,
1.数据库字段宜短不宜长,单条json串,字段长度过长,也不宜统计分析

用json,存库前进行一次编码,直接存二进制内容类似于blob。

建议您使用第二种方式,这种方式的好处是:1.存储和查询都比较方便 2.对于用户的修改完答案重新提交的操作更好把控。 后期出现BUG也好分析问题