0

我正在设计一个民意调查应用程序,用户可以在其中创建一个或多个民意调查,其中包含问题和每个问题的预定义答案,到目前为止没问题,我认为最简单的方法是使用 3 个表格:

投票表:

id title description

问题表:

id poll_id question

答案表:

id question_id 答案

问题是,用户可能会在民意调查的提问流程中选择不同的行为,例如,正常的民意调查将从问题 1 转到问题 N(最后一个问题是 N),但在我的情况下,用户可能想要用户选择问题 4 的答案 2 以跳转到问题 7 并忽略它们之间的其余部分。

我对如何在数据库中存储这种行为有点困惑,有什么建议吗?

4

2 回答 2

1

看起来你需要类似的东西:

在此处输入图像描述

看看这里的键的构造:

  • QUESTION 用于识别与 POLL 的关系,生成的自然键不仅提供唯一性,还提供排序:QUESTION_NO 可以单调增加,同时保持相同的 POLL_ID。
  • POSSIBLE_ANSWER 中的 ANSWER_NO 实现等效效果。
  • 对于任何给定的问题,用户最多可以选择一个答案。这就是 ANSWER_NO在 ACTUAL_ANSWER 主键之外的原因。
  • 另一方面,USER_ID 保存在 ACTUAL_ANSWER PK 中,以允许多个用户选择相同的答案。
  • 理论上,{POLL_ID, QUESTION_TEXT} 上的 QUESTION_TABLE 中应该有一个键,以防止两个不同的问题在同一个投票中具有相同的文本。但是,QUESTION_TEXT 可能很长,并且可能以 BLOB 的形式实现,大多数 DBMS 无法索引或通过键进行约束。POSSIBLE_ANSWER.ANSWER_TEXT 也存在类似的困境。

如果用户跳过一个问题,只需省略相应的 ACTUAL_ANSWER。

于 2013-02-05T11:33:02.297 回答
0
Answer > NextQuestion table    

AnswerID    NextQuestionID

根据您的回答,下一个问题在这里定义

于 2013-02-05T10:56:56.127 回答