我们公司有大量基于调查的客户数据。例如,我们可能知道某人喜欢某项运动、电视节目、某支乐队、怀孕并且处于某个年龄段。营销人员将添加和删除要跟踪的标准。图数据库提供了多种建模选项,例如我们可以进行对象建模之类的操作
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/