此文档是织信低代码平台的数据表文档。

## 概述
数据表模块用来存储和显示数据，创建完数据表后，系统会自动的在数据库生成一张表用来存储数据，用户在前端可以使用系统生成的表格视图和表单查看和修改数据。数据表中的字段可以使用表单设计器进行配置。 数据表的可被数据表视图、仪表盘、工作流、表单设计器、问卷调查等模块作为数据源来引用

## 字段 

### UUID（UUID）
UUID 是数据表的【主键 ID】字段，用于唯一标识一条数据记录

- UUID 是 数据库层面的主键
- UUID 不是业务编号
- UUID 不可配置、不支持表达式、不应展示给业务用户
- UUID 不等同于下面的「编号（ID）」字段

### Seq（Seq）
Seq 是系统自动维护的记录创建序列号，用于辅助生成业务编号。

- Seq 只是一个 系统自增计数器
- Seq 不是主键
- Seq 本身不代表业务含义
- 每创建一条记录，Seq 自动 +1，Seq 的值在表内递增（不保证连续）

### 单行文本（SingleText）
单行文本输入框，在数据库中的存储格式 varchar(200)	可变长字符串,最多200个字符

### 多行文本（MultiText）
多行文本输入框，在数据库中的存储格式 text。

### 富文本（RichText）
富文本是高级版的文本输入框，在数据库中的存储格式 text。

### 整数（Integer）
整数数字输入框，在数据库中的存储格式 int8

### 小数（Double）
小数数字输入框，在数据库中的存储格式 float8

### 日期（Date）
时间选择组件，在数据库中的存储格式 timestamp(6)	

### 列表选择（ListSelect）

单选和多选的存储类型不同，在数据库中的存储格式

| 选择类型 | 字段类型                                                  | 说明                               |
|------------------------------|------------------------------|----------------------------------|
|  单选     |   varchar(200)                            | 可变长字符串,最多200个字符 |
|  多选     |   text[]                                  | 数组 |


### 树形选择（Tree）

在数据库中的存储格式

| 选择类型 | 字段类型                                                  | 说明                               |
|------------------------------|------------------------------|----------------------------------|
|  单选     |   varchar(200)                            | 可变长字符串,最多200个字符 |
|  多选     |   text[]                                  | 数组 |


### 级联选择（Cascader）

在数据库中的存储格式

| 选择类型 | 字段类型    | 说明      | 示例 |
|-----------------|------------|---------------|-----------------------|
|  单选     |   text[]          | 数组 | `{广东省,深圳市,南山区}` |
|  多选     |   jsonb           | 存储json数据结构 | `[["上海市", "市辖区", "黄浦区"], ["上海市", "市辖区", "浦东区"]]`|


### 附件（Attachment）


在数据库中的存储格式

| 字段类型  | 说明                     |
|-------|------------------------|
| jsonb | 存储JSON格式数据，JSON数据结构见下方 |

在数据表中，附件字段数据会存储为json格式,如果是多选，会存储为json数组。json结构如下：

```ts
interface TableAttachment {
    name: string;//名称
    size: number;//大小
    id: string;//ID
    thumbnail: string;//略缩图
    path: string;//路径
    md5: string;//MD5值
}
```

**示例1 不允许上传多个文件（单选）存储的数据**

```json
{
  "id": "20ff3866fcdd4c94822301eb76a04657.jpg",
  "md5": "b394f37c3180e68090e2a0f1370f2aa9",
  "name": "test.jpg",
  "path": "uilssesqv5y7o/l6h7derr6fc6v/20ff3866fcdd4c94822301eb76a04657.jpg",
  "size": 7757,
  "thumbnail": "4923f93852594511b7c507465304cdc6.jpg"
}
```

**示例2 允许上传多个文件（多选）存储的数据**

```json
[
  {
    "id": "k06s3kc79i2rtb4r225d2.docx",
    "md5": "16e5ad6839a13c51066e95b00fdd4a41",
    "name": "二开平台功能点.docx",
    "path": "uilssesqv5y7o/p3klf0kagl0yg/k06s3kc79i2rtb4r225d2.docx",
    "size": 735916
  },
  {
    "id": "wdn8dqk58z59jox7ywpmk.jpeg",
    "md5": "db2ce954f12e2f5b3914170a1205a912",
    "name": "简历.jpeg",
    "path": "uilssesqv5y7o/p3klf0kagl0yg/wdn8dqk58z59jox7ywpmk.jpeg",
    "size": 537100,
    "thumbnail": "cbrf1bhgfei0pbocdhg79.jpeg"
  }
]
```

### 复选或开关（Checkbox）

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| bool                                           | 存储Boolean型数据 |

### 用户选择（User）

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| jsonb                                           | 存储JSON格式数据，JSON数据结构见下方 |

在数据表中，用户选择字段数据会存储为json格式,如果是多选，会存储为json数组。json结构如下：

```ts
interface TableAccountSimple {
	id:string;//ID
	name:string;//名称
	avatar:string;//头像
}
```

### 部门选择（Department）

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| jsonb                                           | 存储JSON格式数据，JSON数据结构见下方 |

在数据表中，部门选择字段数据会存储为json格式,如果是多选，会存储为json数组。json结构如下：

```ts
interface TableDepartmentSimple {
	id:string;//ID
	name:string;//名称
	shortName:string;//简称
	path:string;//路径
}
```

### 手写签名（Signature）

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| jsonb                                           | 存储JSON格式数据，JSON数据结构见下方 |

在数据表中，手写签名字段数据会存储为json格式,如果是多选，会存储为json数组。json结构如下：

```ts
interface TableSignature {
	id:string;//ID
	accountId:string;//账户ID
	accountName:string;//账户名称
	uploadTime:Date;//上传时间
	path:string;//路径
}
```

**示例1 不允许多次签名（单选）存储的数据**
```json
{
	"accountId":"skydu2",
	"accountName":"skydu2",
	"id":"vyu0art5s0reflpad09v7.jpg",
	"path":"otxlyqyjacgnx/sr7gnmk90asb2/vyu0art5s0reflpad09v7.jpg",
	"uploadTime":1721359223688
}
```

**示例2 允许多次签名（多选）存储的数据**
```json
[{
	"accountId":"skydu2",
	"accountName":"skydu2",
	"id":"or3yjjhn0bf98f5uy6j6n.jpg",
	"path":"otxlyqyjacgnx/ffr7s7spbxb76/or3yjjhn0bf98f5uy6j6n.jpg",
	"uploadTime":1721295355794
},
{
	"accountId":"skydu2",
	"accountName":"skydu2",
	"id":"ng326htx6ob2ci2c8e7zv.jpg",
	"path":"otxlyqyjacgnx/ffr7s7spbxb76/ng326htx6ob2ci2c8e7zv.jpg",
	"uploadTime":1721295370334
}]
```

### 地理位置坐标（Coordinate）

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| jsonb                                           | 存储JSON格式数据，JSON数据结构见下方 |

在数据表中，地理位置字段数据会存储为json格式。json结构如下：
```ts
interface TableCoordinate {
	lng:Number;//经度
	lat:Number;//维度
    address:string;//地址
}
```

### 函数（Formula）

可以通过postgresql函数，把其它字段组合计算出来一个结果。函数字段不会实际存储，结果会在运行时动态计

在数据库中的存储格式:不存储数据库

### 关联列表（Relation）

用于表达弱关联或多对多关系

### 关联记录（RelationRecord）

外键字段，用于在当前表中引用另一张表的一条记录（存储目标记录ID）

在数据库中的存储格式

会跟随关联表的主键ID的存储类型（可能是整数或者字符串)

| 存储字段类型 | 字段类型                                                  | 说明                               |
|------------------------------|------------------------------|----------------------------------|
|  字符串     |   varchar(64)                            | 可变长字符串,最多64个字符 |
|  整数    |   int8                                 | 整数 |

### 关联记录字段（RelationRecordField）

外键字段映射，通过 RelationRecord 外键字段，读取并展示目标表中的某个字段值（不存储数据）。
使用规则：必须先定义 RelationRecord，才能定义依赖它的 RelationRecordField

### 查找列表（LookupList）

查找列表，用于建模一对多（1:N）关系中的子表记录集合，必须通过 filter 显式指定关联条件。

### 子对象（Children）

子对象是由标签和分隔符组成的字符串，比如：recordId1.recordId2.recordId3

- 标签：是父级的记录ID
- 路径：标签本身也是路径

例如数据表 department 的结构如下

| 字段     | 类型     | 说明        |
|--------|--------|-----------|
| id     | String | 记录ID      |
| name   | 单行文本   | 名称        |
| parent | 子对象    | 部门之间的父子关系 |

表中的数据如下

| id   | name | parent    |
|------|------|-----------|
| 0000 | 总公司  |           |
| 0001 | 技术部  | 0000      |
| 0002 | 产品部  | 0000      |
| 0003 | 运营部  | 0000      |
| 0004 | 技术一组 | 0000.0001 |

【结构型字段】仅用于在【同一张表内】构建树形/层级结构（Parent → Children）。
典型场景：组织架构、部门树、分类树、行政区划。
⚠️ Children 不表示业务关系，不等同于主子表，不可跨表，不存储业务数据

### 关联列表汇总（RelationRollup）

基于本表 Relation（关联列表）字段，对关联记录进行聚合统计，仅适用于方向明确的一对多 Relation。

### 查找汇总（LookupRollup）

基于子表 RelationRecord 外键字段，对子表记录进行聚合统计，并将结果展示在主表中（标准 1:N 汇总方式）

### 编号（ID）

编号（ID）是面向业务使用的【可读业务标识】，不是数据库主键。

⚠️ 必须牢记
- 编号 ≠ UUID
- 编号是「业务字段」，UUID 是「系统主键」
- 每一个「编号（ID）」字段，系统都会单独维护一个自增序列 seq

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| varchar(128)                                           | 可变长字符串,最多128个字符 |

编号的生成规则

每一个编号系统都会自动生成一个自增序列`seq`，每创建一条记录`seq`的值都会增加1。编号由表达式计算得出，表达式的返回值是一个字符串。
在表达式中可以使用当前记录`record`和`seq`组合的方式生成。在不设置表达式的情况下，编号就是seq。

**示例1**
编号是递增的6位数字，例如T000001
T${String.lpad(seq,6,'0')}

**示例2**
编号是带日期的递增6位数字，例如2024-07-19-000001
${Misc.formatDate(Date.sysdate(),'yyyy-MM-dd')}-${String.lpad(seq,6,'0')}


### 创建时间（CreateTime）

 在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| timestamp(6)                                           | 存储日期时间 |


### 最后修改时间（LastModifyTime）

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| timestamp(6)                                           | 存储日期时间 |


### 创建人（CreateUser）

创建人字段会保存创建记录的用户ID

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| varchar(128)                                           | 可变长字符串,最多128个字符 |

### 最后更新人（LastModifyUser）

最后更新人字段会保存最后修改记录的用户ID

在数据库中的存储格式

| 字段类型                                                  | 说明                               |
|--------------------------------------------------------|----------------------------------|
| varchar(128)                                           | 可变长字符串,最多128个字符 |

