如何在图形数据库中对客户调查进行建模



我们公司有很多基于调查的客户数据。例如,我们可能知道某人喜欢某些运动,电视节目,某些乐队,怀孕并且处于某个年龄段。营销人员将添加和删除要跟踪的标准。图形数据库提供了多种建模选项,例如我们可以做一些事情,例如对象建模

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 中添加非常稀疏的客户属性列表的惯用方法是什么

[已编辑]

这是对用例进行建模的惯用方法。

您可以为每个调查问题使用一个节点,并为所有这些节点提供相同的标签,例如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;

要获取为问题提供每个答案的客户(这区分大小写,因此您可能希望在将答案存储在ANSWERED关系中之前使用 LOWER 将所有答案小写):

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;

从我的到期日(使用 neo4j 大约 ~1 年)。作为数据存储的图形数据库的最大优势是从其现有数据中生成复杂的见解(其中带有连接表的SQL数据库性能较弱)。因此,将从调查中检索到的所有数据存储在客户节点或(:Customer)-[:ANSWERS]->(:Servey)中,不会从neo4j数据库中获得任何好处。但是你会得到neo4j的一些"阴暗面":)我并不是说neo4j不好,但现在它不像sql那么完善。因此,为了获得neo4j的优势,如果有意义,我会尝试将每个用户答案存储为单独的实体。创建节点,如:Sport,:TvShow。但是我想将年龄存储在:客户作为他的出生日期。或者,如果您计划在其他情况下也使用它,则可以生成日历树。因此,您可以将出生日期存储为与日历树特定节点的关系(:D ay或:Month或Year e.t.c)。

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

附言据我所知,有一些高薪的人对数据库进行建模:)作为我的建议,如果您不确定,您可以从图形数据库中获得好处,而不是不要在生产:)上使用它

最新更新