2

注意:这不是这个问题

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

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

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

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

  • 布尔问题1
    • if (false) 布尔问题2
      • if (true) 字符串问题3
      • if (false) 字符串问题4

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

4

2 回答 2

3

如果您的问题形成树而不是图,则在 sql 中表示分层数据有两种常用方法。

邻接列表模型模型需要重复的自连接来查找孩子(孩子的孩子......孩子的)。如果你有一个 ORM,比如 Hibernate,ORM 将负责做足够的自连接来带回一个问题及其子答案。如果没有 ORM 来执行此操作,您将不得不动态地将自联接添加到查询中,或者执行多个查询,针对前一个结果集中的每一行进行一个查询。

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

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

于 2009-04-14T22:08:20.950 回答
1

我想我会做这样的事情:

Table: Questions
int id
string question

Table: Question Answer Map
int questionId
bool answer
int nextQuestion

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

于 2009-04-14T21:53:05.497 回答