现在工作流很多,请问mysql如何设计一个流程引擎表?
网友回复
工作流是由不同的人做出的一系列决策,根据定义和可重复的过程,确定其中一个人所做出的特定请求会发生什么。那么涉及到的表设计比较多,有流程表、用户表、状态表、转换表、动作表、转换动作表、活动表、请求表、请求动作表,下面我们来一一解释表的设计结构和用处。
在我们可以在此工作流引擎数据库中设计任何其他内容之前,我们首先需要定义确切构成流程的内容,以及我们的用户是谁以及哪些人可以修改流程本身。
可能包含的字段:
名称 | 描述 | 类型 |
---|---|---|
id | id | integer |
name | 流程标识 | string |
该表虽然非常简单,但却是其余设计的中心参考点; 此数据库中的大多数表(例如,状态(State),转换(Transition),请求(Request)等)都需要直接或间接地与此表相关联。
在不同系统中设计可不一样
在一次工作流程中会设计到不同的状态(state), 状态之间的流转需要不同的程序, 我们将之命名为转换(transition)
工作流中的不同状态各有不同的属性类型, 在此总结出几种常见的状态类型枚举:
- 开始(start):每个进程只应该一个。此状态是创建新请求时所处的状态。
- 正常(normal):没有特殊名称的常规状态。
- 完成(complete):表示此状态下的任何请求已正常完成的状态。
- 拒绝(denied):表示此状态下的任何请求已被拒绝的状态(例如,从未开始且不会被处理)。
- 已取消(cancelled):表示此状态下的任何请求已被取消的状态(例如,工作已开始但尚未完成)。
一个状态在一次流程中是唯一的,每个状态都有名称,描述和类型。
名称 | 描述 | 类型 |
---|---|---|
id | id | integer |
process_id | 所属流程的id | integer |
name | 状态名称 | string |
state_type | 状态类型 | string |
description | 状态描述 | string |
流程中不同的状态之间存在状态的转换(Transition) 转换在进程下也是唯一的,标记着从一个状态到另一个状态的过程, 因此转换由主键,进程ID,当前状态和下一个状态组成:
名称 | 描述 | 类型 |
---|---|---|
id | id | integer |
process_id | 所属流程的id | integer |
current_state_id | 当前状态id | integer |
next_state_id | 下一状态id | integer |
状态(State)之间的流转我们称之为转换(Transition), 那么促成这个转换发生的动作和转换发生后的后续影响事件.我们成为:
- 动作(Action): 用户在某个状态节点可操作的行为
- 活动(Activity): 转换到状态节点后产生的事件
同样的不同的动作也各有不同的属性类型, 在此总结出几种常见的动作类型枚举:
- 批准(approve):操作人将请求应移至下一个状态。
- 拒绝(deny):操作人将请求应移至上一个状态。
- 取消(cancel):操作人将请求应在此过程中移...
点击查看剩余70%