数据管理

创建数据表、存储和管理数据。

创建数据表

  • 创建表

此过程要求开发者具备基本的数据库知识。

创建数据表过程一般需要经历如下阶段:

  • 分析业务需求,抽象数据模型
  • 将数据模型映射为数据表
  • 检查所创建的数据表是否能满足整个业务需求
  • 完善数据表和权限
  • 通过 JSON 创建数据表

提交参数见下表

名称类型是否必填描述
nameString数据表名称。
descriptionString否 数据表注释。
row_write_permArray行的默认写权限。[ "user:anonymous" ] 所有人可写(包含匿名用户和登录用户)。[ "user:" ] 登录用户可写(不包含匿名用户)。[ "gid:561" ] 在分组 561 的用户可写。561 为用户组 ID,可根据实际需要进行更改。[ "user:{created_by}" ] 创建者可写。
row_read_permArray行的默认读权限。[ "user:anonymous" ] 所有人可读(包含匿名用户和登录用户)。[ "user:" ] 登录用户可读(不包含匿名用户)。 [ "gid:561" ] 在分组 561 的用户可读。561 为用户组 ID,可根据实际需要进行更改。[ "user:{created_by}" ] 创建者可读。
write_permArray数据表录入权限。[ "user:*" ] 登录用户(不包含匿名用户)可以进行数据录入。[] 不开放。[ "user:anonymous" ] 所有人(包含匿名用户和登录用户)都可以进行数据录入。[ "gid:561" ] 在分组 561 的用户可以进行数据录入。561 为用户组 ID,可根据实际需要进行更改。
schemaObject数据表表结构信息。{ "fields": [ {…}, {…}, … ] } 目前仅包含一个值为数组的键:fieldsfields 详细参数见下表

fields 详细参数

名称类型是否必填描述
nameString列名称
typeString是 列类型Array 数组类型String 字符串类型integer 整数类型number 数字类型file 文件类型Object 对象类型date 日期类型boolean 布尔值类型geojson geojson 类型reference pointer 类型
descriptionString列注释
default值类型取决于列的 type默认值
constraintsObject列限制required: 是否为必填,类型:boolean,必填。
aclObject列权限creatorVisible: 是否仅创建者可见,类型:Boolean,必填。clientReadOnly: 是否只读,类型:Boolean,必填。clientVisible: 客户端是否可见,类型:Boolean,必填。
schema_nameString仅当 type 为 reference 时使用,列所指向的数据表表名。
itemsObject仅当 type 为 Array 时使用,定义数据类的数据类型。数组中存放 String 时值为: { "type": "String" }。数组中存放 integer 时值为: { "type": "integer" }。数组中存放 number 时值为: { "type": "number" }。数组中存放 file 时值为:{ "type": "file" }。数组中存放 Object 时值为:{ "type": "object" }。数组中存放 date 时值为:{ "type": "date" }。数组中存放 boolean 时值为:{ "type": "boolean" }。数组中存放 geojson 时值为:{ "type": "geojson", "coordinate_type": "gcj02", "format": "default" }。coordinate_type 可根据需求改变。
formatString仅当 type 为 geojson 时使用。值只能是 default。
coordinate_typeString仅当 type 为 geojson 时使用。有两个值可选:wgs84: 地球坐标gcj02: 火星坐标
  • 查看表

默认会为每一个知晓云应用(每个知晓云应用均会对应一个小程序)生成 2 个默认数据表

  • _userprofile 存储用户信息
  • _richtextcontent 存储富文本数据

系统默认创建的数据表以 _ 开头

以默认数据表为例,查看数据表时,可看到以下基本信息:

  • tableID 数据表 ID,配合 Hydrogen SDK 使用
  • 操作栏 数据表操作栏由一组按钮组合构成,提供常见的数据表操作
  • 表头 表头结构展示列名、列类型以及位于表头的查询排序操作
  • 表记录 表记录为当前数据表存储的数据
  • 翻页组件 当数据表存储的数据超过数据表每页默认展示的记录条数时,开发者可以使用翻页功能查看更多表记录。也可自行设置每页展示的数据记录和跳转到特定页码位置

管理数据表

  • 添加列

开发者可以通过添加列操作来扩展已经存在的数据表。添加列界面如下图所示,各字段说明如下:

  • 列名称 列名称不允许以下划线开头。新增数据字段名称。每张数据表均会存在系统内建字段,虽然这些内建字段对开发者不可见,但系统依然会将以下划线开头的列名作为数据表的内建列
  • 列类型
  • 列注释 描述当前列的行为
  • 默认值 为该列设定默认值
  • 权限

自定义字段设置为创建者可见时,接口不会返回自定义字段

  • 控制列展示

允许开发者控制数据表字段的展示和隐藏,在数据表字段较多时十分有用。

  • 导入 / 导出

开发者可导入 CSVJSON 格式的数据,可导出 JSON 格式数据。导入或导出操作并非实时,会先在知晓云服务端创建定时任务,该任务被执行后才会真正执行导入或导出任务。任务执行完成后用户将会在通知中心和邮件收到相应的提醒和数据。

  • 唯一索引设置

普通索引(由关键字 KEY 或者 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。

普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它定义为一个唯一索引。

知晓云会实时分析数据量级和查询效率,自动为数据表字段增加索引以优化查询效率。因此,开发者不需关心普通索引的创建。在实际业务中,有时需要单个字段的唯一性,甚至多个字段的联合唯一性,此时,就需要对该字段或字段们创建唯一索引。如,报名表,只允许每个用户报名一次,则需要为 created_by 字段创建唯一索引。

也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

  • 查询

数据表会根据字段类型、字段含义,为该字段提供可用的查询操作符。一般情况下,不同类型对应的可用查询操作符如下表所示

字段类型支持的查询操
id=, in, range, !=, not in
string=, in, contains, !=, isnull, not in, regex
integer=, >, >=, <, <=, in, range, !=, not in, isnull
number=, >, >=, <, <=, in, range, !=, not in, isnull
boolean=, exists
array=, in, not in, is null, all
geojsoncenter, intersects, nearsphere
date=, >, >=, <, <=, range
fileisnull
object=, hasKey, isnull
pointer=, in, range, !=, not in

操作符介绍及使用规则

操作符描述
=相等
<小于
<=小于等于
>大于
>=大于等于
!=不等于
in存在于在数组中
all数组包含给出的所有元素
contains字符串包含
range范围查询
regex正则表达式
not in不存在于在数组中
is null是否为空
hasKey是否存在属性(仅限 Object 类型)
center请参考withincircle
intersects请参考include
nearsphere请参考withinRegion
  • 编辑表

可对已创建的数据表进行重命名重置数据表录入权限更新数据行的读写权限

  • 删除表

键入数据表名称来删除不再需要的数据表,删除表操作不可恢复。

访问数据表

  • 使用表

已创建的数据表需要配合 Hydrogen SDK 来使用。对开发者而言,在控制台读取到 tableID,即可以配合 SDK 来对该数据表进行符合权限的操作。