Nosql 每个方向具有不同名称的方向关系
在GraphDB平台(Neo4j、OrientDB、FlockDB、HyperGraphDB…)中,可以定义节点之间的关系 我需要定义方向关系,这样关系根据其方向具有不同的名称 例如:Nosql 每个方向具有不同名称的方向关系,nosql,neo4j,graph-databases,orientdb,Nosql,Neo4j,Graph Databases,Orientdb,在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) 然后,我想使用术语和方向遍历或查询一个图 当然,我不想定义两个关系,但只定义一个 有时我甚至想使用非方向性名称,例如:
Parent(A,B) := Sibling(B,A).
Call(A,B) := Answer(B,A);
TalkWith(A,B) := Call(A,B) || Call(B,A)
然后,我想使用术语和方向遍历或查询一个图
当然,我不想定义两个关系,但只定义一个
有时我甚至想使用非方向性名称,例如:
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))
或
或
哪些现有的GraphDB平台支持它?这听起来像是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;
}
}
}
实际上,我们有无向关系的概念。例如,“HasMet”:如果人A遇到了人B,那么B必然也遇到了A,并且A和B在关系中扮演相同的角色
请注意,单向性不仅仅是命名,它是一个核心语义概念,数据库或建模语言可能理解它,也可能不理解它
此外,在InfoGrid中,您可以定义一些遍历规范,并将它们别名为您喜欢的任何对象,包括基本遍历(转到与特定类型关系相关的邻居)或多步骤遍历(例如转到您母亲身边的叔叔)。在Gremlin中(http://gremlin.tinkerpop.com),您可以根据数据中的显式内容创建抽象/隐式/推断关系。因此,您可以用这种方式定义推论
Gremlin在TinkerGraph、Neo4j、OrientDB、DEX和RDF Sail商店工作
希望有帮助,
Marko.无向关系很好,但它仍然不能满足我的要求。我不确定这是否有用,因为在从数据库获取数据时,您必须执行MyRelationshipType.valueOf(relationshipRetrievedFromTheDb.name())或类似操作。也就是说,我自己实际上也使用了类似的模式:-)关于关系方向,你是对的,这不是DB问题:你可以在Neo4j中检索传出/传入关系或忽略方向。在我看来,Gremlin可以通过使用