【问题标题】:Designing a database for a long questionnaire为长问卷设计数据库
【发布时间】:2013-02-01 05:27:26
【问题描述】:

嘿,我为一个困扰我很长一段时间的问题而摸不着头脑。

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

所以这是我的问题:

  1. 我应该为每人(参与调查的人)创建 1 行吗?
  2. 有很多父/子问题(例如,如果回答是,那么 回答下列问题,否则忽略)。如何处理它们?
  3. 对于一个问题,此人可以回答多个答案。如何 处理它们?

我想到的是创建一个表格,每列都是问题。如果有一个与调查者无关的父母/孩子问题,它将被留下blank。对于可以有多个答案的问题,我将创建n 列(其中n 代表可能答案的数量)。

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

谢谢

【问题讨论】:

  • 您需要研究关系数据库设计和数据库规范化。不要只是把所有东西都扔到一张桌子上,否则你会做噩梦。
  • 这是一个非常适合 nosql 数据库、mapreduce 和函数式编程的候选者;)
  • 对于 RDBMS,您正在做的事情被称为“一个大电子表格”,被认为是一种不好的方法。 youtube.com/watch?v=uFLRc6y_O3s

标签: database-design


【解决方案1】:

每列都是问题,对我来说听起来是个坏主意,因为很难更改/添加问题。很少更改数据库结构。

表格:答案

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

  • 个人 ID(回答此特定问题的人)
  • 问题 ID(该行回答了哪个问题)
  • 答案(答案本身,可以是字符串/数字)

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

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

表格:question_order

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

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

在此表中,您保存了问题之间的所有联系。如果问题 1 总是导致问题 2,则输入[1, NULL, 2] - 在这种情况下,NULL 表示所有可能的答案。如果只有在您回答“是”时问题 2 才导致问题 3,请输入[2, "yes", 3]。如果只有在您回答“否”时问题 2 才导致问题 4,请输入[2, "no", 4] 等等。

表格:问题

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

  • 问题 id(我们正在讨论的问题)
  • 支持多个答案(布尔)

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

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 2013-10-06
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多