关于OA流程相关数据表的设计
一、前言
近期有些同学问起流程的表设计,终于有时间能写下博客,并整理下之前所发布的文章。
之前的文章讲到的表设计,没有给全且还存在漏洞,在这里向各位同学表示歉意。这是我个人最新领悟的一些流程思维,欢迎大家指正。关于流程审批,涉及的操作比较多,本章仅考虑了1/2/3点。
- 审批
- 退回
- 撤回/收回(指发起者中止流程)
- 加签(征求另一人或多人的意见,然后再回到原审批人)
- 转发(转发给他人进行审批)
- 会签(通常用于审批后给相关的人签字确认,以获得工作上的协调。)
- 知会(注意与“会签”的区别,“会签”是要留签字的,知会只是个认指定的人知道有这个流程这么回事,并能查看流程)
- 沟通(与流程相关人员就流程问题进行沟通,类似留言或论坛方式)
二、解决流程业务
这是常见到的两种流程场景过程,此类流程都明确规定了每个流程节点必须指定到某一操作人(不指定操作人不在本讨论范围内)。
1.学生请假流程图
2.学生离校手续申请流程图


两种流程各有一些不同,在“学生请假流程”中,学生可以多次申请,且流程业务的走向由表单的相关数据来决定。而在“学生离校手续申请流程”中,学生只能申请一次,且存在多个部门同时处理业务的过程,而归纳节点(暂且这样称呼)必须等待前置节点完成后方可进行审批。
三、表设计
表名:v1_flow(流程表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | name | varchar | 255 | 是 | 流程名称 | |||||
| 3 | form_id | int | 11 | 是 | 表单设计编号 | |||||
| 4 | process_id | int | 11 | 是 | 流程设计编号 | |||||
| 5 | limit_times | int | 11 | 是 | -1 | 一个用户可以发起多少次,-1=不限制 | ||||
| 6 | is_lock | tinyint | 4 | 是 | 是否锁定 |
表名:v1_flow_activity(流程活动表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | sponsor | int | 11 | 是 | 活动发起者 | |||||
| 3 | title | varchar | 255 | 是 | 标题 | |||||
| 4 | status | varchar | 255 | 是 | 状态,0=仅保存,1=运行中,2=已中止,9=已结束 | |||||
| 5 | join_time | bigint | 15 | 是 | 加入时间戳 | |||||
| 6 | flow_id | int | 11 | 是 | 当前运行的流程编号,对应v1_flow表的id | |||||
| 7 | cur_process_id | int | 11 | 是 | 当前运行的流程设计编号 | |||||
| 8 | cur_form_id | int | 11 | 是 | 当前运行的表单设计编号 |
cur_process_id和cur_form_id设计的目的:有些流程在流程活动运行过程中,更改了表单设计编号或流程设计编号。为让流程能继续往下运行而设计。
表名:v1_flow_activity_process(流程活动运行表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | activity_id | int | 11 | 否 | 流程活动编号,对应v1_flow_activity表的id | |||||
| 3 | run_node_id | int | 11 | 否 | 当前运行的节点编号,对应v1_flow_node表的id | |||||
| 4 | arrive_time | bigint | 15 | 否 | 信息到达时间戳 | |||||
| 5 | accept_user_id | int | 11 | 否 | 0 | 接收用户编号 | ||||
| 6 | accept_status | tinyint | 4 | 是 | 0 | 接收信息状态,1=已接收,0=尚未接收 | ||||
| 7 | accept_time | bigint | 15 | 是 | 接收时间戳 | |||||
| 8 | done_user_id | int | 11 | 否 | 0 | 审批人编号(审批人不一定是接收的用户) | ||||
| 9 | done_status | tinyint | 4 | 否 | 0 | 审批状态,1=已审批,0=为尚未审批 | ||||
| 10 | done_time | bigint | 15 | 是 | 审批时间戳 |
表名:v1_flow_form(表单设计表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | name | varchar | 255 | 是 | 表单设计名称 | |||||
| 3 | data_table | varchar | 255 | 是 | 数据表表名 | |||||
| 4 | title_scheme | varchar | 255 | 是 | 流程活动的标题构成方式,如:#{student_no}#{user_name}请假申请 | |||||
| 5 | layout | varchar | 1000 | 是 | 表单设计HTML代码 |
表名:v1_flow_form_element(表单元素表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | form_id | int | 11 | 否 | 所属表单设计编号 | |||||
| 3 | type | varchar | 255 | 否 | 表单类型,text/select/radio/checkbox/button等 | |||||
| 4 | label | varchar | 255 | 否 | 标记名称 | |||||
| 5 | name | varchar | 255 | 否 | 表单元素名称 | |||||
| 6 | data_source | varchar | 500 | 是 | 数据源,select/radio/checkbox会存在 | |||||
| 7 | data_type | varchar | 50 | 否 | 数据类型,int/varchar等 | |||||
| 8 | data_length | int | 11 | 是 | 数据长度 | |||||
| 9 | default_value | varchar | 255 | 是 | 默认值 | |||||
| 10 | placeholder | varchar | 255 | 是 | ||||||
| 11 | styles | varchar | 255 | 是 | 样式 | |||||
| 12 | attributes | varchar | 255 | 是 | 属性 | |||||
| 13 | is_hidden | tinyint | 4 | 否 | 是否隐藏 |
表名:v1_flow_process(流程设计表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | name | varchar | 255 | 是 | 流程设计名称 |
表名:v1_flow_node(流程节点表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | process_id | int | 11 | 是 | 所属流程设计编号,对应v1_flow_process表的id | |||||
| 3 | node_name | varchar | 50 | 是 | 节点名称 | |||||
| 4 | node_type | varchar | 255 | 是 | 节点类型,1=开始节点,2=收纳节点,3=子流程节点,9=结束节点 | |||||
| 5 | write_forms | varchar | 200 | 是 | 可写字段集合 | |||||
| 6 | operator | int | 11 | 是 | 指定的审批人用户id,可留空 | |||||
| 7 | operator_type | tinyint | 4 | 是 | 审批人类型,此项可自行设计,如-1=自行选择,1=发起者的班主任,2=发起者所在部门的二级学院学生科科长,3=发起者所在部门的二级学院领导等 | |||||
| 8 | allow_back | tinyint | 4 | 是 | 是否允许回退操作 | |||||
| 9 | back_step | tinyint | 4 | 是 | 1 | 回退操作步长,1=一步,2=两步 | ||||
| 10 | styles | varchar | 500 | 是 | 节点样式,长宽高top/left等 | |||||
| 11 | actions | varchar | 200 | 是 | 节点审批后的回调方法(钩子),需要程序具体实现 | |||||
| 12 | condition_prev | tinyint | 4 | 是 | 2 | 所有前置节点(可能存在多个前置节点)能运行到当前节点的方案,1=只要有一个审批完成即可,2=必须所有的审批完成即可 |
关于子流程,本章未做考虑
表名:v1_flow_process_procedure(流程设计步骤/线程表--即节点之间的线走势)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | cur_node_id | int | 11 | 是 | 当前节点id,对应v1_flow_node表的id | |||||
| 3 | next_node_id | int | 11 | 是 | 下一节点id,对应v1_flow_node表的id | |||||
| 4 | limit_hour | int | 255 | 是 | -1 | 节点之间限制多少小时内必须审批,-1=不限制 | ||||
| 5 | condition_next_data | varchar | 1000 | 是 | 能往下一节点运行的数据条件,如请假中流程可设置#{days}>=3 |
表名:v1_flow_data1(流程编号为1的数据表-请假表)
| 序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | id | int | 11 | 是 | 是 | 否 | auto_increment | |||
| 2 | dept_name | varchar | 50 | 是 | 学生所在二级学院 | |||||
| 3 | major_name | varchar | 50 | 是 | 学生专业 | |||||
| 4 | classes_name | varchar | 50 | 是 | 学生行政班级 | |||||
| 5 | user_id | int | 11 | 是 | 用户id | |||||
| 6 | student_no | varchar | 50 | 是 | 学号 | |||||
| 7 | user_name | varchar | 50 | 是 | 姓名 | |||||
| 8 | sq_timeBegin | bigint | 15 | 是 | 请假开始时间戳 | |||||
| 9 | sq_timeEnd | bigint | 15 | 是 | 请假截至时间戳 | |||||
| 10 | sq_days | int | 11 | 是 | 请假天数 | |||||
| 11 | sq_reason | varchar | 200 | 是 | 请假事由 | |||||
| 12 | banzhuren | varchar | 100 | 是 | 班主任姓名 | |||||
| 13 | banzhuren_shenpi | varchar | 25 | 是 | 班主任审批结果 | |||||
| 14 | banzhuren_shenpi_text | varchar | 255 | 是 | 班主任审批意见 | |||||
| 15 | xsk2 | varchar | 255 | 是 | 二级学院学生审批审批人姓名 | |||||
| 16 | xsk2_shenpi | varchar | 255 | 是 | 二级学院学生审批结果 | |||||
| 17 | xsk2_shenpi_text | varchar | 255 | 是 | 二级学院学生审批意见 | |||||
| 18 | lingdao2 | varchar | 255 | 是 | 二级学院领导姓名 | |||||
| 19 | lingdao2_shenpi | varchar | 255 | 是 | 二级学院领导审批结果 | |||||
| 20 | lingdao2_text | varchar | 255 | 是 | 二级学院领导审批意见 | |||||
| 21 | xsk | varchar | 255 | 是 | 学校学生科审批人姓名 | |||||
| 22 | xsk_shenpi | varchar | 255 | 是 | 学校学生科审批结果 | |||||
| 23 | xsk_shenpi_text | varchar | 255 | 是 | 学校学生科审批意见 | |||||
| 24 | xjr | varchar | 255 | 是 | 销假人姓名 | |||||
| 25 | xj_days | varchar | 255 | 是 | 销假天数 | |||||
| 26 | xj_time | datetime | 是 | 销假时间 | ||||||
| 27 | xjshr | varchar | 255 | 是 | 销假审核人姓名 | |||||
| 28 | xjshr_shenhe | varchar | 255 | 是 | 销假审核结果 | |||||
| 29 | xjshr_shenhe_text | varchar | 255 | 是 | 销假审核意见 |
数据库表结构和简单数据
https://files.cnblogs.com/files/kingeric/zmoa.zip
关于OA流程相关数据表的设计的更多相关文章
- Zabbix的history相关数据表数据太大,执行表分区操作过程
一.查询zabbix数据库大小 mysql> select table_schema, concat(truncate(sum(data_length)/1024/1024,2),' mb') ...
- 夺命雷公狗---Thinkphp----4之数据表的设计
我们这次来写的项目是仿http://yispace.net/39765.html而写的, 这里其实也就那回事,主要有标题和内容,和栏目, 文章页就更加的简单,其实也就那及格字段即可,我们分享得出的结果 ...
- K8 系统中省市县数据表的设计可以反映出什么? 通过一个基础业务表的设计品味软件系统的整体架构
1:没有严谨的Id思想,不变化的Id思想,看不见的Id的思想. 2:数据不严谨,没有上下级关系,没有树形结构,ParentId 的思想. 3:表之间的关系都是弱关联,基础数据一修改业务数据就容易乱套. ...
- sql数据表的设计思路
好的表结构分的比较细致,个人理解大概主要分为主表.明细.历史记录表.中间表,辅助表结构应该分为:类型表.状态表.统计表.统计明细表等.为了一个功能加那么多表实在是多余,如果写一个非常复杂的业务逻辑还是 ...
- [Oracle]根据字段值全库搜索相关数据表和字段
这个需求比较冷门,但对于在某些特定的情况下,还是会有这样的需要的.好在Oracle实现还比较方便,用存储过程则轻松实现. 查询字符串: create or replace procedure sear ...
- Activiti数据表
--1:资源库流程规则表SELECT * FROM JEESITE.act_re_deployment --部署信息表SELECT * FROM JEESITE.act_re_model --流程设计 ...
- Activiti工作流框架学习(一)——环境的搭建和数据表的了解
一.什么是工作流 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...
- activiti数据表介绍
activiti6.0数据库介绍 Acitiviti6.0数据库中一共有28张表,表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识. 用于自我学习记录,后期不定期更新~~~ 数据库描述 ...
- Activiti学习(二)数据表结构
Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. l ...
随机推荐
- 201871010126 王亚涛 《面向对象程序设计(java)》 第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- nginx 跨域请求访问
1.nginx跨域请求访问 location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin(请求域名) *(所有域名) http ...
- phpcms站点域名配置https无法提交如何处理
一位网友给ytkah反映说phpcms站点域名配置https无法提交,在后台修改站点域名为https提交后提示“站点域名格式应该为http://www.phpcms.cn/,请以‘/’结束”,这个要如 ...
- yandexbot ip列表整理做俄罗斯市场的站长可以关注一下
这段时间ytkah在负责一个客户的网站,主要做俄罗斯市场,当然是要研究Yandex了,首先是要知道yandexbot的ip有哪些,本文通过分析这个站从2018.12.02到2019.05.21这段时间 ...
- (HK1-1)海康网络摄像机的使用
https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作: 首先在莹石商城官网https://www.ys7.com/下 ...
- ES6异步操作Promise
什么是Promise Promise是异步编程的一种解决方案,说白了就是一个构造函数,带有all,reject,resolve这几个方法,圆形上有then,catch等方法 Promise的特点 对象 ...
- 动态内存管理:malloc/free/new/delete/brk/mmap
这是我去腾讯面试的时候遇到的一个问题——malloc()是如何申请内存的? c++ 内存获取和释放 new/delete,new[]/delete[] c 内存获取和释放 malloc/free, c ...
- 「CodeM」排列
传送门 Description 给 \(n\) 个二维点 \((a_i,b_i)\),询问有多少种排列 \(p\)(答案对 \(10^9+7\) 取模)使得执行以下伪代码后留下的点是 \(i\),即最 ...
- 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
from:https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc Redis缓存的使用,极大的提升 ...
- 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来 ...