跳转至

数据表总览

平台数据表按模块组织为独立文档(本目录),本文保留整体分类、命名规范与生成机制。

平台支持多种数据库:MySQL、Oracle、PostgreSQL、SQL Server、KingBase、OceanBase、DM、DB2、HSQLDB/H2、Oscar。连接池使用 Druid(com.alibaba.druid)。

系统表

系统库以 JPA 或 Hibernate 作为 ORM,启动时通过 ddl-auto=update 自动创建/增量更新表结构(仅新增,不删除)。

基础配置见 obpm-common/src/main/resources/application-base.properties:

spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

两类映射方式并存:

  • Hibernate *.hbm.xml 映射(旧体系):usercenter 模块的 PO,如 UserVO.hbm.xml、DepartmentVO.hbm.xml、DomainVO.hbm.xml、Form.hbm.xml
  • JPA @Entity 注解(新模块):KMS、AI、Message、Logger 等

系统表与运行时静态表(T_ 前缀、代码定义)的逐表列结构见各模块文档;动态表(TLK_/LOG_/PARM_)机制见本文下半部分。

模块文档索引

文档 模块 表前缀
[[usercenter-tables]] obpm-usercenter T_
[[signon-tables]] obpm-signon T_(与 usercenter 共表)
[[core-tables]] obpm-core T_(表单定义 + 运行时静态表)
[[kms-tables]] obpm-kms KMS_
[[ai-tables]] obpm-ai ai_
[[message-tables]] obpm-message mc_
[[logger-tables]] obpm-logger T_

动态表

前缀 TLK_XXX 表 / LOG_XXX 表 / PARM_XXX 表。每个表单(Form)保存时会自动生成对应数据库表,用于存储该表单的业务数据——这是 OBPM 低代码平台的核心特性。

前缀常量定义于 obpm-core/src/main/java/cn/myapps/core/runtime/dynaform/document/dql/DQLASTUtil.java:

前缀 类型常量 用途 生成条件
TLK_ TABEL_TYPE_CONTENT (1) 表单业务数据存储表(最常见) 普通表单(FORM_TYPE_NORMAL)保存
LOG_ TABEL_TYPE_LOG (2) 表单数据变更历史表 表单开启 showLog=true
PARM_ TABLE_TYPE_PARM (4) 流程参数表 流程参数表单(FORM_TYPE_FLOW_PARAMETER)

命名规则:前缀 + 表单名(form.name),全大写。例如表单 Leave → TLK_LEAVE、LOG_LEAVE。

列结构

每张动态表由 4 部分列组成:

① 固定列(所有动态表共有,来自 ChangeLog.getFixedColumns()):

列名 类型 说明
PARENT VARCHAR 父文档 ID
LASTMODIFIED TIMESTAMP 最后修改时间
FORMNAME VARCHAR 表单名称
STATE VARCHAR 流程状态
AUDITUSER VARCHAR 审批人
AUDITDATE TIMESTAMP 审批时间
AUTHOR VARCHAR 创建人
AUTHORDEPTID VARCHAR 创建人部门 ID
AUTHOR_DEPT_INDEX VARCHAR(2000) 创建人部门索引
AUTHOR_USER_INDEX VARCHAR(2000) 创建人索引
CREATED TIMESTAMP 创建时间
FORMID VARCHAR 表单 ID
SUBFORMIDS CLOB 子表单 ID 列表
INITIATOR VARCHAR 发起人
ISTMP BIT 是否临时文档
VERSIONS INTEGER 版本号
APPLICATIONID VARCHAR 应用 ID
STATEINT INTEGER 状态码
STATELABEL VARCHAR 状态标签
AUDITORNAMES CLOB 审批人姓名列表
LASTFLOWOPERATION VARCHAR 最近流程操作
LASTMODIFIER VARCHAR 最后修改人
DOMAINID VARCHAR 域 ID
AUDITORLIST CLOB 审批人 ID 列表
COAUDITORLIST CLOB 协办人列表
STATELABELINFO CLOB 状态标签信息
PREVAUDITNODE CLOB 上一审批节点
PREVAUDITUSER CLOB 上一审批人
OPTIONITEM CLOB 选项项
SIGN CLOB 签名
KINGGRIDSIGNATURE CLOB 金格签名
SECRET VARCHAR 密级

② 业务字段列:表单中每个字段对应一列,列名 = ITEM_ + 字段名(大写),如字段 reason → ITEM_REASON。以 $ 开头的系统字段不加 ITEM_ 前缀,也不建列(在 compareFieldsToAddOrModify 中被跳过)。

③ 主键列:由表单配置的主键名决定(TableMapping.getPrimaryKeyName()),类型为 VARCHAR。

④ LOG 表额外列:DOC_ID(VARCHAR,关联 T_DOCUMENT.ID),仅 LOG_ 表有。

生成机制

表单保存时触发动态表创建/更新,调用链:

  1. FormDesignTimeServiceImpl.save/update(设计时服务入口)
  2. FormTableProcessBean.createDynaTable / createOrUpdateDynaTable
  3. AbstractFormTableDAO.createDynaTable
  4. ChangeLog.compare 对比新旧表单结构,生成变更日志
  5. AbstractTableDefinition.processChanges 执行 DDL
  6. SQLBuilder(如 MysqlBuilder)生成数据库特定 SQL
  7. JDBC Statement 批量执行

各数据库的 DDL 实现位于 obpm-core/src/main/java/cn/myapps/core/designtime/table/ddlutil/<db>/,每个数据库目录包含三件套:

数据库 SQLBuilder TableDefinition Validator
MySQL MysqlBuilder MysqlTableDefinition MysqlValidator
Oracle OracleBuilder OracleTableDefinition OracleValidator
PostgreSQL PostgreSQLBuilder PostgreSQLTableDefinition PostgreSQLValidator
SQL Server MssqlBuilder MssqlTableDefinition MssqlValidator
KingBase KingBaseBuilder KingBaseDefinition KingBaseValidator
OceanBase OceanBaseBuilder OceanBaseDefinition OceanBaseValidator
DM DmSQLBuilder DmSQLTableDefinition DmSQLValidator
DB2 DB2Builder DB2TableDefinition DB2Validator
HSQLDB/H2 HsqldbBuilder HsqldbTableDefinition HsqldbValidator
Oscar OscarBuilder OscarTableDefinition OscarValidator

数据关联

T_DOCUMENT.MAPPINGID → TLK_<表单名>.ID:文档头通过映射 ID 指向动态表主键,实现文档元数据与业务数据的分离存储。

动态表的读写由 AbstractDocStaticTblDAO 及其各数据库子类实现(MysqlDocStaticTblDAO、OracleDocStaticTblDAO、PostgreSQLDocStaticTblDAO 等),由 createDocument(doc, tabelType) 的 tabelType 参数决定写入 TLK_ 表(类型 1)还是 LOG_ 表(类型 2)。

表结构总览

flowchart LR
    A["<b>系统表</b>(T_ / KMS_ / ai_ / mc_,JPA/Hibernate 管理)<br/>用户:T_USER / T_DEPARTMENT / T_DOMAIN / T_ACCOUNT<br/>表单定义:T_DYNAFORM_FORM<br/>KMS / AI / Message / Logger …"]
    B["<b>静态表</b>(T_ 前缀,代码定义,AbstractApplicationInitDAO)<br/>T_DOCUMENT(文档头,核心)<br/>流程:T_FLOWSTATERT / T_ACTORRT / T_NODERT /<br/>      T_FLOWHISTORY / T_RELATIONHIS …<br/>其他:T_UPLOAD / T_TRIGGER / T_COUNTER …"]
    C["<b>动态表</b>(运行时按表单生成,DDL 代码生成)<br/>TLK_&lt;表单名&gt;:业务数据(每表单一张)<br/>LOG_&lt;表单名&gt;:变更历史(可选)<br/>PARM_&lt;表单名&gt;:流程参数"]

    A -->|"表单定义保存后生成"| B
    B -->|"T_DOCUMENT.MAPPINGID 关联"| C