在Flowable工作流引擎中,数据库表结构是整个系统的基础。本文将详细介绍Flowable中最重要的几类表结构,帮助大家更好地理解Flowable的内部工作机制。 Flowable的表名都遵循特定的命名规则,主要包括以下前缀: ACT_RE_DEPLOYMENT:流程部署表 ACT_RE_PROCDEF:流程定义表 ACT_RU_EXECUTION:运行时流程执行实例表 ACT_RU_TASK:运行时任务表 ACT_RU_VARIABLE:运行时变量表 ACT_HI_PROCINST:历史流程实例表 ACT_HI_TASKINST:历史任务实例表 ACT_ID_USER:用户表 ACT_ID_GROUP:用户组表 ACT_RU_JOB:运行时作业表 事件相关表: ACT_GE_BYTEARRAY:二进制数据存储表 ACT_GE_PROPERTY:属性表 部署相关表: 运行时表: 历史表: 部署相关表: 历史表: 索引优化: 数据清理策略: 查询优化: 让我们通过一个具体的请假审批流程来看数据是如何在各个表中流转的: 数据流转说明: 部署阶段: 运行时阶段: 历史记录: 流程引擎与CMMN集成: DMN决策表使用: 数据管理: 性能优化: 安全建议: 了解Flowable的表结构设计对于以下方面很有帮助: 希望本文能帮助大家更好地理解Flowable的数据库设计,为后续的开发和维护工作提供参考。1. 通用命名规则
2. 核心功能模块表结构
2.1 流程定义相关表(Repository)
2.2 运行时数据表(Runtime)
-- 查询某个业务关联的流程实例
SELECT * FROM ACT_RU_EXECUTION
WHERE BUSINESS_KEY_ = '业务ID';
-- 查询所有活动的子流程
SELECT * FROM ACT_RU_EXECUTION
WHERE SUPER_EXEC_ IS NOT NULL;
2.3 历史数据表(History)
-- 删除30天前的已完成流程
DELETE FROM ACT_HI_PROCINST
WHERE END_TIME_ < DATE_SUB(NOW(), INTERVAL 30 DAY);
-- 统计用户任务处理时长
SELECT
ASSIGNEE_,
AVG(TIMESTAMPDIFF(MINUTE, START_TIME_, END_TIME_)) as avg_duration
FROM ACT_HI_TASKINST
WHERE END_TIME_ IS NOT NULL
GROUP BY ASSIGNEE_;
2.4 身份数据表(Identity)
2.5 作业和事件相关表
2.6 通用支持表
3. 扩展功能模块表结构
3.1 CMMN(案例管理)相关表
3.2 DMN(决策管理)相关表
4. 表关系与性能优化
4.1 核心表关系
流程引擎核心表关系:
ACT_RE_DEPLOYMENT ←──┐
↓ │
ACT_RE_PROCDEF ←─┐ │
↓ │ │
ACT_RU_EXECUTION │ │
↓ │ │
ACT_RU_TASK │ │
↓ │ │
ACT_HI_PROCINST ─┘ │
↓ │
ACT_HI_TASKINST ────┘
4.2 性能优化建议
CREATE INDEX idx_task_assignee ON ACT_RU_TASK(ASSIGNEE_);
CREATE INDEX idx_hi_proc_inst_end ON ACT_HI_PROCINST(END_TIME_);
CREATE INDEX idx_ru_execution_proc ON ACT_RU_EXECUTION(PROC_DEF_ID_);
5. 最佳实践与应用场景
5.1 常见应用场景
5.1.1 请假审批流程示例
-- ACT_RE_DEPLOYMENT 新增一条部署记录
INSERT INTO ACT_RE_DEPLOYMENT(ID_, NAME_, DEPLOY_TIME_)
VALUES ('1', '请假流程-V1', '2025-03-13 10:00:00');
-- ACT_RE_PROCDEF 新增一条流程定义记录
INSERT INTO ACT_RE_PROCDEF(ID_, NAME_, KEY_, VERSION_, DEPLOYMENT_ID_)
VALUES ('leave:1:1', '请假申请', 'leave', 1, '1');
-- ACT_RU_EXECUTION 新增流程实例
INSERT INTO ACT_RU_EXECUTION(ID_, PROC_INST_ID_, BUSINESS_KEY_, PROC_DEF_ID_)
VALUES ('2001', '2001', 'LEAVE-2025-001', 'leave:1:1');
-- ACT_RU_TASK 新增员工填写任务
INSERT INTO ACT_RU_TASK(ID_, EXECUTION_ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_)
VALUES ('2002', '2001', '2001', 'fillForm', '填写请假申请');
-- ACT_RU_VARIABLE 保存表单数据
INSERT INTO ACT_RU_VARIABLE(ID_, EXECUTION_ID_, NAME_, TYPE_, TEXT_)
VALUES
('2003', '2001', 'days', 'integer', '3'),
('2004', '2001', 'reason', 'string', '年假');
-- ACT_RU_TASK 更新前一个任务状态,新增审批任务
UPDATE ACT_RU_TASK SET END_TIME_ = NOW() WHERE ID_ = '2002';
INSERT INTO ACT_RU_TASK(ID_, EXECUTION_ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, ASSIGNEE_)
VALUES ('2005', '2001', '2001', 'leaderApprove', '直接主管审批', 'leader1');
-- ACT_HI_TASKINST 记录任务历史
INSERT INTO ACT_HI_TASKINST(ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, START_TIME_, END_TIME_)
VALUES ('2002', '2001', 'fillForm', '填写请假申请', '2025-03-13 10:05:00', '2025-03-13 10:10:00');
-- ACT_RU_TASK 更新主管审批任务,新增人事审批任务
UPDATE ACT_RU_TASK SET END_TIME_ = NOW() WHERE ID_ = '2005';
INSERT INTO ACT_RU_TASK(ID_, EXECUTION_ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, ASSIGNEE_)
VALUES ('2006', '2001', '2001', 'hrApprove', '人事审批', 'hr1');
-- ACT_HI_TASKINST 记录主管审批历史
INSERT INTO ACT_HI_TASKINST(ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, START_TIME_, END_TIME_)
VALUES ('2005', '2001', 'leaderApprove', '直接主管审批', '2025-03-13 10:10:00', '2025-03-13 11:00:00');
-- ACT_RU_TASK 删除最后一个任务
DELETE FROM ACT_RU_TASK WHERE ID_ = '2006';
-- ACT_RU_EXECUTION 删除执行实例
DELETE FROM ACT_RU_EXECUTION WHERE PROC_INST_ID_ = '2001';
-- ACT_HI_PROCINST 更新流程实例历史
UPDATE ACT_HI_PROCINST
SET END_TIME_ = NOW(),
DURATION_ = TIMESTAMPDIFF(SECOND, START_TIME_, NOW())
WHERE PROC_INST_ID_ = '2001';
-- ACT_HI_TASKINST 记录最后一个任务历史
INSERT INTO ACT_HI_TASKINST(ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, START_TIME_, END_TIME_)
VALUES ('2006', '2001', 'hrApprove', '人事审批', '2025-03-13 11:00:00', '2025-03-13 11:30:00');
ACT_GE_BYTEARRAYACT_RE_DEPLOYMENTACT_RE_PROCDEF
ACT_RU_EXECUTIONACT_RU_TASKACT_RU_VARIABLE
ACT_HI_PROCINSTACT_HI_TASKINSTACT_HI_VARINST5.2 多引擎集成建议
5.3 最佳实践清单
总结
在Flowable工作流引擎中,数据库表结构是整个系统的基础。本文将详细介绍Flowable中最重要的几类表结构,帮助大家更好地理解Flowable的内部工作机制。 Flowable的表名都遵循特定的命名规则,主要包括以下前缀: ACT_RE_DEPLOYMENT:流程部署表 ACT_RE_PROCDEF:流程定义表 ACT_RU_EXECUTION:运行时流程执行实例表 ACT_RU_TASK:运行时任务表 ACT_RU_VARIABLE:运行时变量表 ACT_HI_PROCINST:历史流程实例表 ACT_HI_TASKINST:历史任务实例表 ACT_ID_USER:用户表 ACT_ID_GROUP:用户组表 ACT_RU_JOB:运行时作业表 事件相关表: ACT_GE_BYTEARRAY:二进制数据存储表 ACT_GE_PROPERTY:属性表 部署相关表: 运行时表: 历史表: 部署相关表: 历史表: 索引优化: 数据清理策略: 查询优化: 让我们通过一个具体的请假审批流程来看数据是如何在各个表中流转的: 数据流转说明: 部署阶段: 运行时阶段: 历史记录: 流程引擎与CMMN集成: DMN决策表使用: 数据管理: 性能优化: 安全建议: 了解Flowable的表结构设计对于以下方面很有帮助: 希望本文能帮助大家更好地理解Flowable的数据库设计,为后续的开发和维护工作提供参考。1. 通用命名规则
2. 核心功能模块表结构
2.1 流程定义相关表(Repository)
2.2 运行时数据表(Runtime)
-- 查询某个业务关联的流程实例
SELECT * FROM ACT_RU_EXECUTION
WHERE BUSINESS_KEY_ = '业务ID';
-- 查询所有活动的子流程
SELECT * FROM ACT_RU_EXECUTION
WHERE SUPER_EXEC_ IS NOT NULL;
2.3 历史数据表(History)
-- 删除30天前的已完成流程
DELETE FROM ACT_HI_PROCINST
WHERE END_TIME_ < DATE_SUB(NOW(), INTERVAL 30 DAY);
-- 统计用户任务处理时长
SELECT
ASSIGNEE_,
AVG(TIMESTAMPDIFF(MINUTE, START_TIME_, END_TIME_)) as avg_duration
FROM ACT_HI_TASKINST
WHERE END_TIME_ IS NOT NULL
GROUP BY ASSIGNEE_;
2.4 身份数据表(Identity)
2.5 作业和事件相关表
2.6 通用支持表
3. 扩展功能模块表结构
3.1 CMMN(案例管理)相关表
3.2 DMN(决策管理)相关表
4. 表关系与性能优化
4.1 核心表关系
流程引擎核心表关系:
ACT_RE_DEPLOYMENT ←──┐
↓ │
ACT_RE_PROCDEF ←─┐ │
↓ │ │
ACT_RU_EXECUTION │ │
↓ │ │
ACT_RU_TASK │ │
↓ │ │
ACT_HI_PROCINST ─┘ │
↓ │
ACT_HI_TASKINST ────┘
4.2 性能优化建议
CREATE INDEX idx_task_assignee ON ACT_RU_TASK(ASSIGNEE_);
CREATE INDEX idx_hi_proc_inst_end ON ACT_HI_PROCINST(END_TIME_);
CREATE INDEX idx_ru_execution_proc ON ACT_RU_EXECUTION(PROC_DEF_ID_);
5. 最佳实践与应用场景
5.1 常见应用场景
5.1.1 请假审批流程示例
-- ACT_RE_DEPLOYMENT 新增一条部署记录
INSERT INTO ACT_RE_DEPLOYMENT(ID_, NAME_, DEPLOY_TIME_)
VALUES ('1', '请假流程-V1', '2025-03-13 10:00:00');
-- ACT_RE_PROCDEF 新增一条流程定义记录
INSERT INTO ACT_RE_PROCDEF(ID_, NAME_, KEY_, VERSION_, DEPLOYMENT_ID_)
VALUES ('leave:1:1', '请假申请', 'leave', 1, '1');
-- ACT_RU_EXECUTION 新增流程实例
INSERT INTO ACT_RU_EXECUTION(ID_, PROC_INST_ID_, BUSINESS_KEY_, PROC_DEF_ID_)
VALUES ('2001', '2001', 'LEAVE-2025-001', 'leave:1:1');
-- ACT_RU_TASK 新增员工填写任务
INSERT INTO ACT_RU_TASK(ID_, EXECUTION_ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_)
VALUES ('2002', '2001', '2001', 'fillForm', '填写请假申请');
-- ACT_RU_VARIABLE 保存表单数据
INSERT INTO ACT_RU_VARIABLE(ID_, EXECUTION_ID_, NAME_, TYPE_, TEXT_)
VALUES
('2003', '2001', 'days', 'integer', '3'),
('2004', '2001', 'reason', 'string', '年假');
-- ACT_RU_TASK 更新前一个任务状态,新增审批任务
UPDATE ACT_RU_TASK SET END_TIME_ = NOW() WHERE ID_ = '2002';
INSERT INTO ACT_RU_TASK(ID_, EXECUTION_ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, ASSIGNEE_)
VALUES ('2005', '2001', '2001', 'leaderApprove', '直接主管审批', 'leader1');
-- ACT_HI_TASKINST 记录任务历史
INSERT INTO ACT_HI_TASKINST(ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, START_TIME_, END_TIME_)
VALUES ('2002', '2001', 'fillForm', '填写请假申请', '2025-03-13 10:05:00', '2025-03-13 10:10:00');
-- ACT_RU_TASK 更新主管审批任务,新增人事审批任务
UPDATE ACT_RU_TASK SET END_TIME_ = NOW() WHERE ID_ = '2005';
INSERT INTO ACT_RU_TASK(ID_, EXECUTION_ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, ASSIGNEE_)
VALUES ('2006', '2001', '2001', 'hrApprove', '人事审批', 'hr1');
-- ACT_HI_TASKINST 记录主管审批历史
INSERT INTO ACT_HI_TASKINST(ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, START_TIME_, END_TIME_)
VALUES ('2005', '2001', 'leaderApprove', '直接主管审批', '2025-03-13 10:10:00', '2025-03-13 11:00:00');
-- ACT_RU_TASK 删除最后一个任务
DELETE FROM ACT_RU_TASK WHERE ID_ = '2006';
-- ACT_RU_EXECUTION 删除执行实例
DELETE FROM ACT_RU_EXECUTION WHERE PROC_INST_ID_ = '2001';
-- ACT_HI_PROCINST 更新流程实例历史
UPDATE ACT_HI_PROCINST
SET END_TIME_ = NOW(),
DURATION_ = TIMESTAMPDIFF(SECOND, START_TIME_, NOW())
WHERE PROC_INST_ID_ = '2001';
-- ACT_HI_TASKINST 记录最后一个任务历史
INSERT INTO ACT_HI_TASKINST(ID_, PROC_INST_ID_, TASK_DEF_KEY_, NAME_, START_TIME_, END_TIME_)
VALUES ('2006', '2001', 'hrApprove', '人事审批', '2025-03-13 11:00:00', '2025-03-13 11:30:00');
ACT_GE_BYTEARRAYACT_RE_DEPLOYMENTACT_RE_PROCDEF
ACT_RU_EXECUTIONACT_RU_TASKACT_RU_VARIABLE
ACT_HI_PROCINSTACT_HI_TASKINSTACT_HI_VARINST5.2 多引擎集成建议
5.3 最佳实践清单
总结