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

标签 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]

其中 surveys 是对他们已回答的调查对象的引用列表。

在 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 - 如何在图形数据库中对客户调查进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36123961/

相关文章:

neo4j - 为什么我会收到 "Cartesian Product"警告?

一个简单用例的 Neo4j 节点持久性问题

database - RDBMS 能做什么 Neo4j(和图形数据库)做不到的事情?

neo4j - 优化 Cypher 查询 Neo4j

neo4j - 如何在 Neo4J 2.0 Cypher 中获取附加到给定标签的所有索引

Neo4j 索引和遗留数据

ios - iOS 上嵌入的图形数据库

clojure - 查找 ref-to-many 属性包含所有输入元素的实体

missing-data - 在 Datomic 中查找缺少属性的实体

java - 在 Datomic 中更新具有多个基数的属性的事务