精华 Neo4j官方教程:第24节,从关系型数据模型到图数据模型的建模
发布于 1 天前 作者 pangguoming 17 次浏览 来自 分享

教程目录 引自:https://neo4j.com/docs/getting-started/data-modeling/relational-to-graph-modeling/

从关系型数据模型到图数据模型的建模

对于有关系型数据建模背景的人来说,本指南将帮助您将现有的关系型数据建模知识转化为图数据建模知识。它将帮助您比较和对比两种建模过程的步骤,并帮助您识别两种数据库类型在数据建模方面的相似点和不同点。


简介

如果您熟悉关系型数据模型(包括表、列、关系基数等组件),那么图数据建模不会显得完全陌生。数据模型的设计仍然需要基于访问需求、查询需求、性能预期和业务逻辑。然而,图数据模型的结构略有不同。

您可能有一个全新的项目,想要创建图数据模型,但只熟悉如何创建关系型模型。或者您可能已经有一个现有的关系型模型项目,想要将其转换为图模型。无论哪种情况,本指南都将利用您对关系型数据模型的现有知识,教您如何创建图数据模型。


关系型与图数据库架构

快速回顾一下,关系型数据库依赖索引查找和表连接来连接不同的实体。这在性能方面很快会成为问题,尤其是当有多个表连接、表中有数百万行或查询复杂且需要通过子查询遍历多个层级时。

在概念页面的示例中,要找到 Alice 所属的部门,您需要查询 Person 表以找到代表 Alice 的行,该行与唯一 ID(主键)绑定。然后,查询需要访问关联实体表(Person_Dept),以找到她的 ID 与一个或多个部门 ID 的关联。最后,查询需要检查 Department 表,以找到关联实体表中部门 ID 的实际值。

下图回顾了我们刚刚描述的示例:

关系型模型示例

image 图 1. 关系型模型 - PersonDepartment

在图数据库中,您无需担心表连接和索引查找,因为图数据是通过每个单独实体及其与其他实体的关系来构建的。

那么,我们如何从创建关系型数据模型转向图数据模型呢?


数据模型转换技巧

以下是将关系型数据模型的关键组件转换为图数据模型组件的一些技巧。帮助您将关系型图表转换为图模型的步骤如下:

  1. 表到节点标签 - 关系型模型中的每个实体表变成图模型中的节点标签。
  2. 行到节点 - 关系型实体表中的每一行变成图中的一个节点。
  3. 列到节点属性 - 关系型表中的列(字段)变成图中的节点属性。
  4. 仅保留业务主键 - 删除技术主键,仅保留业务主键。
  5. 添加约束/索引 - 为业务主键添加唯一约束,为频繁查找的属性添加索引。
  6. 外键到关系 - 将指向其他表的外键替换为关系,然后删除外键。
  7. 移除默认值 - 删除具有默认值的数据,无需存储这些值。
  8. 清理数据 - 去除规范化表中的重复数据,将其提取到单独的节点以获得更清晰的模型。
  9. 索引列到数组 - 索引列名(如 email1, email2, email3)可能表示数组属性。
  10. 连接表到关系 - 连接表转换为关系,表中的列变成关系属性。

如果将上述列表中的项目应用到我们寻找 Alice 所属部门的示例中,我们可以得到如下图所示的图模型:

图模型示例

image 图 2. 图模型 - Alice 和三个部门作为节点

虽然两种模型都有类似之处,例如通过表结构或标签对数据进行分类,但图模型不会将数据限制在预定义的严格表/列布局中。我们将在下一节中查看另一个示例。


组织领域数据模型

为了让我们有另一个练习机会,我们将使用一个标准的组织领域,并展示它在关系型数据库和图数据库中的建模方式。您可以尝试自己创建图数据模型,然后看看它与示例模型的相似程度。

关系型组织结构图

image 图 3. 组织领域 - 关系型模型


转换步骤

  1. 首先,我们可以通过颜色将表分类为主域表和关联实体表。然后,我们可以将表名转换为节点标签。在这种情况下,ProjectPersonDepartmentOrganization 成为图模型中的标签。
  2. 表中的行变成它们自己的节点,行中的列变成节点上的属性。例如,Person 表中的一行将变成一个节点,节点上的属性包括姓名和出生日期。任何允许多个相似值的索引列将变成数组(例如 skill1, skill2, skill3 列转换为节点上的数组属性)。
  3. 如果有任何技术主键(即仅为了使行唯一而创建的主键,例如 project_id),则删除这些主键,仅保留业务需求所需的属性。还需要为业务主键添加唯一约束,以确保数据库不会允许重复。
  4. 外键用于关系型连接查找的,转换为关系,因为它们显示了节点之间的链接。连接表(或关联实体表)也变成关系,连接表中的列移动到关系属性。
  5. 由于 Neo4j 仅存储所需属性,因此无需存储空值和默认值,因此可以删除关系型模型中创建的任何默认值。
  6. 最后,任何为规范化表或为简化而去规范化创建的重复数据都需要删除,因为在图模型中不需要这些数据。

经过此过程后,您的图数据模型应类似于下图所示:

图组织结构图

图 4. 组织领域 - 图模型


总结

在开始导入数据之前,了解图模型的基本概念非常重要,因为随着需求的变化,调整模型或填充模型会变得更加容易。在即将发布的指南中,您将看到图数据的建模如何影响查询、性能和模型变化。

回到顶部