请问下有分支的流程数据库表怎么设计呢?
不希望为每个业务创建一个流程还要重新设计个表
分支是不确定的
不使用jbpm和任何流程引擎
[b]问题补充:[/b]
请问怎么建立通用表
[b]问题补充:[/b]
主表加扩展表来实现似乎并没有采用多分支
只是记录了每个审批的时间吧。
比如说,我有三种审批流程,甚至四种,如果有一种审批流程完全通过,审批就结束
jbpm可以实现,如果知道的话请问它的设计是什么呢?
对于这种流程设计,你需要加一个流程表.
这个流程表类似于一个图的结构
curflowid preflowid nextflowid flowname
1 2 3 审批
1 2 4
2 1 4
表示一个流程,你可以通过这个流程表,来实现流程的前后配置,然后在主表里面可以对应一个流程状态id,对于判断流程开始与结束,你可以将perflowid设置为0,表示流程开始,nextflowid设置为-1,表示流程结束.
比如说你要配置一个新的流程步骤,只要在数据库中增加相应的前后流程配置就可以实现.
如果,你的业务甚至需要几个流程同时进行,那你可以把主表,跟流程表做成1对多关系来解决.
那么你可以仿照 工作流的建立一个通用的表
可以用主表加扩展表来实现吧
主表用来实现你们自己的业务流程的通用的结构,比如流程id,当前办理人,当前状态,下一办理人等等,这些东西很多都是流程通用的.
扩展表用于针对不同流程出现的特定字段.可以用所属的流程id,key,value这样的组合.
比如说流程3,需要特定的加3个字段,比如说时间1,时间2,时间3
那么扩展表中就可以填写这样的数据:
id key value
3 time1 时间1
3 time2 时间2
3 time3 时间3
这个id对应主表的流程id.
每次比如说查询一个流程的状态,就连接主表与扩展表联合显示.
用这样的扩展表的坏处在于,你自己前台的程序要很明确,知道自己扩展了哪些字段.当然,通常你在java的类里面写一堆get,set就会知道自己扩展了那些字段.
java类里面,可以写一个base的类,这个类包含了所有主表字段的get,set方法,所有流程都继承这个类,针对这个扩展表的额外的get,set.
这样做的好处在于,扩展新的字段是很容易的.
这个设计方法在很多开源应用都用到,尤其是支持插件机制的开源应用.比如WordPress,开源的php博客.它的数据库就是采用到这样的设计.