针对投票Web应用程序的数据库结构化建议

时间:2013-02-05 10:41:35

标签: mysql sql

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

民意调查表:

id title description

问题表:

id poll_id question

答案表:

  

id question_id answer

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

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

2 个答案:

答案 0 :(得分:1)

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

enter image description here

在这里看一下按键的构造:

  • QUESTION与POLL处于identifying关系,生成的自然键不仅提供唯一性,还提供排序: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。

答案 1 :(得分:0)

Answer > NextQuestion table    

AnswerID    NextQuestionID

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