如何解决模式设计 - 存储调查数据的最佳实践
背景:
我想创建一个表格,用于存储调查中的问题和用户回答以用于研究目的。
问题是多项选择,但只能选择一个答案。
用户可以添加或隐藏问题。
每个用户的问题都是一样的。
此外,不需要存储面试官信息,因为它是匿名的。
这个问题没有绝对的答案,因为每个问题的选择都是静态的。
表格
Survey
-id(PKey)
-submittedDate
Question
-id(PKey)
-questionText
Answer
-id(PKey)
-answerText
访问模式
1.找到具有特定id的调查及其问题和答案。
2.计算某些问题的答案分布,例如对于问题 1,50% 的人选择答案 a,25% 的人选择答案 b。
示例
1 2 3 4 5
1. How much water do you drink today ✓
2. How many apples do you eat today ✓
我的问题
我对表格和一些字段进行了粗略的设计,但我想了解如何关联这些表格,以及我应该如何使用这 3 个表格设计架构。
更新
调查表好像被误解了。
这是更具体的例子。
Survey id 123
1 2 3 4 5
1. How much water do you drink today(questionId 1) ✓
2. How many apples do you eat today(questionId 2) ✓
Survey id 124
1 2 3 4 5
1. How much water do you drink today(questionId 1) ✓
2. How many oranges do you eat today(questionId 3) ✓
questionId 1 属于调查 ID 123 和 124。
调查 ID 123 有 questionId 1 和 2。
所以是N对M的关系?
解决方法
CREATE TABLE Surveys (
sid ... AUTO_INCREMENT,other info about the survey (date,who took it,etc)
PRIMARY KEY(sid),maybe other indexes
) ENGINE=InnoDB;
CREATE TABLE S_Q (
-- no AUTO_INCREMENT needed
sid ...,-- not AUTO_INCREMENT
qid ...,-- not AUTO_INCREMENT
answer VARCHAR(...),-- the actual answer (no need to normalization)
PRIMARY KEY(sid,qid),INDEX(qid,sid)
) ENGINE=InnoDB;
CREATE TABLE Questions (
qid ... AUTO_INCREMENT,question_text TEXT,PRIMARY KEY(qid)
) ENGINE=InnoDB;
// This table may be unnecessary:
CREATE TABLE Answers (
-- no AUTO_INCREMENT needed
qid ...,answer VARCHAR(...),answer_description TEXT,PRIMARY KEY(qid,answer)
) ENGINE=InnoDB;
(所有列可能都应该是 NOT NULL
。)
answer
是实际答案。它足够短且具有自我描述性,不需要通过 id 进行查找。
您需要在它所属的问卷调查表和该答案的问题的答案表上添加 FK。
调查
- id(PKey)
- 提交日期
问题
- id(PKey)
- 问题文本
- Survey_id(FK)
回答
- id(PKey)
- 回答文本
- Question_id (FK)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。