2017-08-09 104 views
0

例如,在工作环境中,家庭,社区的水平设计图形数据库等。示例:的Neo4j - 如何基于类型和/或关系

在A侧,B是老板 - 在B方,A是下属。
在C方面,D是老师 - 在D方面,C是学生。
在E方,F是父亲 - 在F方,E是一个孩子。
在E方,D是老师 - 在D方,E是学生。

上级,下属,老师,学生,父亲,孩子等属性可随时增加,更改和删除。

回答

1

您可以使用3种关系类型来表示您的“关系”。例如,REPORTS_TOHAS_STUDENTHAS_CHILD

(a)-[:REPORTS_TO]->(b) 
(d)-[:HAS_STUDENT]->(c) 
(f)-[:HAS_CHILD]->(e) 
(d)-[:HAS_STUDENT]->(e) 

虽然这是事实,一个Neo4j的关系(例如,HAS_STUDENT类型的)必须与特定方向被创建(例如,从教师节点到学生节点) ,当您进行查询时,它可以在相反(或任一)方向上轻松(并且高效地)遍历。

+0

我明白了。但是这个怎么样。 (c) - [:RELATES_TO {as:“student”,to:“teacher”}] - >(d)。如果是这样,如何用引用具有数据集属性(param:“string/words”)的节点的参数替换“as”和“to”属性的值,尽管没有关系。 –

+0

如果您只有一种关系类型,则遍历数据库将非常低效。 Neo4j必须遍历每个候选节点的所有关系,才能找到想要的“as”和“to”值。你一定要避免这种情况。也许你应该在你的问题中解释你的用例是什么,因为这并不明显。 – cybersam

+0

看来我还是受到关系思维的影响。抱歉。谢谢。你的建议非常有启发性。我会首先尝试证明我的思维方式。 –