【问题标题】:Database questionnaire with follow up questions depending on answer (with animations)数据库调查问卷,根据答案有后续问题(带动画)
【发布时间】:2023-03-14 22:56:01
【问题描述】:

意图:
我正在设计一个网络应用程序,旨在通过一组预定义的问题来帮助用户解决工作场所问题,这些问题分布在 3-4 个阶段中,有助于缩小问题范围。

在问卷的每个阶段,用户都可以在多个解决方案中进行选择,下一阶段的解决方案将基于之前做出的选择。

每个选择的答案都会触发一个相关的动画。

用户场景
典型的用户场景可能如下所示:

Q1 - 出了什么问题?

  • A1 - 我感到压力很大。
  • A2 - 我的意见被忽略了。
  • A3 - 我不喜欢我的老板。

然后用户选择选项A2。并基于该选择,将向用户呈现一个问题及其答案,如下所示:

Q2 - 谁在无视您的意见?

  • A1 - 我的老板。
  • A2 - 我的同事。
  • A3 - 其他。

..等等。

规格:

  • 问题、答案、组合(可能还有动画)需要存储在数据库中。

  • 每个问题和答案都需要能够以多种组合形式使用。

  • 每个动画都需要能够用于多个问题。

我的问题:

  • 为了实现这一点,可能的数据库表集合看起来如何?

【问题讨论】:

  • 这个问题对于 Stack Overflow 来说太宽泛了,它应该在 2016 年就被关闭了——我相信,那时它会是题外话。它本质上是要求设计一个完整的数据库,这是一个很大的问题。这就是为什么提供的答案必须是一般性的。

标签: database animation database-design web-applications database-schema


【解决方案1】:

您可以使用图表来表示问题。

Q1 -a1-> Q3
Q1 -a2-> Q2 -*-> Q3
Q1 -a3-> Q3

表格:

Questionnaire
 - Id
 - Name

Question
 - Id
 - Title

Response
 - Id
 - Title

QuestionnaireQuestions
 - QuestionnaireId
 - QuestionId

QuestionResponse
 - QuestionnaireId
 - QuestionId
 - ResponseId
 - NextQuestionId
 - Animation

FK 从 QuestionResponse(QuestionnaireId, QuestionId) 到 QuestionnaireQuestions(QuestionnaireId, QuestionId)

【讨论】:

  • 图表的目的仅仅是为了将问卷过程可视化吗?此外,您的表格对我来说很有意义,但是,您如何将每个问题的多个回答联系起来?问卷表究竟代表什么?最后,非常感谢您的快速回答!
  • 它不包括多项选择,但您可以在 QuestionResponse 表中使用位图而不是 ResponseId。基本上第一个响应值为 1,第二个响应值为 2,第三个响应值为 4,依此类推(2 pow N)。您添加所有选定响应的值。这意味着如果选择了第一个和第三个响应,您将获得 5。通过添加其各个值,任何响应组合都具有唯一的聚合值。
  • 我正在使用 phpmyadmin 来处理我的数据库,据我所知,这里无法使用位图索引。然而,我已经更接近解决方案,除了我找不到在单独的表中指定哪些响应(最多 8 个)适合单行中的特定问题的方法?无需做 8 个 ResponseID 列?你知道有什么办法吗?再次感谢您的宝贵时间和帮助。
  • 我的意思不是位图索引...我的意思是一个整数列,它存储一个数字,该数字表示 anwsers 的组合。只有第一个 => 1,只有第二个 => 2,第一个和第二个 =>3,只有第三个 => 4 .....这是一个位掩码,因为在二进制 101 中是 5,表示选择了第一个和第三个(它们有1 而不是 0)。我肉这个:stackoverflow.com/questions/2882276/…
  • 听起来确实可以解决我的问题。然而,遗憾的是,我不知道如何在现实中制作类似的作品。我对数据库构建非常陌生,对二进制一无所知。是否可以通过其他方式实现?或者你能给我举个例子吗?我将非常感谢!
【解决方案2】:

您有一个谓词来确定存在哪些问题。 您有一个谓词来确定存在哪些答案[针对哪些问题]。 您有一个谓词来确定哪些答案[针对哪些问题],当给出时,会导致后续问题。

特别是关于“下一阶段的解决方案将基于之前做出的选择。”

由于无法预测有多少先前的选择在确定任何后续问题的可能答案的子集方面发挥作用,因此问题的这方面是不可能的,或者说是不可能的,可以建模为多个列在某个表中。

这迫使您将每个可能的“谁在忽略您”作为一个单独的问题消除歧义,这些“谁在忽略您”具有一组不同的可能答案。

【讨论】:

  • 对于这个特定的项目,将只使用 3 或 4 个阶段,这意味着在确定可能的答案时只有 3-4 个前面的选择起作用。那么,是否不可能使用前面所做的选择的组合来确定应该问哪个问题以及哪些答案将与之相关联?而不是将其与特定问题联系起来?我对数据库结构比较陌生,所以如果我误解了你的回答,我提前道歉。
  • 好的。假设我在问完问题 1 和 4 并获得答案 1a 和 4c 之后要问问题 7。问题 7 也可以在用答案 1d 和 4a 询问 qns 1 和 4 后提出,与第一种情况相比,Q7 的答案设置不同。 Q7 也可以在 qns 1,2,3,6 回答 1b,2b,any for 3, 6a/d 后问。再次为 Q7 设置不同的可能答案。因此,我们为 Q7 提供了三个不同的可能答案集。编写单个查询,为 Q7 的每个可能路径精确确定答案集。 (不要尝试,你会失败。)
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2021-05-05
  • 2020-11-15
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
相关资源
最近更新 更多