首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图数据库新手Q-如何确定两个节点之间关系的方向

图数据库新手Q-如何确定两个节点之间关系的方向
EN

Stack Overflow用户
提问于 2016-11-10 23:46:50
回答 1查看 397关注 0票数 3

你如何决定关系的动词方向?

例如,我有一个国家属于一个子Region,而它又属于一个地区。哪一个会更好,在决定方向上有什么经验法则吗?

(Region)-HAS->(子区域)-HAS->(Country)

(地域)<-归属地-(子地域)<-归属地-(国家)

关于San

EN

回答 1

Stack Overflow用户

发布于 2016-11-11 07:43:16

我同意@InverFalcon的观点,即方向性主要是一个主观决定。然而,可能(至少)有一种情况下,您可能想要使用特定的方向,特别是如果这将使重要的用例更快。

这与以下事实有关:通常情况下,如果您可以使Cypher模式不那么具体(而不影响输出),那么neo4j必须做的工作就会更少,您的查询就会更快。

例如,假设您的整个数据模型由2个节点标签和2个关系类型组成,如下所示。(我使用自己的数据模型,因为我不知道您的用例是什么。)

代码语言:javascript
复制
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)

为了找到演员出演的电影,您的查询必须如下所示。(请注意,我们必须指定ACTED_IN类型,因为传出关系也可以是DIRECTED类型。这意味着neo4j必须显式地测试其类型的每个传出关系):

代码语言:javascript
复制
MATCH (:Person {id: 123})-[:ACTED_IN]->(m:Movie)
RETURN m;

但是,如果您的数据模型用具有相反方向的DIRECTED_BY类型替换了DIRECTED类型,那么它将看起来如下所示:

代码语言:javascript
复制
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)<-[:DIRECTED_BY]-(:Movie)

通过这个调整,您的查询可能会更简单、更快(因为neo4j不必测试关系类型):

代码语言:javascript
复制
MATCH (:Person {id: 123})-->(m:Movie)
RETURN m;

要完成此操作,请注意,在上面的两个MATCH模式中,我们实际上可以删除:Movie标签,因为在这两个数据模型中,ACTED_IN终端节点都将始终具有Movie标签。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40531596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档