嬴图数据库的一个实例包含一个或多个图(也称图集),每个图代表一个由相互连接的点、边组成的数据集或域。
图中的数据需满足其图类型,一个图类型规定图的结构和约束,包括允许的点Schema、边Schema、每个Schema关联的属性以及约束。
GQL一致性声明
点Schema和边Schema分别对应于ISO GQL标准中定义的点类型和边类型。
点Schema
点Schema定义一个点类型,由点Schema名称和一组属性类型组成。
例如,名为User
的点Schema拥有属性name
(值类型为string
)和属性age
(数据类型为int32
):
NODE User ({name string, age int32})
点Schema名称User
也作为其标签使用。通过标签表达式:User
可引用该Schema。
每个图都有一个内置的点Schema,名为
default
。用户可自由使用该Schema,但无法重命名或删除它。
边Schema
边Schema定义一个点之间的有向边类型,由边Schema名称和一组属性类型组成。
例如,名为Links
的边Schema连接任意两点,拥有属性description
(值类型为string
):
EDGE Links ()-[{description string}]->()
边Schema的名称Links
也作为其标签使用。通过标签表达式:Links
可引用该Schema。
每个图都有一个内置的边Schema,名为
default
。用户可自由使用该Schema,但无法重命名或删除它。
属性
属性与点或边Schema关联,用来描述点或边的特征。每个属性由属性名称和值类型定义。例如,名为name
的属性,其值类型为string
。查看所有属性值类型。
另外,一个属性还可能:
- 被加密。
- 受约束限制。
- 包括描述。
以下是一个例子:
NODE User ({key string NOT NULL encrypt("AES128") COMMENT "The key used for authentication"})
这里定义的User
点Schema拥有一个名为key
的属性(值类型为string
),这个属性:
- 有一个
NOT NULL
约束,保证其值非null
。 - 使用
AES128
加密。 - 包括描述:The key used for authentication。
系统属性
每个点携带两个系统属性_id
和_uuid
,它们都是点的唯一标识符。点的_id
值可以自定义,但需确保该值唯一;_uuid
值由系统自动生成。
系统属性 |
值类型 | 描述 |
---|---|---|
_id |
string |
点的字符串类型唯一标识符(最大长度为128字节) |
_uuid |
uint64 |
点的数值型唯一标识符 |
每条边仅携带一个系统属性_uuid
,是边的唯一标识符,其值由系统自动生成。每条边连接一个起点和一个终点,_from
/_to
和_from_uuid
/_to_uuid
分别用来表示边的两个端点。
系统属性 |
值类型 | 描述 |
---|---|---|
_uuid |
uint64 |
边的数值型唯一标识符 |
_from |
string |
边起点的_id |
_to |
string |
边终点的_id |
_from_uuid |
uint64 |
边起点的_uuid |
_to_uuid |
uint64 |
边终点的_uuid |
约束
约束对进入图中的数据施加其他限制规则,以确保其准确性、一致性和完整性。任何违反约束的数据修改都将触发错误并被拒绝。
命名规范
图
数据库中所有图名称必须唯一。图名称需满足:
- 包含2~127个字符
- 以字母开头
- 允许的字符:字母(A-Z,a-z),字母(0-9),下划线(
_
)
图类型
数据库中所有图类型名称必须唯一。图类型名称需满足:
- 包含2~64个字符
- 以字母开头
- 允许的字符:字母(A-Z,a-z),字母(0-9),下划线(
_
)
点/边Schema
每个点/边Schema的名称需满足:
- 包含2~127个字符
- 不能以波浪号
~
开头 - 不能包含反引号
`
- 不能使用系统属性名或保留关键字
图中点Schema不能重名,边Schema不能重名,但点Schema可以和边Schema重名。
属性
每个属性名需满足:
- 包含2~127个字符
- 不能以波浪号
~
开头 - 不能包含反引号
`
- 不能使用系统属性名或保留关键字
同一个点/边Schema下,属性名需唯一。
约束
每个约束的名称需满足:
- 包含2~64个字符
- 以字母开头
- 允许的字符:字母(A-Z,a-z),字母(0-9),下划线(
_
)
图中约束不能重名。