2013-02-05 28 views
0

我设计了一个民意调查应用程序,其中用户创建一个或几个民意调查问题和每个问题的预定义答案,迄今没有问题,即时考虑最简单的方法来做到这一点是3表:数据库结构化建议为民意调查web​​应用程序

民意调查表:

id title description 

问题表:

id poll_id question 

答案表:

ID question_id回答

的问题是,用户可以选择在投票的讯问流程的不同的行为,例如,正常轮询会从提问1〜提问N(为N的最后一个问题),但在我的情况下,如果用户选择问题4的答案2跳到问题7并忽略它们之间的休息,用户可能会想要。

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

+0

我可以建议你先从商业课程开始,然后回溯到持久层。换个方式可能会把你锁在一件直筒夹克上。 –

回答

0
Answer > NextQuestion table  

AnswerID NextQuestionID 

根据您的答案,接下来的问题就是在这里被定义

1

看起来你需要一些与此类似:

enter image description here

看钥匙的建设在这里:

  • 问题是在identifying与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即可。

+0

谢谢,太棒了 – Wuaner