介绍
模式 schema 代表了数据的某种结构定义,更加直观地将真实世界 100% 还原到图集之上,从而清晰方便地管理图数据。在 Ultipa 图系统中,一个 schema 代表着真实世界中的一类实体(点),如:自然人、银行卡、账户等;或者一类行为关系(边),如:关注、转账、持有等。
每个图集在创建后会自带一个名为 default 的 点schema 和一个名为 default 的 边schema(均不可删除);每个图集中可以创建多个 点schema 和 边schema。
UQL 中 schema 的标志是 @
:
- 写为
@<value>
时是过滤条件,例如 @account,表示过滤出 schema 为 'account' 的点或边 - 单独写
@
时是调用,例如 @ 或 <alias>.@,表示调用元数据的 schema 值
命名规则
属性由开发者自定义名称,一个图集中的 点schema 不能互相重名,边schema 也不能互相重名,但一个 点schema 可以和一个 边schema 重名。
- 2 ~ 64 个字符
- 必须以字母开头
- 仅允许使用字母,下划线和数字(即 _ 、A-Z、a-z、0-9)
查看 Schema
返回的表名:_nodeSchema
、_edgeSchema
返回的表头:name
|description
|properties
|totalNodes
或 totalEdges
(schema 的名称、描述、属性列表、点数量 或 边数量)
语法:
// 查看当前图集中所有 schema 信息(分为点、边两个表)
show().schema()
// 查看当前图集中所有 点schema 信息
show().node_schema()
// 查看当前图集中所有 边schema 信息
show().edge_schema()
// 查看当前图集中某个 点schema 信息
show().node_schema(@<schema>)
// 查看当前图集中某个 边schema 信息
show().edge_schema(@<schema>)
创建 Schema
语法:
// 在当前图集中创建一个 点schema
create().node_schema("<name>", "<desc?>")
// 在当前图集中创建一个 边schema
create().edge_schema("<name>", "<desc?>")
// 混合以上两种方法同时创建多个 点/边schema
create()
.node_schema("<name>", "<desc?>")
.edge_schema("<name>", "<desc?>")
...
示例:用一条 UQL 创建 点schema “银行卡”和“账户”
create().node_schema("card", "Bank_Card").node_schema("account", "Bank_Account")
示例:用一条 UQL 创建 边schema “持有”和“转账”
create().edge_schema("own").edge_schema("transaction")
示例:用一条 UQL 创建 点schema “银行卡”及 边schema “持有”
create().node_schema("card", "Bank_Card").edge_schema("own")
修改 Schema(名称、描述)
语法:
// 修改当前图集中的某个 点schema 的名称、描述
alter().node_schema(@<schema>)
.set({name: "<new_name?>", description: "<new_desc?>"})
// 修改当前图集中的某个 边schema 的名称、描述
alter().edge_schema(@<schema>)
.set({name: "<new_name?>", description: "<new_desc?>"})
删除 Schema
除默认 点schema 和 边schema(@default)不允许删除之外,当前图集中的其它 schema 均可以删除。
语法:
// 从当前图集中删除某个 点schema
drop().node_schema(@<schema>)
// 从当前图集中删除某个 边schema
drop().edge_schema(@<schema>)
// 混合以上两种方法同时删除多个 点/边schema
drop()
.node_schema(@<schema>)
.edge_schema(@<schema>)
...