将调查问卷存储在数据库中的有效方法是什么?

时间:2011-01-07 14:40:20

标签: database join scalability

由于问卷总是可以改变,问题本身可能很长,因此将问题用作列名似乎很愚蠢。 在数据库中存储调查问卷是否有任何惯例或经过验证的方法?

我正在考虑有一个表(问题ID,问题),然后是第二个问题ID和答案表。但是这个解决方案可能太慢,因为需要第三次加入才能与特定用户一起加入问题。

4 个答案:

答案 0 :(得分:2)

加入有什么问题?这就是关系数据库的一个重点,即连接。

将问题存储在一个表格中。

将问题答案存储在另一个表格中。

如果答案是预定义的,并且在多个问题中是常见的,那么将常见答案存储在他们自己的表中,并创建另一个具有AnswerID的QuestionID的表。

不要害怕加入,它们是关系数据库的一部分。没有连接,你只是处理平面文件。

答案 1 :(得分:0)

我认为最好的答案是对调查问卷的信息进行建模。不要试图对问卷本身进行建模 - 问卷只是用于收集数据库内容的手段。

答案 2 :(得分:0)

我认为最好有一个单独的类/文件来代表使用hashmap的问卷。然后其他类可以使用它。我真的没有看到在db中存储问题的必要性,因为它们仍然会被加载到一个hashmap中。

答案 3 :(得分:0)

我的回答有点迟了,但也许有人会发现这些信息很有用。

我完全赞同JonH。我将举例说明我是如何实现它以更清楚地制定通用解决方案的。

最常见的表格是:

  1. 问题:Id(PK),问题,描述,OrderNumber,SectionId(FK到QuestionsSections.Id),AnswerTypeId(FK到AnswerType.Id)
  2. 答案:Id(PK),Answer,SubmitDate,UserId(FK to Users.Id),QuestionId(FK to Questions.Id)
  3. 调查问卷:Id(PK),姓名,描述
  4. QuestionnaireQuestions:QuestionnaireId(PK,FK to Questionnaire.Id),QuestionId(PK,FK to Questions.Id)
  5. QuestionsSections:Id(PK),Name,Description,OrderNumber
  6. AnswerType:Id(PK),类型,描述
  7. 此外,根据您的应用需求,您可以选择为选项答案(例如收音机,复选框等)或活动跟踪表创建特殊表格。


    以下是可能有用的链接(从上到下阅读的建议顺序):