2014-07-14 4 views
3

시나리오 1 :
모델 :
User - [: 따르지] ->User
User을 - [: 따르지] ->PlaylistNeo4j : 동일한 이름을 가진 두 개의 서로 다른 관계


FOLLOW 둘 사이의 관계 User에는 속성이 있습니다. followerType은 사용자가 다른 사용자를 어떻게 추종하고 있는지를 나타냅니다. 사용자는 트위터 또는 구글 플러스를 통해 다른 사용자를 따라갈 수 있습니다. 그것은 아무것도 의미하지 않는다 여기 때문에 UserPlaylist 사이

FOLLOW 관계는 followerType 속성이 안된다. 이 관계는 단순히 재생 목록의 변경 사항을 사용자에게 알려야 함을 나타냅니다. 노래 추가, 노래 제거 등등.

질문 : 이런 종류의 시나리오에서, 우리는 다른 사람과 다른 사람과 구별하기 위해 서로 다른 이름을 부여해야합니까? 아니면 이것을 처리 할 다른 방법이 있습니까?


시나리오 2 :
모델 :
User - [: 현재 재생] -> Song
User - [: 현재 재생] -> Playlist

질문 : 이러한 종류의 시나리오에서는 모두 PLAYED r 엘레 션 션은 동일한 조치를 나타내지 만 두 가지 유형의 노드 SongPlaylist에 적용됩니다. 두 가지 관계를 동일하게 취급하거나 다른 이름을 지정하여 다르게 취급하는 것이 좋습니다. PLAYED_SONGPLAYED_PLAYLIST?

답변

2

상황에 따라 다르다, 당신은 그것이 쿼리 시간의 차이를 구별하려면)

은 "저렴"다른 유형이있다. 예를 들면 :

match (:User)-[:PLAYED_SONG]->() 

것보다 저렴 :

match (:User)-[:PLAYED]->(:Song) 

Neo4j는 대신 관계 유형 및 노드 레이블의, 관계 유형을보고 가지고 있기 때문에.

당신은 예를 들어 모두 노래와 재생 목록을 갖고 싶어 :

match (:User)-[:PLAYED]->() 

쉽게 이해할 수 있어야 할 것인가를보다 :

match (:User)-[:PLAYED_SONG|PLAYED_PLAYLIST]->() 

나의 제안은 FOLLOW 갈과 같은 담당해하는 것 유형.해당 설정으로 일부 성능 테스트를 수행하십시오.

관련 문제