0

我正在尝试为 OrientDB 建模数据。我是图形数据库的新手。我在建模过程中遇到了疑问(从 RDBMS 到 GraphData 的范式变化)。
如何在图形数据库(OrientDB)中建模三级(3 向,即 3 顶点之间)关系?一个例子如下:

  1. 客户 A 将客户 B 介绍给银行 C。
  2. 员工 A 在公司 D 中推荐了员工 B 和员工 C。
  3. 恶魔 A 将朋友 B 介绍给朋友 C。
  4. A 人是 B 人在抵押公司 C 的贷款账户的授予人。
  5. 人员 A 和 B 已从代理 C 购买了保险公司“大都会人寿”的保单类型“人寿保险”。

目前,我在(如 Introduction-Process)和所有相关顶点的边之间使用一个顶点

(“IntroducedBy”-“客户 A”和“引入流程”之间的边缘;“IntroducedTo”-“客户 B”和“引入流程”之间的边缘和“IntroducedFor”-“银行 C”和“引入流程”之间的边缘')。

它是正确的还是有其他选择?

如何表示一个枚举值?例如客户帐户类型。目前,我创建了一个 AccountType 类,并具有固定数量的顶点(与 Enum 值相同),并创建了从 Account 到 AccountType 的链接。有没有更好的选择来对图形数据库中的枚举进行建模?

提前致谢。

4

2 回答 2

1

您所指的称为超图

市场上所有主要的图数据库(包括 OrientDB)都没有实现超图功能,所以你必须在两者之间使用一个顶点,就像你现在做的那样。

对于枚举,您的方法可能是正确的,但是您很快就会得到超级节点(具有很多连接的顶点),这不是您想要的。

在大多数情况下,您不需要一个完整的顶点来表示和枚举值,一个字符串(或一个数字)通常就足够了。在 OrientDB 中,要将属性限制为一组有限的值,您可以在模式中定义验证规则(例如,正则表达式),请参阅http://orientdb.com/docs/2.2.x/SQL-Alter-属性.html

于 2017-11-20T07:38:07.520 回答
1

您不能使用 LINKSET 数据类型,而不是创建这些边吗?这将帮助您在不创建额外边缘的情况下存储所需的参考。

我是 OrientDB 的新手,可能是错的,但我遇到了@Luigi 提到的超级节点问题,并使用 LINKSET 解决了它。

就我而言,它是一个包含处方和药物以及一些常用药物的医学数据库,其中创建了一个超级节点。

于 2017-11-22T13:29:08.247 回答