Neo4j与人际关系的关系

时间:2014-04-09 05:10:11

标签: graph neo4j spring-data-neo4j

在Neo4j中,关系是否有可能建立关系?

举例说明:想象一个包含几何平面集合的域模型。每个平面上都有一系列线条,每条线上都有一系列点。一条线上的每个点通过传出的-[NEXT]->关系连接到它后面的点,并通过传入的关系连接到它之前的点。我现在的方式是,这些NEXT关系中的每一个都包含一个属性lineID,用于标识它所在的行:表示数据库中行的节点实体仅包含id ,也许还有一些元数据,我们通过遍历图表返回第X行,找到所有-[NEXT{lineID:X}]->关系,获取每个关系的起始和结束节点,并返回它们的列表以及行的元数据。

我在那里比我想要的更长,但我的问题是:如果,而不是在每个lineID关系上都有[NEXT]属性,我想创建一个{ {1}}每个-[ON]->与表示其所在行的节点实体之间的关系?

说明:而不是做

[NEXT]

,比如:

CREATE (:point)-[:NEXT{lineID:x}]->(:point)-[:NEXT{lineID:x}-> ...

这是一个丑陋的密码,但我希望它澄清了我的观点。直觉上,似乎这会使行遍历更有效率(因为我们通过要求它从行节点遍历所有CREATE (:point)-[z:NEXT]->(:point), (z)-[:ON]->(:line)` 关系而不是简单地搜索(可能是索引的)属性来玩neo4j的强度。它还可以更容易地指定嵌套关系:

[ON]

这种直觉是否被误解?如果没有,这样的事情会成为可能吗?我不认为是,但我正在考虑一种解决方法,涉及为每个“关系”创建一个节点实体。像这样:

(z)-[:ON]->(:line), (z)-[:ON]->(:plane) 

,这将具有促进hypergraph结构的额外优势,这是我感兴趣的其他东西。将该对话留在另一天(和另一个帖子),这样的方法会更麻烦/更昂贵比它值得在这里阐明的目的?可能有任何不利/优势(除了普通成本)我不考虑?或者我在这里重新发明轮子 - 在这种情况下是否存在我不知道的现存解决方案?

2 个答案:

答案 0 :(得分:1)

没有关系可以链接到其他关系。我认为当你问自己这类问题时,你的数据可能存在建模问题,接下来要做的就是尝试对数据进行不同的建模。例如,为什么连接两个点的关系知道点所在的线?点是否知道该线更自然,因此在点上具有属性lineID?这样,如果lineID位于NEXT关系上,您就可以在多行上创建点,这样就无法正确建模。也许更好的是,您可以让节点Line与该特定行上的所有点建立关系CONTAINS,而不是使用lineID属性。

答案 1 :(得分:0)

这是不可能的。 重构您的模型,以便您的关系中需要链接的任何数据都是节点