图数据库建模准则

先决条件

您应该了解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书?

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

图形模型–属性


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

图数据建模设计

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,548评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,497评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,990评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,618评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,618评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,246评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,819评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,725评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,268评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,356评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,488评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,181评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,862评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,331评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,445评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,897评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,500评论 2 359