通用工作流引擎数据库设计的简单构思

2024-05-07 09:18

本文主要是介绍通用工作流引擎数据库设计的简单构思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通用工作流引擎数据库设计的简单构思



什么是工作流和工作流引擎

百度百科:

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。
工作流主要解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

维基百科:

A workflow consists of an orchestrated and repeatable pattern of business activity enabled by the systematic organization of resources into processes that transform materials, provide services, or process information. It can be depicted as a sequence of operations, declared as work of a person or group, an organization of staff, or one or more simple or complex mechanisms.
From a more abstract or higher-level perspective, workflow may be considered a view or representation of real work. The flow being described may refer to a document, service or product that is being transferred from one step to another.
Workflows may be viewed as one fundamental building block to be combined with other parts of an organization’s structure such as information technology, teams, projects and hierarchies.

简单通俗不严谨的讲,工作流就是用于传递信息的一整套流程。

例如,去银行办理贷款,从用户申请到银行审核再到最后用户拿到钱,这整个过程就是一个工作流,银行肯定也有自己的一套工作流系统,用于不同工作人员不同部门之前的写作,从而完成贷款这件事情。

而工作流的核心就是工作流引擎。

所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。工作流引擎包括了,流程的节点管理、流向管理、流程样例管理等重要功能。


数据库设计

对于一个通用的工作流引擎数据库,我觉得它应该具备以下几个功能:

  1. 工作流引擎适用于多种类型事务
  2. 流程调度流转,如创建,结束,跳跃,回退,终止
  3. 自定义动作及事件发布
  4. 顺序处理与并行处理

这里需要解释一下什么是任务的顺序执行和并行执行
这里写图片描述
(图片来自网络)
上一个任务的处理者指定下一个任务的处理者,必须当前处理人处理完毕,流程才能继续,为顺序处理,上图左边模式。
上一个任务的处理者指定多个处理人,由任一处理人处理,不分前后顺序,当所有处理人处理完毕,即可进入下一步骤,为并行处理,上图右边模式。

最后,我设计出下面的数据库引擎结构
这里写图片描述

  • work表,即通用的工作流程表,代表一项目完整事务,state表示状态,有进行中,完结,终止三种状态,type指向具体事项类型,例如贷款事务,取款事务。
  • task表,即操作任务表,表代表一种操作类型,type指向具体的操作类型,以银行贷款为例,type指向各种具体的审核操作。
  • work_task表,作为中间表,连接work表和task表,state字段表示状态,有进行中,完结,终止三种状态,next_id指向下一个操作,通过操作这个字段,实现流程的回退,跳跃和终止。
  • person表,表示执行task操作的人。
  • task_person表,作为中间表,关联task表和person表,type表示任务操作者的执行类型,有顺序执行和并行执行两种。

设计思路

下面,我将阐述我的设计思路。
我们以银行贷款为例,大致流程为:
用户发起贷款》》审核流程1》》审核流程2》》发放贷款

我们需要根据具体业务加入具体的类型表,最后的数据库结构为

这里写图片描述

其中
这里写图片描述
loan表为贷款业务表,它表示一次贷款,是work的一种类型。

这里写图片描述

通过task的type字段,定义多种实际操作类型,approval1,approval2,draw分别表示单人审核操作,多人审核操作以及用户最后的取款操作。

这里写图片描述

通过work_task表将work和task关联的同时,也实现了task的执行顺序,同时,加入next_id用来表明下一个task,这样我们通过操作next_id就可以动态操作流程。当next_id指向自己的时候,说明流程已经结束。person_state表示执行人的状态。

  • 跳跃:将next_id指向我们最终的task,那么中间的task将会跳过。
  • 回退:为了避免task流程陷入死循环,回退是加入新task,然后再将next_id指向新加入的第一条task。
    例如,原本的流程是abcde,这时我们到了d这一步,需要回退到b,我们就可以在work_task中再加入bc,变成abcdbcde,只要把旧bc的信息复制到新bc上即可。
  • 终止:直接在next_id赋值为空。

这篇关于通用工作流引擎数据库设计的简单构思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966941

相关文章

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1