2016-07-13 2 views
0

말, 소셜 네트워킹 플랫폼의 "친구"가 일반적으로 모델링 될 것이다의 경우 포함하는 관계로 : 다음 검색되는이 경우 단일 관계 또는 두 관계를 사용해야합니까?

(x:User)-[:FRIEND]->(y:User) 

:

이제
MATCH (x:User)-[:FRIEND]-(y:User) RETURN x, y 

이의 말을하자를, xy의 경우 : 서로간에 친구이지만 y은 실제로는 x을 신뢰하지 않습니다. x 그런 식으로 느끼지 않는다 y.

그래서, y의 관점에서, 데이터 모델은 실제로 :

따라서
(x)-[:FRIEND]->(y) 

, 무언가 그러나

(y)-[:FRIEND {untrusted: true}]->(x) 

, x의 관점에서, 그건 가지처럼 보이지 않는 방법 이와 같이 관계를 만드는 데는 분명히 부적절합니다.

MATCH (x:User {...}), (y:User {...}) MERGE (x)-[f:FRIEND]->(y) SET f.untrusted = true 

... 지금 가지 모두 사용자의 관점에서이처럼 보이는 끝낼 때문에 :

(x:User {...})-[:FRIEND {untrusted: true}]->(y:User) 
(x:User {...})<-[:FRIEND {untrusted: true}]-(y:User) 

는 일반적인 조언은 일반적으로 대부분의 경우 두 개의 분리 된 관계를 방지하는 것입니다,하지만, 내가 약 어떻게 가야 관계의 경우에 대한 모델링?

답변

1

Neo4j의 관계는 항상 지정되어 있지만 표시 할 때 검색어를 지정할 때 반드시 방향을 지정할 필요는 없습니다.

나는이 경우 사용자가 다른 사용자를 "따라 다니는"트위터 유형 모델과 비교하는 것이 도움이된다고 생각합니다. 그 뒤를 반드시 왕복해야하는 것은 아닙니다 :

(Will)-[:FOLLOWS]->(BarackObama) 

은 버락 오바마가 윌을 뒤따라가는 것을 의미하지 않습니다.

데이터 모델과 더 일관성이 있다고 생각합니다.이 경우 양방향으로 관계를 생성하는 데는 아무런 문제가 없습니다.

관련 문제