Neo4j(或其他图形数据库)可以处理关系之间的关系吗?

时间:2013-10-26 00:49:40

标签: nosql neo4j graph-databases

我正在研究将图形数据库用于需要建立关系之间关系的项目。例如,A和B之间的联系可能取决于C和D之间的联系。

我还需要建模节点和其他关系之间的关系。催化关系可能是一个很好的例子。代理X加速代理Y和Z之间的关系。关系需要包含描述关系的属性。

我可以通过使节点和关系从相同类型继承来生成关系数据库来实现此目的。因此,每种类型数据库结构的表具有BaseType表中的主键和与子类型表的一对一关系:节点和关系。然后,Relationship表具有BaseType表的三个外键。一个是它的主键,另外两个构成了关系的源和目标。因此,源和目标中的一个或两个可以是关系类型。

但是这包含许多小对象的连接,这些连接符合应该使用Graph DB最佳性能的数据库的描述。

要求的图表 - 包括尝试的解决方案。

A-B relationship influences the C-D relationship

Catalytic relationship between four agents

我尝试通过创建关系节点来解决问题。

Possible solution to catalyst relationship

Possible solution to relationships influencing other relationships

所以我在这里提出的解决方案涉及创建更多节点。我想这可行,但想知道我是否会让它变得不必要地复杂化。

最后一个图 - 关系数据库解决方案。这看起来有点干净,但不像Graph db方法那么灵活。也许效率不高? enter image description here

1 个答案:

答案 0 :(得分:1)

通过添加节点/顶点来解决这些连接关系来建模“边缘边缘”的方法是有意义的。对于公开属性图模型(如Neo4jTitan和其他Blueprints - 启用的图形)的图形数据库,模拟hypergraph是获得该模型的正确方法功能。 gremlin-users邮件列表中正在进行讨论,现在正在蓝图的上下文中讨论这个主题......你可以阅读它here