在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结构的额外优势,这是我感兴趣的其他东西。将该对话留在另一天(和另一个帖子),这样的方法会更麻烦/更昂贵比它值得在这里阐明的目的?可能有任何不利/优势(除了普通成本)我不考虑?或者我在这里重新发明轮子 - 在这种情况下是否存在我不知道的现存解决方案?
答案 0 :(得分:1)
没有关系可以链接到其他关系。我认为当你问自己这类问题时,你的数据可能存在建模问题,接下来要做的就是尝试对数据进行不同的建模。例如,为什么连接两个点的关系知道点所在的线?点是否知道该线更自然,因此在点上具有属性lineID
?这样,如果lineID
位于NEXT
关系上,您就可以在多行上创建点,这样就无法正确建模。也许更好的是,您可以让节点Line
与该特定行上的所有点建立关系CONTAINS
,而不是使用lineID
属性。
答案 1 :(得分:0)
这是不可能的。 重构您的模型,以便您的关系中需要链接的任何数据都是节点