我知道Neo4j在创建时需要关系方向,但允许在查询时忽略这个方向。通过这种方式,我可以查询我的图,忽略关系方向。为什么neo4j在创建时不允许定向或双向关系?
我也知道,有一些解决方案的情况下,当关系是自然双向或不定向,like described here。
我的问题是:为什么这样实现?有创建时不允许定向或双向关系的充分理由?它是数据库体系结构的限制吗?
Cypher支架之类的语句下面是不允许的:
CREATE()-[:KNOWS]-()
CREATE()<-[:KNOWS]->()
我在网上搜索了一个答案,但我没有找到太多。例如,this github issue。
奇怪的是必须定义一个没有它的关系方向。在我看来,我伤害了我的图形的语义。
编辑1:
为了澄清我的关于 “语义问题” 的角度来看(也许术语是错误的):
假设我跑这个简单的CREATE
声明:
CREATE (a:Person {name:'a'})-[:KNOWS]->(b:Person {name:'b'})
因为我有这个非常简单的图表:
:KNOWS
关系只有一个方向,因为Neo4j在创建时需要关系方向。在我的域名a
知道b
和b
知道a
。
现在,一个新的团队成员将查询这个暗号查询我的图表:
MATCH path = (a:Person {name:'a'})-[:KNOWS]-(b:Person {name:'b'})
return path
这个新的团队成员不知道,当我创造了这个图我认为:KNOWS
关系不针对。他会看到的结果是一样的:
从该结果这个新的团队成员都可以认为只有一个人知道考虑某乙。在我看来,糟糕。不适合你?这有什么意义?
你好@kuah!你的回答非常接近我的期望。我正在阅读这本书,并会在不久的将来阅读推荐的章节!谢谢! :) –