美文网首页
图数据库建模准则

图数据库建模准则

作者: 小何话饼 | 来源:发表于2019-12-04 22:25 被阅读0次

    先决条件

    您应该了解Neo4j 属性图数据模型的基础

    介绍

    如果您曾经使用过对象模型或实体关系图,则带标签的属性图模型看起来会很熟悉。

    图数据建模是用户将任意域描述为节点、属性以及标签之间的关系的连接图的过程。Neo4j图数据模型旨在以Cypher查询的形式回答问题,并通过为图数据库组织数据结构来解决业务和技术问题。

    图数据模型=白板友好

    图数据模型通常被称为“白板友好型”。通常,在设计数据模型时,人们在白板上绘制示例数据,并将其与绘制的其他数据连接以显示不同项目之间的连接方式。然后,对于关系数据模型而言,需要将白板模型重新格式化为结构化的标准表格。

    图数据建模中也存在类似的过程。但是,图数据模型并没有修改数据模型以适合规范化的表格结构,而是完全保留白板上绘制的状态。这就是图数据模型因“对白板友好”而得名的地方。

    让我们看一个例子来证明这一点。在下面的白板图中,我们有关于电影“黑客帝国”的数据集。

    (1)矩阵–白板模型

    接下来,我们对实体进行形式化并匹配关系类型的预期语法,以创建属性图模型的节点/关系视图。

    (2)矩阵–属性图模型的匹配节点、关系格式

    对于下一步,我们添加标签并确定节点的属性以及属性图模型的关系。

    (3)矩阵–添加标签和属性

    最后,我们可以在Neo4j中查看此数据模型,并确保它与我们在白板上绘制的内容匹配。另外,请注意它与我们最初设计的白板模型几乎相同。

    (4)矩阵– Neo4j中的最终模型

    轻松白板数据模型的功能使图数据模型非常简单和直观。无需草拟业务模型版本或向业务用户解释ERD术语。相反,任何人都可以轻松理解图数据模型。

    描述一个域

    为了更好地理解设计图数据模型的过程,以一小部分数据为例,并逐步介绍创建图数据模型的每个步骤。考虑以下场景,这些场景描述了示例数据的实体和连接。

    情境

    两个人,萨利约翰,是朋友。约翰萨莉 已阅读的书:图形数据库

    通过将组件标识为标签、节点和关系,使用上述语句中的信息来构建模型。将场景分为几部分,并将其定义为属性图模型的一部分。

    审阅–属性图元素

    节点

    在我们的域中识别的第一个实体是节点。节点是形成图的两个基本单位之一(另一个基本单位是关系)。

    节点通常用于表示实体,但也可以表示其他组件,具体取决于用例。节点可以包含名称-值对数据的属性。可以使用一个或多个标签为节点分配角色或类型。

    您通常可以通过识别域中的名词来找到图模型的节点。可以将诸如汽车、个人、客户、公司、资产等实体作为良好起点的节点。

    我们可以将节点标识为具有唯一概念标识的实体。在我们的场景中,我们从Sally和John开始,以下这些实体以粗体显示。

    方案–定义节点

    John和Sally 这两个人是朋友。约翰和萨利都读过图数据库这本书。

    提取节点:

    John

    Sally

    图数据库

    请记住,图数据库将每个实体实例作为一个单独的节点(即使约翰和萨利都是人,他们是两个单独的节点),而图数据库则与另一本书又是不同的节点。

    图模型–节点

    标签

    现在我们有了节点的概念,我们可以决定使用什么标签(如果有)来分配节点以对其进行分组或分类。Neo4j开发人员手册中以下段落中的定义对标签的作用以及在图数据模型中如何使用标签做了最好的说明。

    标签是一种命名的图构造,用于将节点分组。标有相同标签的所有节点都属于同一集合。许多数据库查询可以使用这些集合而不是整个图,从而使查询更易于编写和提高效率。节点可以用任意数量的标签标记,包括无标签,从而使标签成为图的可选添加。

    类似于我们通过识别场景中的名词作为图模型节点的识别方式,您可以通过通用名词或人员、地点、事物的分组来识别标签。车辆、人员、客户、公司、资产和类似术语等项目组的通用名词可以用作图模型的标签。

    为了确定我们是否可以在Sally和John场景中对对象进行分组,我们将首先确定语句中提到的节点(John,Sally,图数据库)的角色。我们可以在语句中找到两种不同类型的对象,下面将重点介绍。

    方案-定义标签

    John和Sally 这两个人是朋友。John和Sally都读过《图数据库》一书。

    提取标签:

    现在我们已经标识了节点和标签,我们可以更新图数据模型以将标签分配给它们描述的节点。对于JohnSally,我们使用Person角色。对于图数据库一书,我们使用角色Book

    图模型–标签

    关系

    现在,有了主要实体以及对它们进行分组的方法,但是我们仍然缺少图数据库模型的重要组成部分-数据之间的关系!

    关系将两个节点连接起来,使我们能够找到数据的相关节点。它具有显示箭头方向的源节点和目标节点。尽管必须在特定方向上存储关系,但是Neo4j在任一方向上都具有相同的遍历性能,因此可以在不指定方向的情况下查询该关系。

    图数据库中的一个核心、一致的原则是“没有断开的链接”,从而确保现有关系永远不会指向不存在的端点。由于关系始终具有开始和结束节点,因此不能删除节点而不删除其关联的关系。

    正如我们通过查找名词找到节点和标签一样,通常可以通过识别域中的动作或动词来找到图模型的关系。诸如DRIVES、HAS_READ、MANAGES、ACTED_IN之类的动作以及其他类似的动作可以定义为节点之间存在的不同类型关系。

    让我们确定JohnSally图数据库节点之间的交互(在下面的场景中用下划线表示)。

    方案–定义关系

    萨莉和约翰两个人是朋友。John和Sally 都读过图数据库一书。

    节点之间的关系:

    *约翰是萨利的朋友

    ·萨利是约翰的朋友

    ·约翰已读图数据库

    *萨利已读图数据库

    总结发现,John和Sally节点(标记为Person)可以通过具有关系的好友相互连接。John和Sally都已经阅读了Graph Databases书籍,因此我们可以将它们的每个节点(标记为Person)连接到Graph Databases节点(标记为Book)并具有已读关系。

    图模型–关系

    属性

    我们已经完成了交互创建基本图数据模型的过程。通过将这些实体的属性定义为键值属性,来进一步丰富此数据模型。

    属性是可以存储在节点或关系上的名称/值数据对。支持大多数标准数据类型作为属性,完整列表发布在我们的《开发人员手册》文档中

    属性使您可以存储有关节点与关系的相关数据。通常可以通过了解需要对数据提出哪些问题的用例来找到它们。

    对于John和Sally场景,可以列出一些有关数据的问题:

    John和Sally何时成为朋友?或者他们成为朋友多久了?

    Graph Databases书的平均评分是多少?

    谁是《Graph Databases》一书的作者?

    萨莉多大了?

    约翰几岁?

    莎莉和约翰,谁大一点?

    Sally或John,谁首先阅读Graph Databases书?

    从这个问题列表中,您可以确定我们需要存储在数据模型中的实体属性,以便回答这些问题。

    图形模型–属性

    使用最终模型,可以回答列表中定义的每个问题。当然,我们可以随时更改模型,并添加/删除关系、节点、属性和标签。属性图数据模型的灵活性和简单性可以使用户轻松地查看数据结构并根据业务变化的需求对其进行更新。

    图数据建模设计

    本指南仅是使用简单明了的场景进行数据建模的简介。在即将到来的指南中,有很多机会练习建模领域并分析可能需要对模型做哪些更改。

    每个数据模型都是唯一的,具体取决于用例以及用户需要数据支持的问题类型。因此,没有“一刀切”的数据建模方法。

    相关文章

      网友评论

          本文标题:图数据库建模准则

          本文链接:https://www.haomeiwen.com/subject/zvbjgctx.html