簡體   English   中英

Graph Database新手Q-如何確定2個節點之間的關系方向

[英]Graph Database Newbie Q- How to decide on the direction of a relation between 2 nodes

您如何確定關系的動詞方向?

例如,我有一個國家屬於某個子區域,而該國家又屬於一個區域。 哪一個更好,在確定方向時是否有任何經驗法則。

(地區)-[HAS]->(子區域)-[HAS]->(國家/地區)

要么

(地區)<-[BELONGS_TO]-(子區域)<-[BELONGS_TO]-(國家/地區)

問候聖

我同意@InverFalcon的觀點,即方向性主要是主觀決定。 但是,在(至少)一種情況下,您可能想使用特定的方向,尤其是在這樣的情況下,可以使重要的用例更快。

這與以下事實有關:通常,如果您可以使Cypher模式的特定性降低 (而不影響輸出),那么neo4j的工作量就會減少,並且查詢會更快。

例如,假設您的整個數據模型由2個節點標簽和2個關系類型組成,如下所示。 (我使用自己的數據模型,因為我不知道您的用例是什么。)

(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)

為了找到演員演過的電影,您的查詢必須類似於以下內容。 (請注意,我們必須指定ACTED_IN類型,因為傳出的關系也可能是類型的DIRECTED 。這意味着,Neo4j的具有明確地測試它的類型每個傳出的關系):

MATCH (:Person {id: 123})-[:ACTED_IN]->(m:Movie)
RETURN m;

但是,如果您的數據模型將DIRECTED類型替換為具有相反方向性的DIRECTED_BY類型,那么它將看起來像這樣:

(:Person)-[:ACTED_IN]->(:Movie)
(:Person)<-[:DIRECTED_BY]-(:Movie)

通過這種調整,您的查詢可以更簡單,更快捷(因為neo4j不必測試關系類型):

MATCH (:Person {id: 123})-->(m:Movie)
RETURN m;

完整而言,請注意,在上述2個MATCH模式中,我們實際上可以刪除:Movie標簽,因為在兩個數據模型中, ACTED_IN末端節點將始終具有Movie標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM