mysql如何设计一个问卷调查系统_mysql问卷系统设计与开发-mysql教程

问卷表与题目表应通过questionnaire_id外键关联,题目表中该字段非空并设on delete cascade,同时添加索引;若需题目复用则引入中间表。

问卷表和题目表如何用外键关联才不翻车

问卷系统最常崩在「一对多」关系设计上。别把所有题目硬塞进一张表,也别让 questionnaire_id 在题目表里允许为 NULL——这会导致查问卷时漏题或关联失败。

正确做法是两张主表加一张中间表(如果支持题目复用);若题目只归属单个问卷,直接在题目表设 questionnaire_id 外键并加索引:

CREATE TABLE questionnaire (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  status TINYINT DEFAULT 1  -- 1=启用, 0=停用
);
<p>CREATE TABLE question (
id INT PRIMARY KEY AUTO_INCREMENT,
questionnaire_id INT NOT NULL,
content TEXT NOT NULL,
type ENUM('single', 'multiple', 'text') NOT NULL,
sort_order TINYINT DEFAULT 0,
FOREIGN KEY (questionnaire_id) REFERENCES questionnaire(id) ON DELETE CASCADE
);</p><p>-- 给外键字段加索引(InnoDB 外键自动建索引,但显式声明更稳妥)
CREATE INDEX idx_question_qid ON question(questionnaire_id);
  • ON DELETE CASCADE 能避免删问卷后残留“孤儿题目”,但上线前务必确认业务是否真允许级联删除
  • 别用 TEXT 存选项内容(如单选的 A/B/C),应拆到 option 表,否则改选项时要字符串替换,极易出错
  • sort_order 用 TINYINT 足够(最多 255 题),比用 INT 节省空间且排序更快

用户答题记录怎么存才查得快又不锁表

答题记录是写多读少、但偶尔要按用户/问卷聚合统计的场景。别用一张大宽表存所有答案,更别把 JSON 字符串塞进一个字段里——后期想统计“第3题选A的人数”就得全表扫描+JSON 解析,慢且无法走索引。

推荐三张表分层存储:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » mysql如何设计一个问卷调查系统_mysql问卷系统设计与开发-mysql教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4032370+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4032370+
  • 本周更新: 0+
  • 最后更新: 2026-03-16