为长问卷设计数据库

时间:2013-01-31 20:58:53

标签: database-design

嘿,我在一段时间里摸不着头脑,这已经困扰了我很长一段时间了。

基本上我有一个很长的在线问卷,我不太清楚我应该如何设计mySQL数据库来存储答案。

所以这是我的问题:

  1. 我应该每人创建一行(参加调查的人)吗?
  2. 有许多父母/子女的问题(例如,如果回答是,那么         回答以下内容,否则忽略)。怎么处理他们?
  3. 对于一个问题,该人可以回答超过1个答案。如何     处理它们?
  4. 我想到的是创建一个表,每列都是问题。如果有一个不考虑调查对象的父母/子女问题,则只会留下blank。对于可以有多个答案的问题,我会创建n列(其中n代表可能答案的数量)。

    你怎么看?这是合适的还是有更好的方法来设计数据库。

    由于

1 个答案:

答案 0 :(得分:2)

对于我来说,每个专栏都是个坏主意,因为改变/添加问题很难。应该很少更改数据库结构。

表:答案

对于答案,我会说一个包含所有答案的表格,其中包含以下列:

  • 人员ID(回答此具体问题的人)
  • 问题ID(此问题已在此行中回答)
  • 答案(答案本身,可以是字符串/数字)

如果该人对同一个问题回答了多个答案,我会为2个答案分别设置2行。如您所见,每个答案(单个人)都有一行。因此,如果我们总共有10个问题,并且每个问题有2个人回答一次,那么我们将在表格中有20行。

如果一个人没有回答其中一个问题,那么这个问题+人就没有一行。

表:question_order

在我看来,你有另一个要求,那就是控制问题的流程 - 之后会出现哪些问题。我们需要将此流程保存在另一个表中,其中包含以下列:

  • 问题ID(当前问题)
  • 答案条件(字符串\数字,取决于您的问题)
  • 下一个问题ID

在此表中,您可以保持问题之间的所有联系。如果问题1始终导致问题2,则放置[1, NULL, 2] - 在这种情况下,NULL表示所有可能的答案。如果问题2仅在您回答“是”时导致问题3,则放置[2, "yes", 3]。如果问题2仅在您回答“否”时导致问题4,则将[2, "no", 4]等等。

表:问题

您可能会发现另一个有用的潜在表格是一个问题表格,它提供了有关问题可以接受的更多信息。例如,如果您想知道哪些问题支持多个答案,请使用以下列:

  • 问题ID(我们正在讨论的问题)
  • 支持多个答案(bool)

在此表中,每个问题通常会有一行。