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 约定:
我是 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 约定: