如何在图表数据库中建模客户调查?

时间:2016-03-21 05:45:49

标签: neo4j graph-databases datomic

我们公司根据调查获得了大量客户数据。例如,我们可能知道有人喜欢某些运动,电视节目,某些乐队,怀孕并且在某个年龄段。营销人员将添加和删除要跟踪的标准。图形数据库提供了各种建模选项,例如我们可以执行对象建模等操作

Customer.survey_question1.question = "What tv show do you like"
Customer.survey_question1.answer = "Sesame street"

在这里,我们会向客户提供一个属性,其中包含调查问题1,其中包含调查属性。每当营销人员添加问题和答案时,我们就必须更新客户架构。

我们也可以像这样建模

Customer.surveys = [list of references to other objects]

如果调查是他们已经回答的调查对象的参考列表。

在graphdb

中添加非常稀疏的客户属性列表的惯用方法是什么?

2 个答案:

答案 0 :(得分:3)

[EDITED]

这是一种模拟用例的惯用方法。

您可以为每个调查问题使用一个节点,并为所有这些节点提供相同的标签,例如SurveyQuestion。例如:

(sq:SurveyQuestion {id: 222, question: "What tv show do you like?"})

每个回答SurveyQuestion的客户都可以与该问题的节点建立特定类型(例如ANSWERED)的关系,并且该关系可以包含该人的答案。例如:

(:Customer {id:123})-[:ANSWERED {answer: "The Voice"}]->(sq)

使用此方法,无论何时添加新的调查问题,都无需更新Customer节点。只要客户真正回答问题,您就只需要建立ANSWERED关系。

获取所有调查问题:

MATCH (sq:SurveyQuestion)
RETURN sq;

要让给出每个问题答案的客户(这是区分大小写的,因此您可能希望使用LOWER将所有答案小写,然后再将其存储在ANSWERED关系中):

MATCH (sq:SurveyQuestion {id: 222})<-[a:ANSWERED]-(c:Customer)
RETURN sq, a.answer AS answer, COLLECT(c);

要获得客户回答的所有问题,以及他/她对每个问题的回答:

MATCH (sq:SurveyQuestion)<-[a:ANSWERED]-(c:Customer {id: 123})
RETURN c, a.answer AS answer, sq;

答案 1 :(得分:1)

从我的到期(与neo4j约1年)。作为数据存储的图形数据库的最大优势是从它们的现有数据中产生复杂的洞察力(其中具有连接表的sql数据库具有弱的性能)。 因此,将从调查中检索到的所有数据存储在客户节点或(:客户) - [:ANSWERS] - &gt;(:Servey)中,不会给neo4j数据库带来任何好处。但是你得到了一些黑暗的一面&#34; neo4j :)我并不是说neo4j不好,但现在它并不像sql那么精致。因此,为了获得neo4j的优势,我会尝试将每个用户的答案存储为单独的实体,如果它有意义的话。创建节点,如:Sport,:TvShow。但是我想把年龄存入:顾客作为他的出生日期。或者,如果您计划在其他情况下也使用它,则可能会生成日历树。因此,您可以将出生日期存储为与日历树的特定节点的关系(:日或:月或年e.t.c)。

我会使用类似的模型 (c:Customer)-[r1:ANSWERS]->(s:Servey), (c)-[r2:WATCHES]->(tv:TvShow), (s)-[:SERVEY_REPLY]->(tv)。因此,每当客户改变主意并停止观看节目时,我会删除关系r1,但我不会因为存储r2而丢失数据。您可以将此模型关系添加到:日历和许多不同的员工,但请确保您需要它。

P.S。据我所知,有一些高收入的人来建模数据库:)正如我的建议,如果你不确定,你从图形数据库中得到了好处,而不是在生产中使用它:)