[原创]JWFDv0.96工作流引擎设计-数据库结构说明


 

 

 

          JWFDv0.96工作流 引擎设计


                                                                           

                                      ----数据库结构说明

 

 

 


    

 

 

                   

 

           

注:这篇文章中所使用的“函数”就是指JAVA语言中的方法

 

注: 请参考 “JWFDv0.96 工作流系统开发包简易说明.doc”中的引擎API说明来理解JWFD工作流引擎的原理

 

 

作者 comsci   2010.10.5   四川。成都

 

 


V0.94版本介绍:  本项目是一个利用JGRAPHSWING实现的工作流程设计与运行管理程序,其数据结构和流程算法均是自己设计的,没有使用XPDL等工作流规范文件,而是使用的最简单的XML(GXL)格式,没有状态机概念而是使用的自定义图形遍历算法来驱动这个流程主要的操作是在数据库方面,这样做仅仅是降低了工作流管理系统的技术门槛,便于初学者入门并从感性上理解什么是工作流技术,但是实际应用上和真正的商业工作流产品还有较大的差距


 

V0.96版本介绍

 

      JWFD是由我在04年下半年开始设计并开发的一套包括基于Jgraph开源软件的流程设计器和建立在图形自定义数据结构基础上面的流程引擎的工作流软件系统,在随后的几年中,由于工作和其它一些技术原因,对JWFD的更新一直都停留在局部BUG的修正上面,对核心引擎算法没有进行什么大的改进,这几年国内的流程产品层出不穷,技术水平不断提高,为适应这种发展的情况,我利用在0809年在完成某项目的机会,对JWFD在面对各种实际项目中所体现出来的缺陷进行了修改,对引擎算法进行了大幅度的修正,新增加了增强流程引擎功能的算法,加入了自定义嵌入式脚本解析工具(基于ANTLR3.0开发,脚本功能可能要少些),增加了流程设计器的流程代码编辑功能,增加了简易流程引擎调试工具,对数据库的表结构也做了一定的调整,精简了几张不需要的表,同时增加了主控制结构表的字段,为方便流程设计的初学者,我在不删除旧数据结构说明的基础上面,从新添加新版本数据结构的说明,这样可以使朋友们很容易的从简单的结构入手,再深入到新版本的结构中去。。。。

 

 


数据库结构总览JWFD v0.94-v0.96数据库结构:

 

(下面这两段话是描述的jwfdV0.94之前的数据结构,用户可以跳过不看)

JWFD曾经使用一共12,分别是:

用户权限部门管理类一共三张表: 'department', 'department_level', 'departmentmember'

用户表类两张: useruser_group (以上的表都不是核心结构,可要可不要,但是做为一个完整的程序,还是应该考虑的这些表是用户和权限控制的基础数据结构)

(上面的六张表由于和实际应用项目开发关系过于密切,在JWFD的新版本中已经完全被放弃不用了,JWFD只是一个用于学习的工作流系统,我只关心流程核心的运行控制和处理问题,对于项目和产品应用的外围数据结构,比如说表单等数据结构,我在这里暂时不关心,这些工作是交给项目实施者和商业产品开发者考虑的工作)

流程运行控制表一共五张表'edge_control', flow_manager', 'route_control', 'step_detail', 'step_main',

文档管理类一张表 :document

[原创]JWFDv0.96工作流引擎设计-数据库结构说明_第1张图片  v0.94版本之前的数据库总体结构

(下面的内容是描述jwfdv0.96的数据库结构)

 

    v0.96版本的数据库总体结构

目前所有的表,其中只有4张表对于流程引擎来讲比较重要

(它们分别是edge_control', flow_manager', 'route_control', 'step_main'),也需要重点说明,其它的表在系统中使用率不高,甚至根本没有使用,只是用于给用户进行自定义扩展的时候使用的,大家一看就懂

最新的v0.96版本中,一共有5张表都已经废弃了,原因是由于在jwfd的设计过程中,会出现各种不同的应用,作为JWFD的设计者,我无法完全掌握用户自定义的需求,所以只给用户提供了扩展的接口,具体的应用还是需要用户自己去设计和实现的。。。


流程图数据结构--实际流程建模数据XML文件导入数据库,请看下例文章了解XML数据结构,

JWFDv0.96工作流系统开发包简要说明.doc

JWFDv0.96 工作流XML结构说明.doc

 

表名: step_main  流程图点属性主表 )

     该表和edge_control表共同在数据库中表示了流程图拓扑数据结构,(在数据库中采用顶点和弧的方式来表示图的拓扑结构是一种最流行的,最方便的解决方法,当然..这里也不例外,我已经在设计基于矩阵的流程拓扑数据结构,希望在JWFDv0.98以后的版本推出基于矩阵流程数据结构的新引擎)

step_main表的一条记录就代表在流程图中的一个顶点的拓扑数据,具体结构如下:


上图是jwfdv0.94之前版本的数据结构


上图是jwfdv0.96版本的新数据结构,增加了 5个字段,减少了3个字段(下面做补充说明)

字段1id  (排序ID,非空,短整型)                 功能该条记录的唯一性标识

字段2: step_name (()顶点标识名,非空,字符型)      功能标识流程图节点的名称,中文或者英文,在流程图定义或者运行控制过程中标识或者代表该节点,和表中的step_id字段相对应,字段3: graph_id (流程图标识字段,非空,字符型      功能用于区分不同的流程图,使用中文或者英文,是该表的INDEX字段,查询各流程图的关键字段

字段4: is_active (流程运行状态标识字段,非空,短整型,默认值0) 功能: 通过该字段来标识一个已经处在运行状态中的流程的各个节点的状态,0代表非活动,1代表已经开始活动,2代表异常状态,(流程节点是否活动就是通过该字段来表示的,朋友们可以对这个字段进行自定义扩展,以便扩展引擎的控制功能)

字段5: step_id (流程图顶点的内部标识字段,非空,字符型)  功能在数据库和XML文件中标识一个节点,不对外显示,只是在内部程序中用来代表节点的字段,step_name相对应,其重要性主要体现在数据SQL语句中作为where子句的查询条件字段该字段和XML数据结构中的node_id属性相对照

字段6: is_routed (流程图路由节点标识字段,可空,短整型)    功能功能扩展字段

字段7: visited   (流程访问状态标识字段,非空,短整型)     功能标识流程运行阶段该顶点被运行控制模块访问次数的统计,该字段是程序中图形算法模块需要的重要字段,在有分支节点的流程图中,通过该字段来分辨哪些后驱点被访问,哪些没有被访问

字段8: allow_toback (流程运转回退标识字段,可空,短整型,默认0)   功能表示该节点可回退,0代表容许回退(在v0.96版本中,该字段已经被删除 

----------------------------------------------------------------------------------------------------------------------

JWFD V0.96版本的增加字段补充说明(要深入认识这几个字段的功能和作用,请大家参考“JWFDv0.96 工作流系统开发包简易说明.doc”文档中的流程引擎基础API调用说明)

字段9: cond (嵌入式公式数据字段 ,长字符串型,可为空,默认"")    功能:作为节点嵌入式脚本(公式)数据的数据库保存字段,用于流程条件表达式的逻辑判断和相应处理

字段10: actioned_time ( 流程节点处理次数计数器字段,可为空,短整型,默认0 )  功能:记录流程节点在运行过程中的被处理次数,属于功能计数器字段

字段11: jap_num (条件表达式汇聚逻辑控制字段,可为空,短整型,默认0)  功能:记录流程汇聚节点的汇聚控制次数,属于功能计数器字段

字段12: rollback_status ( 流程节点回退状态字段,可为空,短整型,默认0 )  功能:记录流程节点回退状态,尚未使用,备用字段

字段 13: rollback_time ( 流程节点回退次数计数器字段,可为空,短整形,默认)  功能:记录流程节点的回退次数,属于功能计数器字段

字段 14: startup_time ( 流程引擎时间控制字段,可为空,字符串型,默认“” )功能:记录该流程节点的起始运行时刻值,属于流程时间控制参数字段

字段 15: end_time ( 流程引擎时间控制字段,可为空,字符串型,默认“” )功能:记录该流程节点的终止运行时刻值,属于流程时间控制参数字段

请大家注意,在v0.96版本中增加的上面的几个字段,实际上根据数据库设计的一般原理,应该是要放在step_detail表中作为节点的数据流转控制字段(step_main表和step_detail表互为主从表,step_main作为主表仅仅存储节点的拓扑结构,而step_detail作为从表需要存储节点操作和控制的具体参数,而我在这里并没有这样设计),因为我做这个新版本设计的时候,仅考虑到代码效率的问题,没有考虑到数据库结构的合理性,所以请大家在学习的时候,注意这个问题

-----------------------------------------------------------------------------------------------------


表名step_detail 流程节点属性明细表,作为主表step_main附属,存储节点的详细活动属性 ) 在v0.94v0.96版本中,该表均未被引擎所使用,用户可以自行扩展该表,以使系统能够处理更加复杂的嵌入数据,比如说表单和公文流转等信息


设计本表的目的是为了让一个流程中的节点能够通过一些简单的数据处理变成一个活动点,同时最大限度的分离流程图拓扑数据和业务活动处理数据流

该表目前的对应程序里面的公文处理流程和一般企业流程中的大部分用户节点操作

 (action表示该节点的活动属性)


字段1:   id  记录ID

字段2:   flow_id  流程图ID

字段3:   step_id  顶点ID

字段4:   user_id  对应处理用户ID

字段5:   action_type  活动类型

字段6:   action_result 活动处理结构状态

 

字段9:   action_status  活动当前状态

字段10:  time_limit     活动处理时间期限

字段11:  startup_time  活动开始时间

字段12:  end_time     活动结束时间

 

用户可以在这个表的基础上进行修改,以方便自己的应用程序中对流程节点活动的处理

--------------------------------------------------------------------------------------------------------------------------------------------

表名: EDGE_CONTROL  流程图边()关系表 )



字段1 id     (排序ID,非空,短整型)                 功能该条记录的唯一性标识, 

 

字段2:  edge_id ( 流程拓扑边标识ID,非空,字符型 )       功能标识流程图连接边的名称,SQL语言中查询的条件值,作为该条记录的唯一主键字段,该字段和XML连接边数据结构中的<edge from="node2" id="edge0to="node1">数据段中的id字段数据值相对应

 

字段3:  from_step( 起始顶点连接属性,非空,字符型 )      功能该边所连接的起始顶点的标识ID,该字段和XML连接边数据结构中的<edge from="node2" id="edge0to="node1">数据段中的from字段数据值相对应

 

字段4:  to_step ( 终结顶点连接属性,非空,字符型 )        功能该边所连接的终结顶点的标识ID,该字段和XML连接边数据结构中的<edge from="node2" id="edge0to="node1">数据段中的to字段数据值相对应

字段5:  flow_master_id ( 保留字段 )                     功能保留

字段6:  graph_id step_main表中同名字段 )            功能step_main表中同名字段相同

这张表和step_main表共同组成了流程图的基础拓扑数据结构表..实际上大多数对图的遍历和控制的操作算法都是在这两张表的数据结构基础上进行的


这篇博客仅仅把JWFD开源工作流引擎的数据库结构的部分内容展示出来,全部的数据库结构在下面的链接中下载,是一个DOC文档

--------------------------------------------------------------------------------------------------------

更多内容请下载    JWFDv0.96 工作流系统-数据库结构说明.doc 

欢迎下载 :http://www.cnblogs.com/comsci/favorite/260690.html

 





你可能感兴趣的:([原创]JWFDv0.96工作流引擎设计-数据库结构说明)