繁体   English   中英

Neo4J (Cypher) 中图节点关系的最佳方法

[英]Best approach for graph nodes relationship in Neo4J (Cypher)

我试图在我的 Neo4J 图形数据库中实现以下数据结构:

(User)-[:isEmployedBy]->(Company)而每个“雇佣”可以有多个“交易”

我正在考虑以下选项,并想知道哪个是最“未来的证明”:

最简单的:

create
  (matt:Person { name: 'Matt' } ),
  (stackoverflow:Company { name: 'Stackoverflow' }),
  (matt)-[:employed_by { from: date("2000-01-01"), until: date("2010-01-01") }]->(stackoverflow),
  return *

但是,我无法在我的工作中添加其他关系(例如交易)。 我认为我的第二种方法是我唯一的选择? 这个对吗? (见下文)

create
  (matt:Person { name: 'Matt' } ),
  (stackoverflow:Company { name: 'Stackoverflow' }),
  (employment:Employment, { from: date("2000-01-01"), until: date("2010-01-01")}),
  (t1:Payment, { amount: 100 }),
  (t2:Payment, { amount: 50 }),
  (employment)-[:received]->(t1)
  (employment)-[:received]->(t2)
  return *

我知道我可以将这些交易直接附加到该人,但我需要将它们与工作直接相关联,例如:如果该人失去工作(连接),所有交易都需要消失。

3)我也可以做这两个连接:

create
  (matt:Person { name: 'Matt' } ),
  (stackoverflow:Company { name: 'Stackoverflow' }),
  (employment:Employment, { from: date("2000-01-01"), until: date("2010-01-01")}),
  (matt)-[:employed_by { from: date("2000-01-01"), until: date("2010-01-01") }]->(stackoverflow),
  (matt)-[:has_employment]->(employment)<-[:has_employment]-(stackoverflow)
  return *

虽然我可能会遇到不一致的数据(此处的日期),但如果说我只想查看谁被谁雇用而没有更多详细信息/交易,这种方法是否会给我带来查询性能优势? (使用:employed_by)。

一般问题:我想(或需要)设置双向连接吗?

create
  (matt:Person { name: 'Matt' } ),
  (stackoverflow:Company { name: 'Stackoverflow' }),
  (matt)-[:employed_by { from: date("2000-01-01"), until: date("2010-01-01") }]->(stackoverflow),
  (matt)<-[:employs { from: date("2000-01-01"), until: date("2010-01-01") }]-(stackoverflow),
  return *

同样,我最终会得到重复的信息 - 这有什么好处吗?

感谢您的任何提示!

选项 #3 接近我的建议,除了:

  1. :employed_by关系是多余的,应该省略以避免浪费存储空间、使某些查询过于复杂以及带来不一致的风险。 Employment节点包含相同的信息。
  2. 我会避免在Employment节点的两侧使用相同的关系类型,以避免混淆并可能使未来的查询更有效率。

此外,在 neo4j 使用的标准命名约定中,关系名称全部大写(例如,“HAS_EMPLOYMENT”)。 它实际上有助于更轻松地阅读您的 Cypher 代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM