注意:这不像this question
我的任务是建立一项调查,我们的客户服务人员可以使用该调查从客户那里获取有关我们服务等的信息。
我的问题是如何将问题/答案存储在存储问题的数据库中,如下所示:
这很容易,但问题可以嵌套在多个级别:
如果我不必将其存储在数据库中,我会将问题(实际上整个调查)表示为复合材料,但我不知道如何存储这样的东西。
答案 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。