5

我正在研究将图形数据库用于需要对关系之间的关系进行建模的项目。例如,A 和 B 之间的平局可能以 C 和 D 之间的平局为条件。

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

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

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

根据要求提供图表 - 包括尝试的解决方案。

AB关系影响CD关系

四剂之间的催化关系

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

催化剂关系的可能解决方案

影响其他关系的关系的可能解决方案

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

最后一张图 - 关系数据库解决方案。这看起来更简洁一些,但不如 Graph db 方法灵活。也许效率不高? 在此处输入图像描述

4

2 回答 2

1

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

于 2013-10-26T10:43:52.257 回答
0

您可以解决使用构建在图形数据库之上的超图的问题。

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

(graph, subject, predicate, object)

您可以使用以下命名法与基于类 mongodb 的集合的抽象相关联:

(collection, object_id, field, value)

不同的是,由于 RDF 数据库是一个集合,您可以拥有多个相同field的元组,以下在大多数 RDF 数据库中是有效的:

(wikipedia, P4X432, title, "Resource Description Framework")
(wikipedia, P4X432, see-also, "RSS")
(wikipedia, P4X432, see-also, "Dublin Core")

在大多数 RDF 数据库中;元组项可以是任何字符串,有时它们可​​以是浮点数等……有时,元组项是 URI。无论如何,出于这个问题的目的,让我们忘记 URI。

所以你有以下数据:

  • 一个朋友B
  • C朋友D

您在 RDF 数据库中对其建模如下:

(f1, A, friend, B)
(f2, C, friend, D)

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

(f3, f1, influence, f2)
于 2018-09-14T12:22:52.017 回答