Mic*_*ael 120 sql database-design
我需要创建一个调查,其中答案存储在数据库中.我只是想知道在数据库中实现这个的最佳方法是什么,特别是所需的表.调查包含不同类型的问题.例如:注释的文本字段,多项选择题以及可能包含多个答案的问题(即检查所有适用的答案).
我想出了两个可能的解决方案:
创建一个包含每个调查提交答案的巨型表格.每列将对应于调查的答案.即SurveyID,Answer1,Answer2,Answer3
我不认为这是最好的方法,因为在这项调查中有很多问题,如果调查要改变,似乎不是很灵活.
我想到的另一件事是创建一个问题表和答案表.问题表将包含调查的所有问题.答案表将包含调查中的各个答案,每行都与一个问题相关联.
一个简单的例子:
tblSurvey:SurveyID
tblQuestion:QuestionID,SurveyID,QuestionType,Question
tblAnswer:AnswerID,UserID,QuestionID,Answer
tblUser:UserID,UserName
我的问题是,可能有大量的答案会使答案表变得非常庞大.在性能方面,我不确定它是如此之大.
我很感激任何想法和建议.
Dam*_*vic 114
我认为您的模型#2很好,但是您可以查看存储问题和预先制定的答案(提供的答案)的更复杂的模型,并允许它们在不同的调查中重复使用.
- 一项调查可能有很多问题; 在许多调查中可以(重新)使用一个问题.
- 可以为许多问题提供一个(预先制定的)答案.一个问题可以提供许多答案.一个问题可以在不同的调查中提供不同的答案.可以在不同的调查中为不同的问题提供答案.有一个默认的"其他"答案,如果一个人选择其他人,她的答案会记录在Answer.OtherText中.
- 一个人可以参加许多调查,一个人只能在调查中回答一次具体问题.
Mic*_*ant 52
我的设计如下所示.
最新的创建脚本位于https://gist.github.com/durrantm/1e618164fd4acf91e372
脚本和mysql workbench.mwb文件也可以在https://github.com/durrantm/survey上找到.
tpl*_*ner 17
绝对是选项#2,我想你可能在当前架构中有疏忽,你可能想要另一个表:
+-----------+
| tblSurvey |
|-----------|
| SurveyId |
+-----------+
+--------------+
| tblQuestion |
|--------------|
| QuestionID |
| SurveyID |
| QuestionType |
| Question |
+--------------+
+--------------+
| tblAnswer |
|--------------|
| AnswerID |
| QuestionID |
| Answer |
+--------------+
+------------------+
| tblUsersAnswer |
|------------------|
| UserAnswerID |
| AnswerID |
| UserID |
| Response |
+------------------+
+-----------+
| tblUser |
|-----------|
| UserID |
| UserName |
+-----------+
Run Code Online (Sandbox Code Playgroud)
每个问题可能会有一组用户可以选择的答案,然后将在另一个表中跟踪实际的答案.
数据库旨在存储大量数据,并且大多数都可以很好地扩展.没有必要仅仅为了节省空间而使用较小的正常形式.
归档时间: |
|
查看次数: |
90990 次 |
最近记录: |