问卷的表格设计

时间:2015-06-18 17:40:26

标签: sql sql-server sql-server-2008 database-design

我们正在开发一个应用程序,它会询问用户各种问题,这些问题可以有分支,因此它们不会按顺序运行。例如,如果以下是问题的结构以及它们可以流向的地方:

enter image description here

问题2有一个分支,如果用户回答是,我们移动到3并在7结束,否则我们向下工作4,5,6,7。我想出了一个桌面设计,但想要得到反馈,如果设计可行或者有更好的方法来构建它。

将会有一个问题表,其中包含Id(Key)和Text列。树本身将表示为:

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问题的分支。

之前的II我一直保留,如果用户希望能够返回并重新提问,目前他们只想继续前进。

1 个答案:

答案 0 :(得分:1)

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

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