【问题标题】:Database structuration suggestions for a poll web app投票网络应用程序的数据库结构建议
【发布时间】:2013-02-05 10:41:35
【问题描述】:

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

投票表:

id title description

问题表:

id poll_id question

答案表:

id question_id 答案

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

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

【问题讨论】:

  • 我可以建议您从业务类开始,然后倒退到持久层。走另一条路可能会把你锁在直筒夹克里。

标签: mysql sql


【解决方案1】:

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

看看这里的key的构造:

  • 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。

【讨论】:

    【解决方案2】:
    Answer > NextQuestion table    
    
    AnswerID    NextQuestionID
    

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

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 2018-11-06
      • 1970-01-01
      • 2012-05-27
      • 2015-08-23
      • 1970-01-01
      • 2015-11-22
      • 2011-12-27
      • 2018-03-03
      相关资源
      最近更新 更多