猿问

调查数据库设计

调查数据库设计

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

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

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

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

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

    一个简单的例子:

    tblSurvey:SurveyID

    tblQuestion:QuestionID,SurveyID,QuestionType,Question

    tblAnswer:AnswerID,UserIDQuestionID,Answer

    tblUser:UserID,UserName

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

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


红糖糍粑
浏览 463回答 3
3回答

紫衣仙女

我认为您的模型#2很好,但是您可以查看存储问题和预先制定的答案(提供的答案)的更复杂的模型,并允许它们在不同的调查中重复使用。- 一项调查可能有很多问题; 在许多调查中可以(重新)使用一个问题。 - 可以为许多问题提供一个(预先制作的)答案。一个问题可以提供许多答案。一个问题可以在不同的调查中提供不同的答案。可以在不同的调查中为不同的问题提供答案。有一个默认的“其他”答案,如果一个人选择其他人,她的答案会记录在Answer.OtherText中。 - 一个人可以参加许多调查,一个人只能在调查中回答一次具体问题。 

料青山看我应如是

绝对是选项#2,我想你可能在当前架构中有疏忽,你可能想要另一个表:+-----------+| tblSurvey ||-----------|| SurveyId  |+-----------++--------------+| tblQuestion  ||--------------|| QuestionID   || SurveyID     || QuestionType || Question     |+--------------++--------------+| tblAnswer    ||--------------|| AnswerID     || QuestionID   || Answer       |+--------------++------------------+| tblUsersAnswer   ||------------------|| UserAnswerID     || AnswerID         || UserID           || Response         |+------------------++-----------+| tblUser   ||-----------|| UserID    || UserName  |+-----------+每个问题可能都有一组用户可以选择的答案,然后将在另一个表中跟踪实际的答案。数据库旨在存储大量数据,并且大多数都可以很好地扩展。没有必要仅仅为了节省空间而使用较小的正常形式。
随时随地看视频慕课网APP
我要回答