Table问卷设计

Table design for questionaire

我们正在开发一个应用程序,它会向用户提出各种问题,这些问题可以有分支,所以它们不会 运行 直接排列。例如,如果以下是问题的结构以及它们可以流向的位置:

如果用户回答“是”,问题 2 有一个分支,我们转到 3 并在 7 结束,否则我们继续进行 4、5、6、7。我想出了一个 table 设计,但如果该设计可行或者是否有更好的构造方法,我想得到反馈。

将有一个问题 table,其中包含 ID(键)和文本列。树本身将表示为:

QuestionId | PreviousId | NextId | Branch Condition
1                0            2      NULL
2                1            3      Yes
2                1            4      No
3                2            7      NULL
4                2            5      NULL
5                4            6      NULL
7                3            0      NULL
7                6            0      NULL

它的工作方式,一旦回答了一个问题,系统将检查当前问题的分支条件是什么,如果为 null 则移动到 nextId。否则找到用户选择的答案并转到关联的 nextId。我们只希望 Y/N 个分支问题。

我暂时保留的 previousId,以防用户希望能够返回并重新回答问题,目前他们只想继续前进。

如果只有 yes/no 个问题可能有不同的下一个问题,我建议在问题 table 中添加 2 列,当答案是 是时指定下一个问题 ID (或默认,当它不是 yes/no 问题时)和下一个问题 ID,当答案是 时。保留之前的答案 ID 在我看来是多余的,因为您可以轻松地将整个问题路径保存在应用程序本身的内存中。

但是,如果以后的某个时候你也会有多项选择题,而下一题将取决于答案(即类别和子类别),那么我建议您也添加一个答案 table,并在问题 table 和答案 table.
中为下一个问题 ID 保留一列 如果下一个问题 id 不依赖于答案,则将其保留在问题 table 中。如果依赖于答案,则将null放在问题table的下一个问题id列中,并在答案table中保留下一个问题id。 这将为您提供最大的灵活性和足够简单的数据结构。