涉及例如"朋友"在社交网络平台上通常将建模为:
(x:User)-[:FRIEND]->(y:User)
然后将其检索为:
MATCH (x:User)-[:FRIEND]-(y:User) RETURN x, y
现在,让我们说,对于某个x
和y
:虽然他们是彼此的朋友,但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
一般建议通常是在大多数情况下通常会阻止两个离散关系,但是,我该如何对这种关系建模进行建模呢?
答案 0 :(得分:1)
Neo4j中的关系始终是定向的,但正如您所示,在查询时不一定需要指定方向。
我认为在这种情况下,与用户“关注”其他用户的Twitter类型模型进行比较是有帮助的。以下内容未必得到回应:
(Will)-[:FOLLOWS]->(BarackObama)
并不意味着巴拉克奥巴马跟随威尔。
我认为这与您的数据模型更加一致,在这种情况下,在两个方向创建关系都没有错。