数据模型 ★
一句话:低代码建表——在页面上定义表名、字段、索引,系统真实执行 CREATE TABLE / ALTER TABLE;已有物理表也能用「导入已有表」登记进来复用。每一次 DDL 都记在「DDL日志」里,DDL 无法回滚,日志就是排查表结构异常的第一手依据。
功能在哪
- 菜单路径:基础设施 → 数据管理 → 数据模型(菜单原名「数据建模」)
- 地址栏路由:
/infra/data-manage/data-model - 主要权限:
infra:data-model:create/update/delete/query(「数据查看」按钮另需infra:data-model-data:query)

界面认识
| 区域 | 作用 | 常用操作 |
|---|---|---|
| 查询区 | 表名 / 模型名称(模糊) | 「搜索」「重置」 |
| 工具条 | 整页级动作 | 「新建」「导入已有表」 |
| 列表 | 序号 / 模型名称 / 表名 / 表描述 / 备注 / 创建时间 / 操作 | 行内「设计」「数据查看」「DDL日志」「删除」 |
| 删除按钮 | 系统内置表(system_ / infra_ / bpm_ / act_ 等前缀)置灰 | 名单由后端统一下发,前后端双保险 |
列表不显示自增编号:模型是拿表名认的,序号列已足够定位行。
常用操作
新建模型(真实建表)
- 点「新建」,进入页内设计页(不是弹窗);
- 填「表名」——新建时必须以
biz_开头,小写字母/数字/下划线(如biz_order);「表描述」(如「订单表」,至少 2 个字符);「模型名称」(给人看的名字);备注选填; - 选「系统列策略」:
- 多租户表(推荐):注入
tenant_id,与框架表一致,业务表一律用这个; - 全局表:不含
tenant_id,数据对所有租户可见,仅用于全租户共享的字典型数据(选它会看到加粗警告); - 兼容存量样板表:含
version、不含tenant_id,对齐test_demo_*结构,新表不要用;
- 多租户表(推荐):注入
- 维护「字段列表」:灰色行是系统内置字段(主键
id、审计字段、租户与逻辑删除),建表时自动补齐、只能看不能改;你只需维护中间的业务字段;- 「快速添加」可一键补流程字段(
process_instance_id+process_status)或常用字段(名称/编码/状态/类型/排序/备注);🔴 流程字段只补不存在的列:列已在而类型不合格时那次点击会跳过(它按列名判存在),页面顶部随即出现一条常驻红色提示,说明差在哪一列、要求什么类型、以及改完保存会执行ALTER TABLE; - 主键默认是内置
id,也可在「主键」列改选某个业务字段(此时id自动降级为普通字段);
- 「快速添加」可一键补流程字段(
- 按需「添加索引」:普通索引 / 唯一索引,索引列按顺序多选,索引名按所选列自动生成、可改;
- 点「预览 DDL」核对将要执行的语句,确认无误后「保 存」。
结果:数据库里真实多出这张表,列表多一行模型登记。

改表是「全量同步」,删列不可回滚
设计页提交的字段列表就是表结构的全部:列表里没有的列,保存时会被 ALTER TABLE … DROP COLUMN 删掉,数据随之永久丢失且无法回滚(MySQL 的 DDL 没有事务)。因此:
- 删除一个已存在的字段时会弹「删除字段确认」,明确告知会执行 DROP COLUMN;
- 确认后页面顶部常驻红色标签「将删除字段:xxx」——保存可能发生在十分钟之后,这个状态不该是一次性的;
- 有损操作还需勾选「我已知晓风险(删除字段等有损操作需勾选)」,否则后端拒绝执行;
- 表里有数据时后端会再拦一次:「表(xxx)存在 N 行数据,删除表会丢失全部数据;确认请勾选『我已知晓风险』」。

别人绕过页面改了库,保存会被中止
每次打开设计页会记下结构基线(版本 + 结构指纹)。若保存时发现实测结构与基线不一致(有人手工执行了 SQL、跑了迁移脚本),后端报「表的结构与你手里那份不一致,本次改表已中止、未执行任何 DDL」,页面弹不会自动消失的告警,提示点「返回」重新进入取回最新结构再改——按过期结构生成 DDL,改出来的表和你以为的不是同一张。
导入已有表(只登记,不动结构)
- 点「导入已有表」,弹窗里按表名 / 表描述模糊搜索;
- 勾选一张或多张表,点「确 定」,提示「成功导入 N 张表」。
导入只登记模型,不会执行任何 DDL、不改动表结构;系统内置表导入后也不允许改结构(设计页会拒绝保存)。表名已存在于库但没登记时,新建同名表会被拦:「请用『导入已有表』把它登记进来直接复用,不要改名新建」。

数据查看 / DDL日志
- 行内「数据查看」:跳到数据查看页并自动定位到该模型(地址栏带
modelId),免再选一次; - 行内「DDL日志」:弹窗按表名看每一次实际执行的 DDL(含失败的)——列有 编号 / 表名 / 类型(建表绿 / 改表橙 / 删表红)/ 结果(成功 / 失败)/ 耗时 / 操作人 / 执行时间;展开行看「执行的 SQL」与红色「失败原因」。

删除模型:两步确认,默认不丢数据
- 第一步「删除确认」:「确认删除模型「X」吗?点击『确定』仅删除模型登记,保留数据库中的表 Y。」
- 第二步「高危操作」:问是否同时删除数据库中的真实表——确定 = 连表带数据一起删(无法回滚);取消 = 仅删登记。
仅删登记后会提示:「模型登记已删除。数据库中的表 Y 仍然保留 —— 需要再次使用时,用『导入已有表』把它登记回来即可,不要新建同名表」。拿不准就选仅删登记。
字段说明
设计页字段列表的列:
| 列 | 说明 |
|---|---|
| 字段名 | 小写字母/数字/下划线,以字母或下划线开头;改表时直接改名即视为重命名(保留数据) |
| 描述 | 必填,至少 2 个字符、不能与字段名相同;它就是数据查看展示模式里的列名 |
| 类型 | 受控类型集:STRING / INT / LONG / DECIMAL / BOOLEAN / DATE / DATETIME / TEXT / LONG_TEXT / JSON |
| 长度 / 精度 | 按类型适用性显示;DECIMAL 默认长度 10 精度 2 |
| 可空 / 默认值 | 主键强制 NOT NULL、不给默认值 |
| 主键 | 新建时可改选;改表时不可变,仅展示 |
| 自增 | 仅「主键且整数类型(INT/LONG)」可勾 |
| 字典/关联 | 业务语义:配字典类型或关联表/列,不改表结构、不建物理外键,表单设计等场景可直接读取 |
索引列表的列:索引名(唯一索引须 uk_ 开头、普通索引须 idx_ 开头)/ 类型 / 索引列(按顺序)。
视角对照
| 视角 | 看到什么 |
|---|---|
超管 admin / 租户管理员 docadmin | 全部模型,可建表、改表、导入、删除 |
| 套餐未含此菜单的租户 | 侧边栏「数据管理」下没有本页 |
| 普通员工 | 无此菜单;建好的表通过业务表单/接口间接使用 |
进阶
- TEXT / LONG_TEXT / JSON 不能做主键或索引列(MySQL 不允许直接建键),需要检索的字段用 STRING / INT / LONG / DATETIME;
- 建模与 DDL 固定在主数据源(本系统自己的库)执行;数据源配置里登记的外部库不参与建模,只供表单设计器绑定;
- 字段数与模型数有上限,超了会提示「字段过多通常说明该拆表了」;
- 表用于流程审批时,需额外加
process_instance_id(字符串型,长度不小于 64)与process_status(整数型:TINYINT / INT / LONG,建成 STRING 不合格)——用「快速添加 → 流程字段」一键补齐;🔴 这两列类型不对不会在建表、表单存草稿、发布时报错,只会在流程模型第二步选「在线表单」时把这张表单标成「不可用」,而那时表已经建出来了; - 模型登记带来源标记(人工创建 / AI 工具创建 / 导入),并带乐观锁版本:编辑期间被别人改过会报「已被他人修改」,避免互相覆盖。
常见问题
Q:保存时报「必须且只能指定一个主键」? A:字段列表里主键列有且只能有一个圆点选中。改选了业务字段做主键后,内置 id 会自动降级为普通字段,不会冲突。
Q:为什么表名不让改? A:改表时表名只读——表名是物理对象的身份,改名等于换表。确需改名请重建或走 DBA 流程。
Q:预览 DDL 显示「表结构无变化,无需执行 DDL」? A:说明当前设计与库里的实际结构一致,直接返回即可,不用保存。
Q:删模型时手滑选了连表一起删,能恢复吗? A:不能,DROP TABLE 无法回滚。这也是第二步确认用红色加粗标出表名的原因;日常清理请选「仅删除模型登记」。
Q:导入的系统表能改字段吗? A:不能。系统内置表(system_ / infra_ / bpm_ 等前缀)导入后设计页拒绝保存结构修改,避免改坏平台自身。
