最近專案需求需要做一個自定義的問卷調查,給需要的小夥伴們分享下。
需求是 需要後臺新增自定義問卷,包括題目、題型、是否必答、選項等資訊。廢話不多說直接上成品圖。
程式碼就不貼了因為沒有什麼繁雜的邏輯,重點是資料庫的設計,這個功能最好的解決方案應該是MongoDB,我採用的是MySql,一共是 5 張表。
① 問卷表
CREATE TABLE `pro_question` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`class_id` text COMMENT '班級ID',
`title` varchar(50) DEFAULT NULL COMMENT '標題',
`desc` text COMMENT '簡介',
`end_time` date DEFAULT NULL,
`status` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '',
`created_at` timestamp NULL DEFAULT NULL COMMENT '建立時間',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COMMENT='問卷調查表';
② 題目表 question_id 關聯表①
CREATE TABLE `pro_questionnaire_topic` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(10) DEFAULT NULL COMMENT '所屬問卷id',
`title` varchar(300) NOT NULL COMMENT '題目名稱',
`is_answer` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '是否必答:0=是,1=否',
`type` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '題型:0=單選,1=多選,2=填空',
`sort` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`created_at` timestamp NULL DEFAULT NULL COMMENT '建立時間',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb4 COMMENT='問卷調查題目表';
③ 選項表 topic_id 關聯表②
CREATE TABLE `pro_question_topic_options` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`topic_id` int(10) unsigned NOT NULL COMMENT '所屬題目id',
`name` varchar(100) DEFAULT NULL COMMENT '選項名稱',
PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb4 COMMENT='問卷調查題目選項表';
④ 答案表 topic_id 關聯表②
CREATE TABLE `pro_question_answers` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`member_id` int(10) unsigned NOT NULL COMMENT '所屬使用者id',
`topic_id` int(10) unsigned NOT NULL COMMENT '所屬題目id',
`answers` text COMMENT '答案',
`created_at` timestamp NULL DEFAULT NULL COMMENT '建立時間',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='問卷調查回答表';
⑤ 使用者問卷關聯表 question_id 關聯表①
CREATE TABLE `pro_questionnaire_count` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(10) unsigned NOT NULL COMMENT '所屬問卷id',
`member_id` int(10) NOT NULL COMMENT '所屬使用者id',
`created_at` timestamp NULL DEFAULT NULL COMMENT '建立時間',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE,
KEY `normal_question_id` (`question_id`) USING BTREE,
KEY `normal_class_id` (`class_id`) USING BTREE,
KEY `normal_member_id` (`member_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='問卷調查計數表';
單選、多選、填空的答案都是一個欄位,單選的直接存答案id就可以,多選的存逗號拼接的答案id,填空直接是內容就好。
自己也是第一次弄,有好的解決方案的可以留言交流,不足之處請多指點。謝謝大家。
本作品採用《CC 協議》,轉載必須註明作者和本文連結