Neo4j/Cypher查询(用户操作)关系方向

Neo4j/Cypher Query (user action) relationship direction

我是 Cypher 的新手,正在尝试设计图形数据库并存储用户行为。提前致谢!

案例: 1. 用户访问了网页 2. 用户拥有一台设备 (id:xxxxx)

在 UML Class 图中,箭头(关系)指向父 class

但是,我的观点是,Cypher 中并不是所有的关系都是父子关系,这是否意味着我不应该将这种概念应用到 Cypher 中?

所以,问题是 "how to design the direction of relationship"?

(user)-[r:visited]->(webpage {url:xxx})
(user)-[r:owned]->(mobileDevice {uuid:xxx})

-- 或--

(user)<-[r:visitedBy]-(webpage {url:xxx})
(user)<-[r:owned]-(mobileDevice {uuid:xxx})

再次感谢您

这是一个常见问题。答案是这取决于你!关系类型可以是您选择的任何类型,您应该选择最舒适的关系类型。我建议无论你做什么,只要保持一致即可。

个人在 "visted" 和 "visited by" 之间,我会选择 "visited",因为我认为谈论用户访问页面的事实更有意义,而不是那个用户访问了一个页面。我经常建议人们给他们的关系命名,这样节点-关系-节点就成了一个句子。由于用户是主要参与者,因此您的句子将是“(the) user visited (the) webpage”。不过,这可能是因为我的母语是英语,以及英语句子的构成方式。

附带说明一下,Neo4j 中的关系通常是 UPPER_SNAKE_CASE。同样,Neo4j 不会限制您使用任何一种特定的样式,但这是我见过的最多的样式。本指南很好地概述了常见的 Cypher 约定:

http://nigelsmall.com/zen