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

Nosql Neo4j(或其他一些图形数据库)可以处理关系之间的关系吗?,nosql,neo4j,graph-databases,Nosql,Neo4j,Graph Databases,我正在考虑为一个需要对关系之间的关系进行建模的项目使用graph db。例如,a和B之间的联系可能以C和D之间的联系为条件 我还需要对节点和其他关系之间的关系进行建模。催化关系可能是一个很好的例子。代理X加速代理Y和Z之间的关系。关系需要包含描述关系的属性 我可以通过使节点和关系从同一类型继承来生成关系数据库来实现这一点。因此,每种类型的表数据库结构在BaseType表中具有主键,并且与子类型表(节点和关系)具有一对一的关系。然后,关系表有三个指向BaseType表的外键。一个是它的主键,另两个

我正在考虑为一个需要对关系之间的关系进行建模的项目使用graph db。例如,a和B之间的联系可能以C和D之间的联系为条件

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

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

但是它包含许多小对象的连接,这符合对数据库的描述,数据库应该在Graph DB中表现最好

根据要求绘制图表-包括尝试的解决方案

我试图通过创建关系节点来解决此问题

因此,我在这里提出的解决方案包括创建更多节点。我想这可能行得通,但不知道我是否让它变得不必要的复杂

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

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

您可以解决在图形数据库的顶部使用hypergraph构建的问题

或者您可以使用RDF数据库。RDF数据库是一组4元组,如下所示:

(graph, subject, predicate, object)
您可以使用以下nomaneclautre来关联类似mongodb的基于集合的抽象:

(collection, object_id, field, value)
不同之处在于,由于RDF数据库是一个集合,因此可以有多个元组具有相同的
字段
,这在大多数RDF数据库中是有效的:

(wikipedia, P4X432, title, "Resource Description Framework")
(wikipedia, P4X432, see-also, "RSS")
(wikipedia, P4X432, see-also, "Dublin Core")
在大多数RDF数据库中;元组项可以是任何字符串,有时它们可以是float等。。。有时,元组项是URI。无论如何,出于这个问题的目的,让我们忘掉URI

因此,您有以下数据:

  • 朋友B
  • C朋友D
您可以在RDF数据库中对其建模,如下所示:

(f1, A, friend, B)
(f2, C, friend, D)
如果您可以添加以下元组来表示C和D之间的友谊受到A和B之间友谊的影响:

(f3, f1, influence, f2)

请以图表形式显示示例谢谢@stephen mallette。与关系数据库操作相比,您能推测性能吗?一般来说,对于这种模型,我会怀疑图形数据库的性能优于关系数据库。这种说法取决于您打算执行的查询类型,但我认为您会在需要深入遍历关系的场景中看到最明显的区别(例如,查找朋友的朋友的朋友是一个典型的示例)。