【问题标题】:OrientDb edge between multiple vertex多个顶点之间的 OrientDb 边
【发布时间】:2018-04-30 19:43:25
【问题描述】:

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

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

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

('IntroducedBy'-'客户A'和'引入-流程'之间的边缘; '客户 B' 和 '引入流程' 之间的 'IntroducedTo' 边缘 和 'IntroducedFor'-'Bank C' 和 'Inroduction-Process' 之间的边)。

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

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

提前致谢。

【问题讨论】:

    标签: orientdb data-modeling object-relationships


    【解决方案1】:

    您所指的是Hypergraph

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

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

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

    【讨论】:

    • 感谢 Luigi 和 Amin。在三向关系的情况下,我将继续使用额外的顶点。对于枚举值,我现在使用 2 种方法: 1. 如果枚举值应该改变,我使用 Amin 建议的 LINK 属性。 2. 如果枚举非常固定,我使用带有 RegExp 约束的字符串值。
    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,当你有单向关系时,使用链接集是可以的。但是请注意,OrientDB 不管理链接和链接集的引用完整性,因此如果您删除链接记录,链接不会被删除(它只会指向任何内容)。另一个明显的缺点是链接只能在一个方向上遍历
    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 2020-02-11
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多