2011-05-03 3 views
5

GraphDB 플랫폼 (Neo4j, OrientDB, FlockDB, HyperGraphDB ...)에서는 노드 간의 관계를 정의 할 수 있습니다.각 방향에 대해 서로 다른 이름의 방향 관계

관계가 방향에 따라 다른 이름을 갖도록 방향성 관계를 정의해야합니다. 예를 들어

는 :

Parent(A,B) := Sibling(B,A). 

그런 다음, 나는 통과 용어와 방향을 모두 사용하여 그래프를 조회 할.

물론 두 가지 관계 만 정의하고 싶지는 않습니다.

예를 들어, 내가 부탁 할 수 있습니다 쿼리/

Call(A,B) := Answer(B,A); 
TalkWith(A,B) := Call(A,B) || Call(B,A) 

그리고 방향 또는 indirectional 순회을 사용합니다 :

때때로 난 예를 들어, 무 지향성 이름을 사용하려는

Get any X that TalkWith(A,X)) 

또는

Get any X that Call(A,X)) 
,

또는 기존 GraphDB 플랫폼을 지원

Get any X that Answer(A,X)) 

?

+1

Gremlin이 [User Defined Steps] (https : // github.com/tinkerpop/gremlin/wiki/User-Defined-Steps) – nawroth

답변

5

Gremlin (http://gremlin.tinkerpop.com)에서 데이터의 명시적인 관계를 추상/암시 적/유추 관계로 만들 수 있습니다. 따라서 이러한 방식으로 추론을 정의 할 수 있습니다.

https://github.com/tinkerpop/gremlin/wiki/User-Defined-Steps

는 그렘린은 TinkerGraph, Neo4j, OrientDB, DEX, 및 RDF 항해 상점을 통해 작동합니다.

도움이 되길, Marko.

2

데이터베이스 수준이 아닌 UI 수준의 문제로 들립니다. 지시 된 관계를 사람에게 친숙한 이름으로 매핑하려고합니다.

Neo4j를 들어, 사용자 정의 RelationshipType에이 정보를 넣을 수 있습니다 :

public enum MyRelationshipType implements RelationshipType 
{ 
    CHILD("Parent Of", "Child Of"); 

    public MyRelationshipType(final String forwardString, final String backwardString) 
    { 
     this.forwardString = forwardString; 
     this.backwardString = backwardString; 
    } 

    private final String backwardString; 

    private final String forwardString; 

    public String getDisplayString(final boolean forward) 
    { 
     if (forward) 
     { 
      return this.forwardString; 
     } 
     else 
     { 
      return this.backwardString; 
     } 
    } 
} 
+1

페어팅 할 때 어쨌든 MyRelationshipType.valueOf (relationshipRetrievedFromTheDb.name()) 또는 이와 비슷한 것을 수행해야하므로이 기능이 얼마나 유용할지 모르겠습니다. DB에서. 즉, 실제로 비슷한 패턴을 사용했습니다 :-) 관계 방향에 관해서는 DB 문제가 아닙니다. 나가는/들어오는 관계를 검색하거나 Neo4j에서 방향을 무시할 수 있습니다. – nawroth

1

InfoGrid, 우리는 방향성이 관계의 개념을 가지고있다. 예를 들어, "HasMet": 사람 A가 사람 B를 만났고, 필연적으로 B도 A를 만났고 A와 B도 관계에서 동일한 역할을 수행합니다.

단방향성은 명명을 뛰어 넘는 데이터베이스 또는 모델링 언어에서 이해할 수도 있고 이해하지 못할 수도있는 핵심 의미 개념입니다.

또한 InfoGrid에서 몇 가지 TraversalSpecifications를 정의하고 기본적인 트래버스 (특정 관계 유형과 관련된 이웃으로 이동) 또는 다단계 트래버스 (예 : 삼촌이있는 곳으로 이동) 등 원하는대로 별칭을 지정할 수 있습니다. 너의 어머니 쪽).

+1

우회향 관계는 좋지만 그래도 원하는 것은하지 않습니다. –

관련 문제