Направленные отношения с различным именем для каждого направления
-
28-10-2019 - |
Вопрос
На платформах 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)
И используйте направленные или косвенные обходы / запросы
Например, я могу спросить:
Get any X that TalkWith(A,X))
или же
Get any X that Call(A,X))
или же
Get any X that Answer(A,X))
Какие существующие платформы GraphDB поддерживают его?
Решение
В Gremlin (http://gremlin.tinkerpop.com) вы можете создавать абстрактные/неявные/предполагаемые отношения из того, что явно в данных. Таким образом, вы можете определить выводы таким образом.
https://github.com/tinkerpop/gremlin/wiki/user-defience-Steps
Gremlin работает над магазинами Tinkergraph, Neo4J, OrientDB, DEX и RDF.
Надеюсь, это поможет, Марко.
Другие советы
Это звучит как проблема, а не на уровне базы данных. Вы пытаетесь сопоставить направленные отношения с человеческим именем.
Для NEO4J вы можете поместить эту информацию в свои пользовательские отношения:
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;
}
}
}
В Инфогрид, у нас есть концепция неисправенных отношений. Например, «Hasmet»: если человек A встретил человека B, обязательно B также встретил A, а A и B играют ту же роль в отношениях.
Обратите внимание, что однонаправленность выходит за рамки именования, это основная семантическая концепция, которая может или не может быть понята с помощью базы данных или языка моделирования.
Кроме того, в Infogrid вы можете определить себя несколько обезвреживаний и псевдоним их на все, что вам нравится, включая основные обходы (перейдите к соседям, связанным с определенным типом отношений), или многоэтапные проходы (например, идите к дядям со стороны вашей матери) Анкет