图数据基本概念¶
一部电影连接着演员、导演和观众。沿着这些关系,可以找到演员参演的电影、合作过的导演,以及这些导演的其他作品。本文以电影数据为例,介绍图数据库如何用点、边和属性组织数据,让这些关系可以被查询。
点、边和属性¶
- 点表示一个对象,例如一位演员或一部电影。
- 边连接两个点,表示它们之间的关系。边有方向,例如参演关系从演员指向电影。
- 属性由名称和值组成,用于描述点或边的具体信息。电影点的
id(编号)和name(名称)是点的属性;表示观看关系的Watch边用rate属性记录用户对电影的评分。
下图使用内置的movie数据集。圆点表示对象,箭头表示关系;点类型和属性标在圆点旁,评分rate标在Watch边上。完整的数据模型见示例数据集。
点的标识¶
本数据集中的每种点类型都使用id作为主键,用于标识一个点。在同一张图中:
- 同一类型的点不能使用相同的
id。 - 不同类型的点可以使用相同的
id。例如,图中的电影和类别都使用id: 11。
电影可能同名,因此查询指定电影时通常使用编号。
类型与标签¶
类型定义结构¶
类型规定点或边的结构,包括属性名称和数据类型。在本数据集中,Movie和Actor是点类型,Act是边类型。
边类型还规定两端允许连接的点类型,例如Act从Actor指向Movie。
标签用于匹配¶
如果要查询数据集中的所有人物,需要同时匹配演员、导演和用户这三种点类型。标签是查询时用于匹配点或边的标记,多个类型可以共享一个标签:Actor、Director和User都带有Person标签。
下图列出这三种点类型及其属性名称:
PersonActor(演员)id,name,birthDateDirector(导演)id,name,birthDateUser(用户)id
共享标签的类型可以有不同的属性。User只有id,而Actor还包含name和birthDate。因此,按Person标签查询时,不能假定每个匹配的点都有name属性。
按类型或标签查询¶
在图查询语言(GQL)中,可以按类型或标签匹配点:
| 匹配方式 | 写法 | 匹配的点 |
|---|---|---|
| 按类型 | (v@Actor) |
演员 |
| 按标签 | (v:Person) |
演员、导演和用户 |
这些写法中:
(v@Actor)这样的圆括号写法是点模式,用于描述要匹配的点。@Actor指定点类型,:Person指定标签。v是点变量,用于在查询的其他位置引用匹配到的点。您可以换用m或person等名称,但需要同步修改查询中对该变量的所有引用。
更多语法见点模式。
图类型与图¶
图类型定义一张图允许包含的点类型、边类型和属性。movie_type定义了电影数据集使用的结构。
图保存实际的点、边和属性值。movie图使用movie_type,其中的数据需符合该图类型的定义。
- 图类型:
movie_type Movie点类型定义id: INTname: STRING
- 图:
movie 一个
Movie点id: 11name: Star Wars: A New Hope
movie是图名,Movie是图中的一种点类型名,名称区分大小写。
Schema¶
Schema 是组织图类型和图的命名空间,类似数据库内的目录。每个 Schema 都有自己的路径。
系统会自动创建/default_schema。快速开始中的movie_type和movie都创建在这个 Schema 中,无需为教程另建 Schema。
会话与工作图¶
会话保存多次查询之间的上下文,包括当前使用的 Schema 和工作图。在默认配置下,新会话使用/default_schema。未指定其他路径时,图类型和图都会在当前会话的 Schema 中创建或查找。
工作图是查询要访问的图。加载数据后仍需指定工作图:加载movie数据集会创建图并写入数据,但不会将其选为工作图。
执行MATCH等访问图数据的查询前,可以为会话设置工作图,也可以在查询开头用USE指定图:
| 设置方式 | 写法 | 生效范围 |
|---|---|---|
| 会话设置 | SESSION SET GRAPH movie |
当前会话的后续查询 |
| 查询内指定 | USE movie |
仅当前查询 |
查询内指定的图优先于会话设置,且不会改变会话的工作图。
两种方式的完整示例见选择图并查询电影。
重新连接或切换客户端并新建会话后,需要再次指定图才能查询其中的数据。已有数据可继续使用,无需因重新连接而重新加载。
概念对照¶
| 类别 | 用途 | 概念 |
|---|---|---|
| 数据 | 保存实际对象、关系和具体值 | 图、点、边、属性值 |
| 结构 | 定义图中允许保存的数据结构 | 点类型、边类型、图类型、属性定义 |
| 查询 | 匹配和引用数据 | 标签、点变量、模式 |
| 会话 | 定位并选择查询要访问的图 | 当前 Schema、工作图 |
下一步¶
按连接并完成首次查询加载movie示例数据集,并查询电影及其演员。
