Skip to Content
帮助文档数据处理参考手册数据类型

数据类型

在配置数据模型和声明运行期变量(如客户端变量、页面变量、行为参数)时,必须选择正确的数据类型。

Zion 的底层基于企业级关系型数据库 PostgreSQL 构建。为了让你的系统具有高运行性能、强数据完整性和精确的科学计算,本手册列出平台支持的全部数据类型及其取值约束;数据库层面的对应关系集中在文末的数据库对照

基础类型

基础类型共 12 种,是类型系统中最小的可用单位:

类型格式与限制
文本最大 1 GB
长整数8 字节整数,-9,223,372,036,854,775,808+9,223,372,036,854,775,807
无限精度小数可变长度,最大 131072 位;十进制精确运算,无浮点舍入误差
布尔值true / false
日期时间(带时区)YYYY-MM-DDTHH:mm:ss.sssZ;绝对时间戳,按客户端本地时区显示
日期YYYY-MM-DD;不含时分秒,不受时区影响
时间(带时区)HH:mm:ss.sssZ;仅表示一天中的某个时刻
图片文件上传到对象存储,字段保存的是媒体记录的引用;支持 .jpg.jpeg.png.gif.webp.svg.ico
视频文件上传到对象存储,字段保存的是媒体记录的引用;支持 .mp4.mov.webm
文件文件上传到对象存储,字段保存的是媒体记录的引用;不限文件类型
经纬度[经度, 纬度];支持距离计算与按距离排序
JSON任意类型的数据,既可以是基础类型,也可以是对象或数组,结构可以不固定
⚠️

为什么有了小数,还必须强调“无限精度”?
在一般的 JavaScript 或大部分高级语言中,小数默认以双精度浮点数(Float)在内存中表示。计算 0.1 + 0.2 时,因为二进制转换问题会产生微小误差,输出 0.30000000000000004
在 Zion 中,数据库层采用标准的 Postgres numeric (无限精度小数) 类型,它会在数据库中强制执行完全精确的十进制数字计算,绝不损失任何精度,完美契合商业、电商及银行级财务账单审计要求。

数组

数组表示一组同类型的值,显示为 [元素类型],例如 [文本][对象][订单]。元素类型可以是任意类型。

自定义对象

自定义对象是由若干属性构成的结构化类型。

  • 属性:每个属性有自己的名称、类型和可空性。属性的类型可以是基础类型、数组、枚举、数据表类型,或另一个自定义对象,因此对象可以逐层嵌套。
  • 与 JSON 的区别:JSON 的内容对类型系统不透明,只能在运行时按路径取值;自定义对象的每个属性都是类型系统中的一等成员,可被数据绑定直接引用,并参与类型校验。结构已经确定的数据应当用自定义对象表达,JSON 只承担结构确实不固定的部分。
  • 具名对象:项目级定义,有名称,可被项目内任何位置引用。所有具名对象可以在数据页下的对象中查看和编辑。
  • 私有对象:由 API 请求体、响应体等配置就地产生,没有名称,类型统一显示为「对象」,只属于产生它的那个位置,无法被别处引用。需要在多处共用同一结构时只能使用具名对象。

枚举

枚举是取值被限定在一组预定义枚举值内的类型,用于表达状态、分类这类有限取值域,例如订单状态、审核结果、会员等级。

  • 枚举值名称:标识符,只能由字母、数字、下划线组成,不能以数字开头,且在同一枚举内唯一。
  • 顺序:枚举值在类型中是有序的,这个顺序会带到所有引用该枚举的位置。
  • 存储:枚举字段在数据库中存储的是枚举值名称,因此这些名称属于项目对外契约的一部分。
⚠️

正因为线上数据存的是枚举值名称,改动一个已被使用的枚举值会改写既有数据:

  • 删除枚举值:部署后,持有该值的行会被置为空;若该字段为必填,部署会直接失败。
  • 重命名枚举值:部署会同步迁移既有数据,但依赖该字符串的外部消费方(自定义代码、对外接口的调用方)不会被一并迁移。

数据库对照

以下是各类型作为数据表字段时,在 PostgreSQL 中实际建出来的列。

类型数据库中的类型
文本TEXT
长整数BIGINT(主键 idBIGSERIAL
无限精度小数DECIMAL(即 numeric
布尔值BOOLEAN
日期时间(带时区)TIMESTAMPTZ
日期DATE
时间(带时区)TIMETZ
图片bigint,列名为 字段名_id,外键指向 fz_stored_image
视频bigint,列名为 字段名_id,外键指向 fz_stored_video
文件bigint,列名为 字段名_id,外键指向 fz_stored_file
经纬度geography(Point, 4326)
JSONJSONB
枚举TEXT,存的是枚举值名称
自定义对象无对应列
数组无单独列;一对多、多对多关联由关联表实现

几点由此而来的行为:

  • 媒体字段存的是媒体记录 id,文件与访问 URL 保存在 fz_stored_image 等表中(不对外暴露),因此媒体记录被引用时无法在数据库层面直接删除,需要前往资源管理器删除。
  • 枚举字段存的是枚举值名称,所以重命名或删除枚举值会改写既有数据。
Last updated on