本文核心内容:我之前开发了一个调查问卷项目,我分享一下自己项目构建、构思的过程。
目录
该问卷项目参考了问卷星、腾讯问卷等功能设置,库表设计参考了开源项目“调问”,调问的开源版本基于ssh项目。因此本人只借鉴了它的设计思路,并加以实现。
在这个项目的开发中,我自己承担页面布局、功能需求分析、库表设计、后端代码编写、部分前端代码。我从中学习到了,如果你想自己做一个项目,你需要清楚的了解项目的页面布局及其流程,设计出符合你要求库表并代码实现。 这个项目很简单,掌握其库表设计,即使是刚刚学完后端开发流程的人也能够完成该项目的后端开发任务。
数据库库表设计也是后端开发需要掌握的一项技能。
一:问卷调查的系统设计【简介】
题型:
展示/隐藏系统内置的题型。
题目:
1)所有的题目都存在同一个表里
2)每种题型的选项存在不同的表里
3)有的题型才有题目逻辑
单选、多选->可以根据跳转不同的题
评分题->更改评分的范围
题库:
1)题库分为:系统题库和专业题库
问卷:
1)问卷基本信息存储,问卷题目个数等基本信息;问卷回收设置,用来设置回收问卷的方式、问卷发布截止时间等等;问卷样式存储问卷展示样式。
2)问卷答案按照题型分门别类的存储在不同表里。
3)问卷分析是存储了被调研人的基本信息。
二:问卷调查的UI功能设计【简介】
1)题型管理(菜单)
控制问卷编辑页面展示的题型。
2)问卷管理(菜单)
展示所有问卷。新增、搜索、编辑、删除、发布、复制、统计、分析。
问卷列表页面
问卷编辑
题目设置
问卷发布
3)答卷分析
4)答卷统计 (统计答卷的IP,答卷时间等信息)
答卷详情页面 (回显答案)
三:问卷调查 — 项目难点【简介】
1)题目 <---------> 题型
题型是一个软控制,题目与题型无强绑定关系。
2)题目 <---------> 选项
选项属于一个题目,可以通过题目ID找到该题的所有选项。
3)题目 <---------> 问卷
在设计问卷的时候,将问卷ID固定在每个题目上 ==> 一个题目信息只属于一个问卷。可以通过问卷ID找到所有的题目。
问题:冗余题目及其选项会有很多,每个人都只能看到自己的问卷里信息。没有一个同意共用题库的概念。
解决方案:维护一个系统题库供所有用户选择。目前并没有实现。
4)问卷发布
问卷ID -> 问卷详情 【调查问卷页】
5)答卷与答案
答卷记录着问卷ID,每道题的答案记录着答卷ID、问卷ID、答案选项ID等信息。
四:问卷调查 — 项目库表【简介】
题目设计
题目类型表
CREATE TABLE `eva_question_type` (
`id` varchar(64) NOT NULL COMMENT '主键ID',
`question_type_name` varchar(255) DEFAULT NULL COMMENT '题型大类名称',
`question_type_code` varchar(255) DEFAULT NULL COMMENT '题型大类Code',
`remark` varchar(400) DEFAULT NULL COMMENT '备注',
`is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
`ord_seq` smallint(6) DEFAULT NULL COMMENT '显示顺序',
`creator` varchar(42) DEFAULT NULL COMMENT '创建用户',
`creator_name` varchar(42) DEFAULT NULL COMMENT '创建人姓名',
`created_time` varchar(30) DEFAULT NULL COMMENT '创建时间 YYYY-MM-DD HH:MM:SS',
`modifier` varchar(42) DEFAULT NULL COMMENT '最后修改用户',
`modifier_name` varchar(42) DEFAULT NULL COMMENT '最后修改人姓名',
`modified_time` varchar(30) DEFAULT NULL COMMENT '最后修改时间',
`ver` int(9) NOT NULL DEFAULT '0' COMMENT '最后版本',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='题型大类表';
题目详情表
CREATE TABLE `eva_question_detail` (
`id` varchar(64) NOT NULL COMMENT '主键Id',
`survey_id` varchar(64) DEFAULT NULL COMMENT '所属问卷、题库',
`question_name` varchar(255) DEFAULT NULL COMMENT '题目名称',
`question_content` varchar(255) DEFAULT NULL COMMENT '题目内容 ',
`keyword` varchar(255) DEFAULT NULL COMMENT '关键词',
`tag` varchar(255) DEFAULT NULL COMMENT '题库题or问卷',
`question_type_code` varchar(255) DEFAULT NULL COMMENT '题型代码',
`question_type_name` varchar(255) DEFAULT NULL COMMENT '题型名称',
`order_id` int(11) DEFAULT NULL COMMENT '排序ID',
`question_tag` int(255) DEFAULT NULL COMMENT '是否是大小题 1默认题 2大题 3大题下面的小题',
`parent_question_id` varchar(64) DEFAULT NULL COMMENT '所属大题 只有小题才有此属性 即quTag=3的题',
`answer_input_width` int(255) DEFAULT NULL COMMENT '填空的input 宽度',
`answer_input_row` int(255) DEFAULT NULL COMMENT '填空的input 行',
`check_type` varchar(255) DEFAULT NULL COMMENT '检测类型',
`paramInt01` varchar(255) DEFAULT NULL COMMENT '枚举题 枚举项数目 ,评分题起始分值',
`paramInt02` int(255) DEFAULT NULL COMMENT '评分题,最大分值',
`is_hv` int(255) DEFAULT '1' COMMENT '1水平显示 2垂直显示',
`rand_order` int(255) DEFAULT '0' COMMENT '选项随机排列 1随机排列 0不随机排列',
`is_visibled` int(255) DEFAULT '1' COMMENT '是否可见',
`is_required` int(255) DEFAULT '1' COMMENT '是否必填',
`remark` varchar(400) DEFAULT NULL COMMENT '备注',
`is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
`ord_seq` smallint(6) DEFAULT NULL COMMENT '显示顺序',
`creator` varchar(42) DEFAULT NULL COMMENT