每列都是问题对我来说听起来是个坏主意,因为很难更改/添加问题。很少更改数据库结构。
表:答案
对于答案,我会说一张包含所有答案的表格,其中包含以下列:
- 人员 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(我们正在讨论的问题)
- 支持多个答案(布尔)
在此表中,每个问题通常会有一行。