构建一个基于MySQL的问卷调查系统,关键在于合理设计数据库结构,确保数据的完整性与查询效率。下面介绍如何从零开始搭建一个基础但功能完整的问卷调查系统的数据库模型。
1. 明确系统核心模块
一个典型的问卷调查系统包含以下几个主要实体:
用户(User):管理问卷创建者和填写者 问卷(Survey):每份问卷的基本信息 问题(Question):每道题的内容和类型 选项(Option):选择题的可选答案 回答(Answer):用户提交的答案记录2. 设计数据库表结构
根据上述模块,创建对应的MySQL表:
-- 用户表
CREATE TABLE users (
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100),
);
-- 问卷表
CREATE TABLE surveys (
title VARCHAR(200) NOT NULL,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
-- 问题表
CREATE TABLE questions (
survey_id INT,
question_type ENUM('radio', 'checkbox', 'text') DEFAULT 'radio',
FOREIGN KEY (survey_id) REFERENCES surveys(id) ON DELETE CASCADE
-- 选项表
CREATE TABLE options (
question_id INT,
sort_order INT DEFAULT 0,
);
-- 回答表
CREATE TABLE answers (
survey_id INT,
option_id INT NULL,
user_ip VARCHAR(45),
FOREIGN KEY (survey_id) REFERENCES surveys(id),
FOREIGN KEY (option_id) REFERENCES options(id)
-- 获取某问卷的所有问题及选项
SELECT q.content, o.id, o.option_text
FROM questions q
LEFT JOIN options o ON q.id = o.question_id
WHERE q.survey_id = 1
ORDER BY q.sort_order, o.sort_order;
-- 统计某个选项被选中的次数
SELECT o.option_text, COUNT(*) as count
FROM answers a
JOIN options o ON a.option_id = o.id
WHERE a.question_id = 5
GROUP BY o.id;
基本上就这些。这个结构足够支撑大多数中小型问卷系统的需求,后续可根据实际扩展如逻辑跳转、定时发布、导出报表等功能。重点是打好数据库基础,后面开发才更顺畅。
