[英]Graph Database Newbie Q- How to decide on the direction of a relation between 2 nodes
您如何确定关系的动词方向?
例如,我有一个国家属于某个子区域,而该国家又属于一个区域。 哪一个更好,在确定方向时是否有任何经验法则。
(地区)-[HAS]->(子区域)-[HAS]->(国家/地区)
要么
(地区)<-[BELONGS_TO]-(子区域)<-[BELONGS_TO]-(国家/地区)
问候圣
我同意@InverFalcon的观点,即方向性主要是主观决定。 但是,在(至少)一种情况下,您可能想使用特定的方向,尤其是在这样的情况下,可以使重要的用例更快。
这与以下事实有关:通常,如果您可以使Cypher模式的特定性降低 (而不影响输出),那么neo4j的工作量就会减少,并且查询会更快。
例如,假设您的整个数据模型由2个节点标签和2个关系类型组成,如下所示。 (我使用自己的数据模型,因为我不知道您的用例是什么。)
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)
为了找到演员演过的电影,您的查询必须类似于以下内容。 (请注意,我们必须指定ACTED_IN
类型,因为传出的关系也可能是类型的DIRECTED
。这意味着,Neo4j的具有明确地测试它的类型每个传出的关系):
MATCH (:Person {id: 123})-[:ACTED_IN]->(m:Movie)
RETURN m;
但是,如果您的数据模型将DIRECTED
类型替换为具有相反方向性的DIRECTED_BY
类型,那么它将看起来像这样:
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)<-[:DIRECTED_BY]-(:Movie)
通过这种调整,您的查询可以更简单,更快捷(因为neo4j不必测试关系类型):
MATCH (:Person {id: 123})-->(m:Movie)
RETURN m;
完整而言,请注意,在上述2个MATCH
模式中,我们实际上可以删除:Movie
标签,因为在两个数据模型中, ACTED_IN
末端节点将始终具有Movie
标签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.