图数据库建模基础
图数据库建模
1、建模原因
如果使用 Neo4j 图来支持部分或全部应用程序,则必须与您的相关者协作设计一个图,该图将:
- 回答应用程序的关键用例。
- 为关键用例提供最佳的 Cypher 语句性能。
Neo4j 图的组件
用于定义图形数据模型的 Neo4j 组件包括:
- 节点
- 标签
- 关系
- 性能
数据建模过程
-
了解图数据的实用需求
-
节点、关系设计
-
建立初始测试数据模型
-
使用 cypher 创建作为实例模型的图形
-
测试图用例,包括性能等多个指标
-
根据关键用例的变化或性能原因,重构或改进图数据库模型
-
在图上进行重构,并通过 cypher 重新测试
图数据库建模是一个迭代的过程,初始图模型是一个起点,但随着了解有关用例的更多信息,或者用例发生变化,初始化图形就会需要更改,此外,在图扩展或是缩减时,可能需要重构用例已到达最佳性能。
域
在建立模型之前,需要做到以下事情:
- 确定应用程序相关的业务人员和开发人员
- 沟通业务人员和开发人员:
- 详细描述应用程序
- 标识应用程序的用户(人员、系统)
- 对应用程序的用例达成一致
- 对用例程序的重要性进行排名
应用程序的大多数用例都可以通过问题来枚举,用例有助于定义应用程序在运行时的行为方式。
下面是一些例子:
- 电影里演了什么?
- 哪个人导演了电影?
- 一个人演过什么电影?
- 有多少用户评价了一部电影?
- 谁是出演电影的最年轻的人?
- 一个人在电影中扮演什么角色?
- 根据 imDB 的数据,特定年份评分最高的电影是什么?
- 演员演过哪些剧情电影?
- 哪些用户给电影打了 5 分?
在上述的域中,我们希望区分出演或执导电影的用户与为电影评分的用户或评论者。例如他们的出生日期,他们的tmdbId等。 对电影进行评级的用户只会被命名或识别。
模型的目的
为应用程序执行图数据库建模过程时,至少需要两种类型的模型:
- 数据模型
- 实例模型
数据模型
数据模型描述图形的标签、关系和属性。它并非图数据库中创建的特定数据
下面是一个数据模型的示例:
没有任何东西能够唯一标识具有给定标签的节点,但是,图形数据模型很重要,因为它定义了应用程序创建和使用图形时需要使用的标签、关系类型和属性名称
建模样式指南
在开始图形数据库建模过程时,就标签、关系类型和属性键值的命名方式达成一致非常重要。标签、关系类型和属性键区分大小写,这与不区分大小写的 cypher 语句不同。
Neo4j 最佳实践是在命名图形元素时使用以下方法,但我们可以根据自己的应用程序进行调整。
- 标签是以大写字母开头的单个标识符,推荐大驼峰命名法。
- eg:Person ,GitHubRepo
- 关系类型是带有下划线字符的全大学字母的单个标识符。
- eg: MARRIED_TO
- 节点关系和属性键值对是以小写字母开头的单个标识符,同样推荐使用小驼峰命名法。
- eg: edptId,name
PS: 属性键名称不必是唯一的,例如“ Person” 节点和 “Movies” 节点都可以设定 tmddbId 的属性键
实例模型
图形数据建模过程的一个重要部分是针对用例测试模型。为此,我们需要有一组示例素具,可用于查看是否可以用模型回答用例。
如下图是一个实例模型的示例:
在该实例模型中,我们创建了人物和电影节点和一些实例,以及他们之间的关系。拥有这些实例模型将有助于测试我们的使用案例。