王新阳

wangxinyang

调查问卷系统的基本表结构

### 1. **通用表结构**
   - **问卷表(surveys)**:存储问卷的基本信息。
     ```sql
     CREATE TABLE surveys (
         id INT AUTO_INCREMENT PRIMARY KEY,
         title VARCHAR(255) NOT NULL,
         description TEXT,
         created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
     );
     ```


   - **问题表(questions)**:存储每个问卷的问题。
     ```sql
     CREATE TABLE questions (
         id INT AUTO_INCREMENT PRIMARY KEY,
         survey_id INT NOT NULL,
         question_text TEXT NOT NULL,
         question_type ENUM('text', 'multiple_choice', 'single_choice') NOT NULL,
         FOREIGN KEY (survey_id) REFERENCES surveys(id)
     );
     ```


   - **选项表(options)**:针对选择题,存储选项。
     ```sql
     CREATE TABLE options (
         id INT AUTO_INCREMENT PRIMARY KEY,
         question_id INT NOT NULL,
         option_text TEXT NOT NULL,
         FOREIGN KEY (question_id) REFERENCES questions(id)
     );
     ```


   - **回答表(responses)**:存储用户的回答。
     ```sql
     CREATE TABLE responses (
         id INT AUTO_INCREMENT PRIMARY KEY,
         survey_id INT NOT NULL,
         user_id INT, -- 如果有用户系统
         created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
         FOREIGN KEY (survey_id) REFERENCES surveys(id)
     );
     ```


   - **回答详情表(response_details)**:存储每个回答的具体内容。
     ```sql
     CREATE TABLE response_details (
         id INT AUTO_INCREMENT PRIMARY KEY,
         response_id INT NOT NULL,
         question_id INT NOT NULL,
         answer_text TEXT, -- 用于文本回答
         option_id INT, -- 用于选择题回答
         FOREIGN KEY (response_id) REFERENCES responses(id),
         FOREIGN KEY (question_id) REFERENCES questions(id),
         FOREIGN KEY (option_id) REFERENCES options(id)
     );
     ```


### 2. **优点**
   - **灵活性**:通过外键关联,支持动态添加问卷和问题。
   - **可维护性**:表结构清晰,易于扩展和维护。
   - **性能优化**:减少表数量,降低数据库管理复杂度。


### 3. **示例查询**
   - **获取某个问卷的所有问题**:
     ```sql
     SELECT * FROM questions WHERE survey_id = 1;
     ```


   - **获取某个问卷的所有回答**:
     ```sql
     SELECT * FROM responses WHERE survey_id = 1;
     ```


   - **获取某个回答的详细信息**:
     ```sql
     SELECT * FROM response_details WHERE response_id = 1;
     ```


### 4. **总结**
   - **不建议为每个问卷单独建表**,应采用通用表结构,通过外键关联问卷、问题和回答。
   - 这种设计更灵活、易于维护,且能有效减少数据库复杂度。
2025-03-05
2025-03-14 星期五 农历二月十五