我正在尝试为OrientDB建模数据。我是图形数据库的新手。我在建模过程中遇到了疑问(范例从RDBMS变为GraphData) 如何在Graph数据库(OrientDB)中建立三级模型(3-way,即3-vertex之间)关系?一个例子如下:
- 客户A将客户B介绍给银行C.
- 员工A在D公司中提到了员工B和员工C.
- Fiend A将朋友B介绍给朋友C.
- A人是抵押公司C中B人的贷款账户的一部分。
- 人A& B购买了政策类型' Life-Insurance'保险公司' MetLife'来自特工C.
醇>
目前,我正在使用它们之间的顶点(如Introduction-Process)和所有相关顶点的边
('介绍' -edge在'客户A'和' Inproduction-Process&#39 ;; '介绍了' -edge'客户B'和' Inroduction-Process' 和'介绍' -edge' Bank C'和' Inroduction-Process')。
是否正确或有其他选择吗?
如何表示枚举值?例如客户帐户类型。 目前我已经创建了一个AccountType类并且具有固定数量的顶点(与Enum值相同)并创建从Account到AccountType的链接。有没有更好的选择来建模图数据库中的枚举?
提前致谢。
答案 0 :(得分:1)
您所指的是Hypergraph
市场上的所有主要图形数据库(包括OrientDB)都没有实现超图功能,所以你必须在它们之间使用一个顶点,就像现在一样。
对于枚举,您的方法可能是正确的,但您很快就会得到超级节点(具有大量连接的顶点),这不是您想要的。
在大多数情况下,您不需要完整的顶点来表示和枚举值,字符串(或数字)通常就足够了。在OrientDB中,要将属性约束为一组有限的值,您可以在模式中定义验证规则(例如正则表达式),请参阅http://orientdb.com/docs/2.2.x/SQL-Alter-Property.html
答案 1 :(得分:0)
您不能使用LINKSET数据类型而不是创建这些边缘吗?这将有助于您存储所需的参考,而不会产生额外的边缘。
我是OrientDB的新手,可能是错的但是我遇到了@Luigi提到的超级节点问题并使用LINKSET解决了它。
在我的案例中,它是一个医学数据库,包含处方和药物以及一些创建超级节点的常用药物。