如何构建调查数据?

时间:2009-04-14 21:42:37

标签: mysql winforms survey

注意:这不像this question

我的任务是建立一项调查,我们的客户服务人员可以使用该调查从客户那里获取有关我们服务等的信息。

我的问题是如何将问题/答案存储在存储问题的数据库中,如下所示:

  • 布尔问题1
    • if(false):string question2(通常是question1为假的原因)

这很容易,但问题可以嵌套在多个级别:

  • 布尔问题1
    • if(false)布尔问题2
      • if(true)string question3
      • if(false)string question4

如果我不必将其存储在数据库中,我会将问题(实际上整个调查)表示为复合材料,但我不知道如何存储这样的东西。

2 个答案:

答案 0 :(得分:3)

如果您的问题形成了树而不是图表,则represent hierarchical data in sql有两种常用方法。

邻接列表模型模型需要重复的自我联接来查找孩子(儿童的孩子)。如果你有一个ORM,比如Hibernate,ORM会负责做足够的自联接来回复一个问题及其孩子的答案。如果没有ORM,您必须动态地向查询添加自联接,或者执行多个查询,前一个结果集中的每一行都有一个查询。

嵌套集模型,通常归因于Joe Celko,允许您在单个选择中获得整棵树。但这意味着添加和删除节点更复杂,需要更新所有行。

在邻接列表中,您可以有一个像(id, question text, id_next_if_true, id_next_if_false)这样的问题表。这与经典的邻接列表不同,因为父节点不是持有parent_id,而是拥有两个子id,或者为null。

答案 1 :(得分:1)

我想我会做这样的事情:

Table: Questions
int id
string question

Table: Question Answer Map
int questionId
bool answer
int nextQuestion

如果问题是多项选择,您可以使用int,char或string作为答案,而不是bool。

相关问题