繁体   English   中英

Graph Database新手Q-如何确定2个节点之间的关系方向

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM