簡體   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