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

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

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry