Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 轮询web应用程序的数据库结构建议_Mysql_Sql - Fatal编程技术网

Mysql 轮询web应用程序的数据库结构建议

Mysql 轮询web应用程序的数据库结构建议,mysql,sql,Mysql,Sql,我正在设计一个民意调查应用程序,用户在其中创建一个或多个民意调查,其中包含每个问题的问题和预定义答案,到目前为止没有问题,我认为最简单的方法是使用3个表: 民意调查表: id title description 问题表: id poll_id question 答案表: 我的问题是什么 问题是,用户可能会在投票的提问流程上选择不同的行为,例如,正常的投票将从问题1转到问题N(即最后的问题N),但在我的情况下,如果用户选择问题4的答案2,则用户可能希望跳到问题7,忽略其余问题 对于如何在数据库

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

民意调查表:

id title description
问题表:

id poll_id question
答案表:

我的问题是什么

问题是,用户可能会在投票的提问流程上选择不同的行为,例如,正常的投票将从问题1转到问题N(即最后的问题N),但在我的情况下,如果用户选择问题4的答案2,则用户可能希望跳到问题7,忽略其余问题

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

Answer > NextQuestion table    

AnswerID    NextQuestionID

根据您的回答,下一个问题定义如下

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

请看此处键的构造:

  • 该问题与POLL有关,生成的自然键不仅提供唯一性,还提供顺序:在保持相同POLL\u ID的情况下,QUESTION\u NO可以单调增加
  • 等效效果由可能答案中的答案“否”实现
  • 对于任何给定的问题,用户最多可以选择一个答案。这就是为什么答案“否”在实际答案主键的之外的原因
  • 另一方面,用户ID保存在实际的答案PK中,以允许多个用户选择相同的答案
  • 理论上,在{POLL_ID,QUESTION_TEXT}上的QUESTION_表中应该有一个键,以防止两个不同的问题在同一个轮询中具有相同的文本。然而,问题_文本可能很长,并且可能被实现为BLOB,大多数DBMS无法通过键索引或约束BLOB。对于可能的答案,也存在类似的困境

如果用户跳过了一个问题,只需省略相应的实际答案。

我可以建议您从业务类开始,然后反向到持久层。走另一条路可能会让你穿上笔直的夹克。