2014-06-20 4 views
0
내가 다음 문제를 해결했습니다

:관계에 관계를 모델링하는 방법은 무엇입니까?

(n:Node)-[r:HAS_ATTRIBUTE]->(a:Attr {name ="xxxx"}) ->(t:Type) 

모든 a:Attr 노드가 있습니다 : 번역 협회 :

(a) -> [:_HAS_TRANSLATION] -> (tr1:Translation {name : "yyyy", lang ="fr"}) 

(a) -> [:_HAS_TRANSLATION] -> (tr2:Translation {name : "kkkk", lang ="de"}) 
이제

, 내가 좋아하는 것

을 나는 3 개 노드가 동일한 것을 모델링하기 위해 관계를 사용하는 것 :

(n:Node)-[r:HAS_ATTRIBUTE {name ="xxxx"}]->(t:Type) 

n:Node_HAS_ATTRIBUTE을 새로 추가하지 않고도 HAS_ATTRIBUTE 이름 속성에 번역을 추가하려면 어떻게해야하나요?

답변

1

나는 관계의 관계와 같은 일이 필요합니다은 ... 다행스럽게도 필자는 당신의 질문을 이해하고 있습니다. 중간 노드를 고려하자.

(n:Node)-[:HAS_ATTRIBUTE]->(attr:Attribute {name: "X")), 
(attr)-[:HAS_TRANSLATION]->(tr1:Translation), 
(attr)-[:HAS_TYPE]->(t:Type) 

... 또는 이와 비슷한 것. "attr"은 새로운 중간 노드 일 것입니다. (분명히 무엇이든 관계를 명명 할 수 있습니다).

속성 (예 : 속성의 인스턴스)을 구체적으로 지정해야하는 경우 'attr'을 'specificAttr'과 같이 바꾸고 'attr'을 'attr'로 지정하십시오.

중개 노드는 모델링 질문을 다루는 가장 좋은 방법으로, 관계를보다 완벽하게 정의해야합니다.

+0

할 수있는이를 달성하기 위해,하지만 정확하게 원래의 질문에, 중간 노드는 이미 존재이다. 그리고 내 목표는 중간 노드를 제거하는 것입니다 .... –

0

정확하게 이해한다면 2 개의 노드와 하나의 관계 만 필요합니다. 맞습니까?

는 단순히 예

(n:Node)-[r:HAS_ATTRIBUTE]-> 
(a:Attr {name ="xxxx", lang_fr="yyyy", lang_de="zzzz"})-> 
(t:Type) 
+0

아니요, 이건 내가 소유자와 각각 다른 번역을 유지해야하기 때문에이 문제를 해결하지 못합니다. –

+2

그 경우에는 중개 노드가 필요합니다. –

+0

그리고, IMHO, 관계에 관계를 추가하는 기능은 Neo4j의 큰 향상이 될 것입니다. –

관련 문제