概述
Schema代表图模型,包括图中所有允许的点、边类型,以及它们的属性和关联的约束。
在一个Schema-Free图中,可直接向图中插入点和边,对应的Schema和属性会自动创建。
然而,在一个非Schema-Free图中,必须先定义Schema,才能插入点、边数据。
在嬴图中,每个点属于且仅属于一个Schema,每条边属于且仅属于一个Schema。运算符@能指定一个Schema,例如@Account指定名为Account的Schema。
内置的默认Schema
每个图集都带有一个内置的点Schema和一个内置的边Schema,均名为default。用户可自由使用这两个Schema,但无法修改或删除。
显示Schema
获取当前图集的Schema信息:
// 显示所有schema
show().schema()
// 显示所有点schema
show().node_schema()
// 显示指定的点schema
show().node_schema(@user)
// 显示所有边schema
show().edge_schema()
// 显示指定的边schema
show().edge_schema(@transfers)
Schema信息展示在不同的表中:
- 点Schema:
_nodeSchema包含所有点Schema,_nodeSchema_shard_<id>包含存储在某个Shard中的点Schema。 - 边Schema:
_edgeSchema包含所有边Schema,_edgeSchema_shard_<id>包含存储在某个Shard中的边Schema。
表中包含以下字段:
字段 |
描述 |
|---|---|
id |
Schema ID |
name |
Schema名称 |
description |
Schema描述 |
status |
Schema当前状态,仅有CREATED |
properties |
Schema关联的属性,每个属性包含name、id、type、description、index、fulltext、nullable、lte、read、write、encrypt和is_deleted |
另有表_graphCount,它统计每个Schema的点或边总数。每个边Schema是根据它连接的起点和终点的Schema的不同组合进行计数的。
创建Schema
使用单个create()语句可创建一或多个schema。串联使用node_schema()或edge_schema()方法可指定每个schema。
create()
.node_schema("<schemaName>", "<schemaDesc?>")
.edge_schema("<schemaName>", "<schemaDesc?>")
...
| 方法 | 参数 | 描述 |
|---|---|---|
node_schema()或edge_schema() |
<schemaName> |
Schema名称。命名规范如下:
|
<schemaDesc?> |
可选。对schema的描述 |
创建一个点schema:
create().node_schema("user", "Self-registeration")
创建一个边schema:
create().edge_schema("likes")
创建多个schema:
create()
.node_schema("user", "Self-registeration")
.node_schema("movie")
.edge_schema("likes")
修改schema名称和描述
使用语句alter().node_schema().set()或alter().edge_schema().set()修改schema名称和描述。无法修改两个默认schema。
修改点schema@user的名称和描述:
alter().node_schema(@user).set({name: "User", description: "club users"})
修改边schema@join的名称并删除其描述:
alter().edge_schema(@join).set({name: "joins", description: ""})
修改点schema@account的名称:
alter().node_schema(@account).set({name: "user"})
修改边schema@link的描述:
alter().edge_schema(@link).set({description: "the link between people and event"})
删除schema
使用单个drop()语句可以删除一或多个schema。串联使用node_schema()或edge_schema()方法可指定每个schema。Schema删除操作以作业形式进行,稍后可使用show().job(<id?>)确认删除操作是否完成。
删除schema时,会同时从数据库删除该schema下的点或边。请注意,删除点时,与其相连的边也会同时删除。无法删除两个默认schema。
删除点schema@user:
drop().node_schema(@user)
删除边schema@likes:
drop().edge_schema(@likes)
删除多个schema:
drop().node_schema(@user).edge_schema(@likes)