问卷系统该如何设计

项目背景

公司原有问卷系统项目较老,项目维护修改不方便,要求用java重写一套问卷系统

项目需求

1.能够方便的与公司原有系统进行对接.能够和.net php java等后台进行对接。
2.能够实现问卷新增 问卷答案统计等需求。
3.问卷能够实现选择、填空、矩阵等题型。
4、能够实现跳题逻辑.

技术难点

1.如何方便的和公司原有系统以及.net php 系统对接
2.因为问卷数据的不确定性,怎么样在数据库存储能够做到好存好查 好统计
3.矩阵题型如何实现
4.根据预设条件进行题目跳转如何实现

参考项目

作为一个菜鸟程序员,拿到需求后首先想到的就是找一下相关的开源项目参考一下,取其精华去其糟粕,然后综合形成自己的思路.奈何github上面值得参考的开源项目并不多

参考项目1-DWSurvey 调问表单问卷系统 github标星1.4k

https://github.com/wkeyuan/DWSurvey
在这里插入图片描述
1、单独系统没有办法与其他系统进行对接。
2、每个题型的题目数据和答案数据分表存储,数据库数据存储比较细致便于查询和统计,不便于扩展,数据库我们在设计时要兼顾性能和功能,好的数据库设计是寻找二者的平衡点,这个项目数据库存储有点过于细致了。
3、矩阵题型按照行和列存储 答案存储行和列的id 数据库设计中规中矩。
4、题目跳转逻辑只设计了评分题和选择题的跳转,跳转分为控制题目显隐和跳题两种方式。
5、后台使用struts2+Hibernate,技术太老,不利于更新维护,前端是用jstl+jsp ,同样是技术太老不利于迭代,估计项目作者是个元老级工程师,虽然该项目没有完全开源,但是我们依旧能够通过已经开源的代码来猜测出来作者的整体项目设计思路

参考项目2-limesurvey强大的开源问卷系统

https://community.limesurvey.org/downloads/
在这里插入图片描述
单独的系统,社区版本php全开源,题型能满足大部分调查场景,我们重点分析一下limesurvey的数据库设计和前端实现,忽略limesurvey的细节,只关注主要逻辑的实现

创建新问卷

  1. 创建问卷
    在这里插入图片描述

  2. 创建题组
    在这里插入图片描述

  3. 创建问题
    在这里插入图片描述

  4. 编辑子问题
    在这里插入图片描述

  5. 编辑答案选项
    在这里插入图片描述

  6. 设定条件
    在这里插入图片描述

经过以上几步在数据库中形成的数据如下 (由于数据过多,只挑选一些基本流程数据进行分析)

  • 问卷表
sidowner_idgsidadminactive
34178711AdministratorY
  • 问题表
    在这里插入图片描述

  • 问题选项表
    在这里插入图片描述

  • 问题跳题逻辑表
    在这里插入图片描述

基本的问卷数据就存在这几张表中,还有一些其他的附属属性设置数据存在其他的表中,可以说数据库设计相当简洁,前端拿到问卷问题数据,问卷选项数据就可以根据问题type字段对数据进行有机的组合来形成各种问题ui,填空选择,矩阵,子问题前端都可以根据这些数据进行实现,
有意思的是问题跳转逻辑表,limesurvey的跳转逻辑是这样的,首先在数据库中存储一个表达式(例如该表中的表达式为cfieldname==A1),如果表达式成立那么id为qid的题目将会一直显示,如果表达式不成立则该题目自动隐藏。另外 这个表达式是怎么来的,cfieldname是怎么来的后面我们会讲到

参与问卷调差

  1. 答题进行问卷调查
    在这里插入图片描述

完成问卷后会发现limesurvey的问题答案在数据库是怎么存储的,会发现数据库多了一个名为lime_survey_341787的表格,表格中的数据如下
在这里插入图片描述
在这里插入图片描述
上面表格中的数据就是调查问卷的答题数据,我做了两次问卷所以产生了两条记录,看一下数据库中的表的每个字段是怎么产生的,通过分析数据得知答案的每个字段名为sid+‘X’+gid+‘X’+qid+title+scale_id,即:问卷id+‘X’+问题组id+‘X’+问题id+子问题title+答案选项的scale_id
还记得上面提到的问题跳转逻辑中的cfieldidname字段吗?就是从这里来的

总结

通过对上面两个开源项目的分析我们基本有了自己的实现思路。

  1. 前端的实现上面,项目1使用的jstl标签 项目2使用的twig模板语言,jstl标签和twig都比较贴合组件化思想。所以前端实现肯定考虑更适合做组件的vue去实现,前端页面的操作上面项目1和项目2的操作都不是很好,值得重新设计。
  2. 数据库设计方面,项目2较值得参考,项目一数据库设计虽然较详细,将各个题型都分的很细,但是不利于数据的统计查询,以及项目的扩展,项目2的数据库设计较为灵活,利于扩展,而且统计查询较为方便。
  3. 项目2的实现从数据库和后台的实现来看总体还是一个模板的思想,除去php语言本身的缺点不提,作为模板语言的php也确实适合干这个事,也正是php强大的模板思想,产生了大量的优秀的模板引擎wordpress、discuz等。
  4. 项目2的数据库虽然这样实现是个不错的方式,但是由于java和php的语言特性不一样,一个为强类型一个为弱类型,由于这样的数据库设计答案表格都是动态的,在和数据库交互以及前端交互方面java可能没有php方便。java后台的具体实现方式还有待探讨。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值