[英]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.