如何为图形数据库建立模式建模?

时间:2019-06-07 14:01:09

标签: database-design graph neo4j database-schema graph-databases

我熟悉关系数据库系统,其中一个用特定的列定义表,并且所有输入的数据都完全像在数据库模式中建模的那样存储。所有传入的数据都会自动验证,即无法存储缺少必填列值的记录。

图形数据库,例如neo4j,允许不受限制地和自由式地存储节点和关系。我想知道是否有类似图数据库的架构。是否可以定义代表User的节点始终需要与代表Department的节点至少具有一种关系?我不是特别在寻找neo4j方式,而是一般的形式主义或符号。这样的东西存在吗?

对于neo4j,有Constraints,但它们仅对特定节点类型的节点属性进行了限制。我正在寻找一种对基于关系的限制进行建模的方法。

编辑: 我正在寻找图形数据库中已建立的表示法/架构定义,它对应于基于关系表的数据库中的表架构定义。 同时,我发现了一个向数据库添加定义元模型here的节点的建议。但是我希望能找到答案,这些答案可以使我指向已建立的最佳实践,研究论文或数学定义,例如,数据库模式是整体图的子图,并与包含实际数据的节点一起形成二部图。

3 个答案:

答案 0 :(得分:1)

不是所有的图形数据库都是“无模式的”。 Objectivity / DB是使用模式的面向对象的图形数据库。如您所期望的,然后使用该架构来约束分配给对象字段的数据。节点和边缘是对象。

由于在大型对象和图形数据库中使用了Objectivity / DB,所以该架构也用于支持“放置模型”,即在数据库中放置不同对象的位置。放置模型加快了检索速度,因为系统仅在存储X的那些放置位置中查找X类型的对象。

此外,Objectivity / DB支持“模式演变”,其中可以更改定义的模式类型,并且数据库了解如何解释现有数据上的那些更改。

答案 1 :(得分:0)

我的理解: 对于关系数据模型,应尝试将其转换为对自然语言的描述,然后将对自然语言的描述转换为图形模型或其他模型。

例如,用户表user_id是注释表的外部构造,则表达式是自然语言,是“用户的注释”,但用户表中的记录也是用户的属性,并且注释表的记录本身就是关注的焦点。属性,都是节点,关系是外部关系

答案 2 :(得分:0)

代表“用户” 的节点始终需要与代表“部门”

的节点至少具有一个关系。

这会限制声音-现在允许使用孤立的(孤立的)顶点-每个顶点都必须附加一个关系。

或者将“部门:字符串” 建模为顶点“用户” 类型(表)的属性字段是否合理。