数据模型
⭐ 阅读本篇前,建议先熟悉《数据模型概念》、《数据模型设计》,软件开发时,如何提前设计好合理的数据模型,让软件开发事半功倍! 在 Zion 中,创建/更新了数据模型之后,需要更新后端或者重新预发布小程序之后才会生效。
数据模型入口
点击编辑器左上角的【数据模型】按钮,进入到设计数据模型界面 在该界面可以添加/删除/修改数据表、选择了某个数据表之后可以添加/删除/修改数据字段,也可以添加数据表之间的关系,编辑数据约束等
添加数据表
在数据模型界面点击了【添加数据表】之后会出现如下所示的表信息设置窗口
数据表名称
设置数据表的名称,在读取、更新数据表数据的时候,能够指定是哪一个表,Zion 的数据表支持中文命名,当使用英文命名时,建议满足如下规则:
- 必须以小写字母开头
- 不能用大写字母、空格;以及数据库相关的关键字:“like”、“index”、“fz”开头的字母
- 可以用数字
- 单词之间用“_”隔开
- 同一个数据模型下名字唯一
- 见名知意:看到名字就能理解其含义,做到与别的数据表做区分
- 用名词单词:虽然数据表包含了多条数据时是一个集合,但是其本质是描述了数据的结构,因此我们用单数,同样的道理我们通常不会为数据表名称加“list”## 可公开访问 创建数据表时,默认打开「可公开访问」,那么数据表创建完成后,可以查询这张表的数据或者向这张表中添加、修改、删除内容。
创建数据表时,如果关闭了「可公开访问」,那么数据表创建完成后,将不能查询这张表的数据或者向这张表中添加、修改、删除内容。
添加数据字段
当选中了某张数据表之后,点击添加数据字段的按钮,会弹出如下所示的界面,可以为这张表添加数据字段,这里可以理解为在 Excel 表格中新增了一个数据列的标题。
名称
中文命名:见名知意即可,例如这一列是用来保存商品规格的,那么一般命名为“商品规格”即可。 英文命名:建议命名方式是单词之间用'_'隔开,例如保存用户的头像的数据列可以命名为“profile_image”。 一般建议用英文命名,这样报错或者在组件中选择数据字段时能够一目了然选择正确的字段,如果使用的是中文,则在一些组件中选择字段时,显示的是中文名称的汉语拼音。
字段数据类型
指在数据表中,该数据列保存的数据的类型是什么,具体的类型如下所示:
- 文本(TEXT):当保存的数据是一些文字时,例如:姓名、个人简介、手机号码等,使用该类型,无长度限制
- 图片(IMAGE):当保存的数据是一张图片时,使用该类型
- 整数(INTEGER):当保存的数据是数字时,使用该类型,其范围为:-2147483648 到 +2147483647
- 无限精度小数(Infinite precision decimal/DECIMAL):当保存的数据是金钱的数字时,使用该类型,(小数点后28个有效位)
- 日期(DATE):当保存的数据是年月日时,例如:2021-07-03,使用该类型
- 时间(TIMEZ):当保存的数据是时间时,例如:12:00:00+08,使用该类型,自带时区
- 布尔值(BOOLEAN):保存的数据只能是“true”或者“false”,“true/false”的意思可以理解为“是否”
- 经纬度(GEO_POINT):地理位置,保存的是经纬度(与地址导航相关)
- 时间戳(TIMESTAMPTZ):时间戳是从1970年1月1日开始到现在所经过的秒数,不考虑闰秒,当要进行时间的计算时,例如倒计时等,建议使用该类型。在使用时间戳时,可以转换为日期、时间来进行显示。
- 视频(VIDEO):当保存的数据是视频文件时,例如:以“.mp4”结尾的文件,使用该类型
- 文件(FILE):当保存的数据是文件时,例如:word、pdf等,使用该类型
- JSONB:用{}括起来的对象类型,如{"name":"张三","age":"16岁","sex":"男"}。jsonb类型取数据时用公式里的JSON_EXTRACT_PATH
必须
表示这个字段是必填的,如果在插入数据的时,该字段没有数据,数据会插入失败。默认未选中。
唯一
表示该字段保存的数据内容在整张数据表中只能存在一个,如果在插入数据时,该字段的数据跟表中的数据相同,数据会插入失败。默认未选中。
可公开访问
设置这个数据列的访问权限,默认打开,打开后用户可以查询、添加、修改这个字段的数据,反之则不能够查询、添加以及修改这个字段的内容。
向量存储
再添加数据字段时,如果该字段的类型为文本类型,那么可以打开【向量存储】功能,将该字段下的数据保存为「向量数据」,保存为「向量数据」的内容将可以使用【AI 语义排序】功能。 打开【向量存储】会消耗较多的数据库存储资源以及消耗 AI Token。
添加数据关系
将A、B两张表建立一层特殊关系,实现两张表的数据互通。
目标表
需要建立关系的数据表,可以是自身也可以是其他表。
关系类型
一对一关系
假如表A为当前表,表B为目标表,添加了一对一关系后,在目标表中会增加一个特殊的数据字段(整数类型)用来保存当前表某行数据的ID, 在读取表B的某条数据时,能够通过该关系字段直接引用表A的数据,同理在读取表A的某条数据时,能够通过该关系字段直接引用表B的数据 例如:默认的账户表与个人信息表建立了一对一的关系,当读取【当前用户数据】时,可以看到在选项中有【个人信息】的选项,点开该选项则能选择个人信息表中的数据进行数据绑定。
一对多关系
从「多」的一方引用「一」的一方的数据: 假如表A为当前表,表B为目标表,添加了一对多关系后,在目标表中会增加一个特殊的数据字段用来保存当前表某行数据的ID, 在读取表B的某条数据时,能够通过该关系字段直接引用表A的数据。
从「一」的一方引用「多」的一方的数据: 但由于是一对多的关系,对于表A来说,在表B中有多条跟表A有关系的数据,所以在读取表A的某条数据时,只能够通过该关系获取到在表B中多条数据的count(数量),或者是获取表B中某个整数类型字段的聚合数据(sum「求和」、avg「平均值」、min「最小值」、max「最大值」)
img | img |
---|---|
关系名称(目标表中)
正确根据业务逻辑来对两张表的关系进行命名,能够在引用时更清晰的知道对应的数据含义是什么。 关系名称(目标表中),指的就是建立关系后,在目标表中生成的新的字段的名称是什么。 例如:
- 当前表是活动表,目标表是活动报名表,活动表与活动报名表建立了一对多的关系,由一对多关系的含义可知,在目标表中会多一个字段来保存当前表中某条数据的ID,所以一般我们将「关系名称(目标表中)」命名为【当前表名+ID】。
- 但最终在目标表中生成的关系字段名称会是【当前表名+ ID + _当前表名】,原因是字段名称中下划线之前的是我们定义的名称,下划线之后的是告诉你所关联的表格是哪一个。
img | img |
---|---|
关系名称(当前表中)
关系名称(当前表中),指的就是建立关系后,在当前表的关系视图中的关系名称是什么。 例如:
- 当前表是活动表,目标表是活动报名表,活动表与活动报名表建立了一对多的关系,由一对多关系的含义可知,在当前表的关系视图中会多出一个关系名称,这就是「关系名称(当前表中)」
- 就活动与活动报名的场景来说,一个活动在活动报名表中有多条报名记录,而「关系名称(当前表中)」引用到的就是这个活动在活动报名表中的多条数据,所以我们一般将「关系名称(当前表中)」命名为【该活动的报名记录】
数据约束
约束一旦创建,则不能被删除,除非将整张数据表删除!!! 数据约束的定义: 在一张数据表中,某个字段或者某几个字段的集合的数据只能够出现一条,不能重复。
- 在 Zion 中,默认的账户表以及未来创建的每一张新的数据表的 ID 字段自动添加了唯一约束,也就是说任何一张数据表的ID是唯一的,不能重复
- 两张数据表建立了1:1关系后,会自动创建数据约束,例如,账户表表跟个人信息表建立1:1关系,个人信息表表中会自动新增一个约束,约束作用就是在个人信息表中的账户表的 ID 唯一存在。> ⚠️⚠️⚠️ 注意:若数据表中已存在重复数据,再给该数据表添加相关约束时,无法添加 举个例子:报名表中,账户ID为1的人报名了两次活动ID为2的活动,在没有约束的情况下,报名表中会出现两条账户ID为1,活动ID为2的报名数据;此时若给报名表添加账户ID、活动ID的唯一约束时,会添加失败
如何添加数据约束
在数据模型中选择某张数据表,点击数据表右侧的设置按钮,点击「编辑约束」,点击「添加」按钮添加约束,输入约束名称以及在「唯一约束列集合」中选择要设置约束的字段名称,可以是单个也可以是多个。
约束名称
对约束的命名,必须小写字母开头,单词之间用'_'隔开,如:profile_image,不允许中文和大写字母。
唯一约束列集合
选取数据表中的字段添加到集合中,模型将不再允许出现集合字段完全相同的两条数据。可以是一个字段也可以是多个。 例如:在班级信息表中,有「班级名称」跟「班主任」两个字段,一般来说一个班级只有一个班主任,比如“三年二班的班主任是刘老师”,为了保证班级信息表中只能存在一条「班级名称」为“三年二班”,「班主任」为「刘老师」的数据,所以可以为班级信息表添加「班级名称」与「班主任」字段的唯一约束。
实际使用
在修改表数据的「添加」或者「更新」行为中,在“冲突时”下拉框中可以选择已经添加过的约束条件,这样当数据因为约束无法插入/修改时,可以选择将要执行的「行为类型」。「行为类型」有【无】跟【更新】两种,【无】表示如果插入/修改数据冲突时,就什么也不做;【更新】表示如果插入/修改数据冲突时,则更新这条数据。