调查的数据库设计

Mic*_*ael 120 sql database-design

我需要创建一个调查,其中答案存储在数据库中.我只是想知道在数据库中实现这个的最佳方法是什么,特别是所需的表.调查包含不同类型的问题.例如:注释的文本字段,多项选择题以及可能包含多个答案的问题(即检查所有适用的答案).

我想出了两个可能的解决方案:

  1. 创建一个包含每个调查提交答案的巨型表格.每列将对应于调查的答案.即SurveyID,Answer1,Answer2,Answer3

    我不认为这是最好的方法,因为在这项调查中有很多问题,如果调查要改变,似乎不是很灵活.

  2. 我想到的另一件事是创建一个问题表和答案表.问题表将包含调查的所有问题.答案表将包含调查中的各个答案,每行都与一个问题相关联.

    一个简单的例子:

    tblSurvey:SurveyID

    tblQuestion:QuestionID,SurveyID,QuestionType,Question

    tblAnswer:AnswerID,UserID,QuestionID,Answer

    tblUser:UserID,UserName

    我的问题是,可能有大量的答案会使答案表变得非常庞大.在性能方面,我不确定它是如此之大.

我很感激任何想法和建议.

Dam*_*vic 114

我认为您的模型#2很好,但是您可以查看存储问题和预先制定的答案(提供的答案)的更复杂的模型,并允许它们在不同的调查中重复使用.

- 一项调查可能有很多问题; 在许多调查中可以(重新)使用一个问题.
- 可以为许多问题提供一个(预先制定的)答案.一个问题可以提供许多答案.一个问题可以在不同的调查中提供不同的答案.可以在不同的调查中为不同的问题提供答案.有一个默认的"其他"答案,如果一个人选择其他人,她的答案会记录在Answer.OtherText中.
- 一个人可以参加许多调查,一个人只能在调查中回答一次具体问题.

survey_model_02

  • 你也可以使用https://www.draw.io/它是免费的,没有注册,易于使用. (8认同)
  • 为什么我们有`Survey_Question_Answer`和`Answer`?不仅仅是"答案"吗? (3认同)
  • 我认为“Answer”就足够了,“Survery_question_answer”是多余的 (2认同)

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)

每个问题可能会有一组用户可以选择的答案,然后将在另一个表中跟踪实际的答案.

数据库旨在存储大量数据,并且大多数都可以很好地扩展.没有必要仅仅为了节省空间而使用较小的正常形式.