RegExp丶的gravatar头像
RegExp丶 2014-11-07 15:00:13

问卷表数据库设计是否合理?

问卷主表:

问卷表数据库设计是否合理?

问题表:

问卷表数据库设计是否合理?

选项表:

问卷表数据库设计是否合理?

 

回答表:

问卷表数据库设计是否合理?

 

其中选项表中文本类型问题的时候只存储类型,不存item_val

答案表中item_val如果是多选,单选 直接存储的是选项表ID,问答题的话直接就是回答内容,那么

1:统计每个问题每个选项回答人数多少这个sql如何来写 最优方式

实现如下格式

问卷表数据库设计是否合理?

 

因为不能传附件,附上sql 

 

/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.0.67-community-nt : Database - questionnaire
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`questionnaire` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `questionnaire`;

/*Table structure for table `t_answer` */

DROP TABLE IF EXISTS `t_answer`;

CREATE TABLE `t_answer` (
  `id` bigint(20) NOT NULL auto_increment COMMENT '系统ID',
  `survey_id` bigint(20) default NULL COMMENT '问卷填写情况主表ID',
  `question_id` bigint(10) default NULL COMMENT '问题ID',
  `item_val` varchar(220) default NULL COMMENT '回答内容',
  `iseq_id` bigint(1) default NULL COMMENT '20',
  `item_type` int(11) default NULL COMMENT '类型',
  `pid` int(11) default NULL COMMENT '记录答卷的 个数',
  `sessid` varchar(40) default NULL COMMENT 'sessionid',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='问卷填写情况明细表';

/*Data for the table `t_answer` */

insert  into `t_answer`(`id`,`survey_id`,`question_id`,`item_val`,`iseq_id`,`item_type`,`pid`,`sessid`) values (1,1,1,'1',1,1,1,'qqq'),(2,1,2,'4',1,2,1,'qq'),(3,1,2,'5',1,2,1,'qq'),(4,1,2,'6',1,2,1,'qq'),(5,1,3,'1',1,1,1,'22'),(6,1,4,'你们很好啊',1,3,1,'22');

/*Table structure for table `t_options` */

DROP TABLE IF EXISTS `t_options`;

CREATE TABLE `t_options` (
  `id` bigint(10) NOT NULL auto_increment,
  `survey_id` bigint(10) default NULL COMMENT '调查Id',
  `question_id` bigint(10) default NULL COMMENT '问题Id',
  `item_type` int(10) default NULL COMMENT '题目类型',
  `item_val` varchar(220) default NULL COMMENT '选项内容',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

/*Data for the table `t_options` */

insert  into `t_options`(`id`,`survey_id`,`question_id`,`item_type`,`item_val`) values (1,1,1,1,'用过'),(2,1,1,1,'没用过'),(3,1,2,2,'洗面奶'),(4,1,2,2,'护肤霜'),(5,1,2,2,'护手霜'),(6,1,2,2,'沐浴露'),(7,1,3,1,'满意'),(8,1,3,1,'不满意'),(10,1,4,3,'文本题');

/*Table structure for table `t_question` */

DROP TABLE IF EXISTS `t_question`;

CREATE TABLE `t_question` (
  `id` bigint(20) NOT NULL auto_increment COMMENT '主键',
  `survey_id` bigint(20) default NULL COMMENT '主表survey id',
  `iseq` bigint(10) default NULL COMMENT '序号 后台处理,界面不显示,用于排序,显示为第几题',
  `item_title` varchar(4000) default NULL COMMENT '题目名称',
  `item_type` char(2) default NULL COMMENT '题目类型 0:单选项目 1:多选项目 2:文本项目',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='问卷项目明细表';

/*Data for the table `t_question` */

insert  into `t_question`(`id`,`survey_id`,`iseq`,`item_title`,`item_type`) values (1,1,1,'您使用过我们的产品吗?','1'),(2,1,2,'您用过我们的那些产品','2'),(3,1,3,'您对我们的产品满意吗?','1'),(4,1,4,'您怎么评价我们的产品','3'),(5,1,5,'您给我们的产品打几分?','4');

/*Table structure for table `t_survey` */

DROP TABLE IF EXISTS `t_survey`;

CREATE TABLE `t_survey` (
  `id` bigint(20) NOT NULL auto_increment COMMENT '主键',
  `title` varchar(400) default NULL COMMENT '问卷主题',
  `remark` varchar(4000) default NULL COMMENT '备注',
  `anonymous` char(1) default NULL COMMENT '匿0: 非匿名 1:匿名名标志',
  `is_ok_look` char(1) default NULL COMMENT '完成后允许查看结果0:允许 1:不允许',
  `valid_period` bigint(10) default NULL COMMENT '发布后几天内有效',
  `start_time` datetime default NULL COMMENT '调查问卷发布的起始时间',
  `end_time` datetime default NULL COMMENT '调查问卷结束时间',
  `creator` bigint(22) default NULL COMMENT '发布人',
  `release_time` datetime default NULL COMMENT '发布日期',
  `valid_flag` char(1) default NULL COMMENT '有效标志 0:无效 1:无效 ',
  `survey_type` bigint(10) default NULL COMMENT '问卷类型  dm_survey_type',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='问卷项目主表';

/*Data for the table `t_survey` */

insert  into `t_survey`(`id`,`title`,`remark`,`anonymous`,`is_ok_look`,`valid_period`,`start_time`,`end_time`,`creator`,`release_time`,`valid_flag`,`survey_type`) values (1,'客户满意度调查','满意度调查','1','1',20,'2014-11-07 11:03:09','2014-11-07 11:03:12',1,'2014-11-07 11:03:15','1',1);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

所有回答列表(5)
RegExp丶的gravatar头像
RegExp丶  LV11 2014年11月11日

SELECT q.`item_title`,o.`item_val`,COUNT(a.id) FROM `t_options` o LEFT JOIN `t_question` q ON q.`id`=o.`question_id`
LEFT JOIN `t_answer` a  ON o.`id`=a.item_val GROUP BY o.`item_val`,q.`id`

 

之前自己数据有误 老查觉得错了  现在发现就是这么简单

评论(0) 最佳答案
woniu的gravatar头像
woniu  LV8 2014年11月10日

不是解决了么?

erlong0512的gravatar头像
erlong0512 2014年11月11日

其实,在数据库的设计上,不存在绝对的合理。

重中之重是体现在用户体验上,还有是否达到用户的要求。 

就你这些截图和代码来看,实现问卷是没有什么问题的。

h130256240的gravatar头像
h130256240  LV5 2014年11月17日

不明白為啥要多一個回答表, 

我認為可以這樣試試吧

問卷表 : 存儲問卷大概內容, 如(id, 大標題, 問卷時間, 問卷負責人, 問卷的section數量, 問卷創建時間, 刪除時間, 問卷備註, 填表人 ....  ) 

section表 問卷當中具體幾個大塊的問題吧 : (id, 問卷表id(關聯問卷), section當中的questions數量, sectionc創建時間, 刪除時間....)

question表 具體的問題 : (id , section Id(關聯section), 問題, 答案, 創建時間, 刪除時間, 創建人, ....) 

貌似這樣 就不需要在單獨創建一個回答表了吧. 

希望對你有用

a7264714的gravatar头像
a7264714 2017年6月5日

楼主 请教下前台html怎么生成的

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友