在这种情况下,我应该使用单一关系还是两种关系?

时间:2016-07-13 17:18:24

标签: neo4j

涉及例如"朋友"在社交网络平台上通常将建模为:

(x:User)-[:FRIEND]->(y:User)

然后将其检索为:

MATCH (x:User)-[:FRIEND]-(y:User) RETURN x, y

现在,让我们说,对于某个xy:虽然他们是彼此的朋友,但y并不真正信任{{1} }}; x虽然对x没有这种感觉。

因此,从y的角度来看,数据模型实际上是:

y

然而,从(y)-[:FRIEND {untrusted: true}]->(x) 的角度来看,事情并非如此:

x

因此,这样的事情显然不适合创建这种关系:

(x)-[:FRIEND]->(y)

...因为现在,从两个用户的角度看,事情最终都是这样的:

MATCH (x:User {...}), (y:User {...}) MERGE (x)-[f:FRIEND]->(y) SET f.untrusted = true

一般建议通常是在大多数情况下通常会阻止两个离散关系,但是,我该如何对这种关系建模进行建模呢?

1 个答案:

答案 0 :(得分:1)

Neo4j中的关系始终是定向的,但正如您所示,在查询时不一定需要指定方向。

我认为在这种情况下,与用户“关注”其他用户的Twitter类型模型进行比较是有帮助的。以下内容未必得到回应:

(Will)-[:FOLLOWS]->(BarackObama)

并不意味着巴拉克奥巴马跟随威尔。

我认为这与您的数据模型更加一致,在这种情况下,在两个方向创建关系都没有错。

相关问题