答案:设计问卷调查系统数据库需明确功能并建立核心表结构。首先确定系统支持创建问卷、设计问题、填写答卷及统计分析,对应数据实体为问卷、问题、选项、答卷和回答。使用MySQL的InnoDB引擎,创建五张表:surveys表存储问卷信息;questions表关联问卷与问题,并用question_type区分题型;options表为选择题提供选项;responses表记录每次提交;answers表存储具体回答,通过option_id和answer_text兼容不同题型。外键约束保障数据完整性,便于级联删除与结果统计。该结构灵活可扩展,新增题型只需修改枚举值,基础架构稳定清晰,适合大多数问卷场景。

搭建一个问卷调查系统的数据库,核心是设计清晰、灵活且可扩展的数据结构。MySQL 作为常用的关系型数据库,非常适合这类应用。以下是构建问卷调查系统数据库的关键步骤和表结构设计建议。
在建表前,先理清系统需要支持的功能:
基于这些功能,可以拆解出主要数据实体:问卷、问题、选项、答卷、回答。
以下是推荐的表结构设计,使用 InnoDB 引擎以支持外键和事务。
(1)问卷表(surveys)存储问卷基本信息。
CREATE TABLE surveys ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, is_active TINYINT(1) DEFAULT 1 COMMENT '是否启用' );
每个问题属于一个问卷,支持不同题型。
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
survey_id INT NOT NULL,
question_text TEXT NOT NULL,
question_type ENUM('radio', 'checkbox', 'text') NOT NULL COMMENT '题型',
sort_order INT DEFAULT 0 COMMENT '排序',
FOREIGN KEY (survey_id) REFERENCES surveys(id) ON DELETE CASCADE
);
为选择类问题(单选/多选)提供选项。
CREATE TABLE options ( id INT AUTO_INCREMENT PRIMARY KEY, question_id INT NOT NULL, option_text VARCHAR(255) NOT NULL, sort_order INT DEFAULT 0, FOREIGN KEY (question_id) REFERENCES questions(id) ON DELETE CASCADE );
记录每次用户提交的问卷实例。
CREATE TABLE responses ( id INT AUTO_INCREMENT PRIMARY KEY, survey_id INT NOT NULL, submitted_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (survey_id) REFERENCES surveys(id) );
存储用户对每个问题的具体回答。
CREATE TABLE answers ( id INT AUTO_INCREMENT PRIMARY KEY, response_id INT NOT NULL, question_id INT NOT NULL, option_id INT DEFAULT NULL COMMENT '选择类答案对应选项', answer_text TEXT COMMENT '填空类答案文本', FOREIGN KEY (response_id) REFERENCES responses(id) ON DELETE CASCADE, FOREIGN KEY (question_id) REFERENCES questions(id), FOREIGN KEY (option_id) REFERENCES options(id) );
这种设计的优势在于:
获取某问卷的所有回答数据:
SELECT s.title, q.question_text, o.option_text, a.answer_text FROM responses r JOIN answers a ON r.id = a.response_id JOIN questions q ON a.question_id = q.id JOIN surveys s ON q.survey_id = s.id LEFT JOIN options o ON a.option_id = o.id WHERE s.id = 1;
统计某个单选题各选项被选次数:
SELECT o.option_text, COUNT(a.id) as count FROM answers a JOIN options o ON a.option_id = o.id WHERE a.question_id = 10 GROUP BY o.id;
以上就是如何在mysql中搭建问卷调查系统数据库的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号