1

嘿,我一直在为一个困扰我很长一段时间的问题挠头。

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

所以这是我的问题:

  1. 我应该每人(参加调查的人)创建 1 行吗?
  2. 有很多家长/孩子的问题(例如,如果回答是,则回答以下问题,否则忽略)。拿他们怎么办?
  3. 对于一个问题,此人可以回答超过 1 个答案。如何处理它们?

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

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

谢谢

4

1 回答 1

2

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

表:答案

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

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

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

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

表:question_order

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

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

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

表:问题

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

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

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

于 2013-01-31T21:05:52.797 回答