
最近在博客园-阿雷的博客中,看到一篇“转《公文转发流程自定义的数据建模》”的文章。我至所以要提出这个话题大家讨论讨论,主要目的在于提高。笔者大体的需求如下:
发比较复杂的企业多用户管理信息系统(MIS),不可能不涉及到系统内多个用户之间的数据文件的流转、审批等功能的开发。由于企业的需求总是随着时间推移不断发生变化,加之各个企业内部所设置的办公流程不尽相同,一套通用性比较好的管理信息系统应该能让系统管理员自己定义公文转发的流程。
目标:
分析:
1)由于流程每个节点环节的发送方和接受方是对岗不对人,应该考虑到整个企业的机构设置,确定每个部门的权利职责。每个大部门内可能有若干子部门,每个子部门内又有不同的职位,负责处理相应的事务。
* 部门的设置是根据每个部门相关人员的岗位来划分设置的。 * 用户组设置具体的岗位权限。 * 一个具体部门可能会拥有几个用户组所在岗位权限。 数据模型如下:
几点说明:图中,也许有人会提出用户组部门表与用户组功能表应该合并成一张表。我的考虑是设置用户组部门表时不需要去考虑具体的明细功能,同样设置用户组功能表时也不需要去考虑属于哪个部门。因为一个用户组功能可以只属于一个部门也有可能属于几个部门,换句话说一个部门可以拥有一个用户组中的权限,也可以拥有多个用户组中的权限。
2)审批的公文一般分为文件和表单2种格式,应该把公文抽象化。把2种格式的公文的共有属性提取出来建立一张公文表。
a.文件格式的
公文表(Document_table) 名称 类型 约束条件 说明 doc_id int 无重复 公文标识,主键 doc_name varchar(50) 不允许为空 公文名称 doc_type char(1) 不允许为空 公文类型
doc_type字段用来辨别公文格式,目前只有2种格式,可设“1”表示文件格式,“2”表示表单格式。估计未来新增公文格式不会太多,所以该字段只需一位字符。文件格式的公文一般是在文件内固定好格式,我们可用一个二进制的字段直接保存整个文件的内容。文件格式的公文需要建一个表来保存相关信息,其大致数据表如下:
文件表(File_table) 名称 类型 约束条件 说明 file_id int 无重复 文件标识,主键 file_name varchar(50) 不允许为空 文件名称 file_value binary 不允许为空 文件内容 ……
b.表单格式的公文要让用户自己定义表单格式,确定表单中的表项。有两种方法来实现:
①每当用户建立一个新格式的表单时,就新建立一个表,把用户输入的表单表项当作该表的字段。这种方式的优点是表单查询速度较快方便,业务逻辑层的开发量较小。缺点是不太灵活,如果企业所使用的不同格式的表单较多(>20种),整个数据库的结构显得比较混乱,而且大部分表单中都有相同的字段,这样也增加了数据冗余。
这种方式的数据建模如下:表单总表(Sheet_table) 名称 类型 约束条件 说明 sheet_id int 无重复 表单标识,主键 sheet_name varchar(50) 不允许为空 表单名称 table_name varchar(20) 不允许为空 表单子表名,如Sub_table1/Sub_table2
表单子表1(Sub_table1) 名称 类型 约束条件 说明 sub_id int 无重复 表单子表标识,主键 option1 varchar 不允许为空 表单表项1 option2 varchar 不允许为空 表单表项2 option3 varchar 不允许为空 表单表项3 ……
表单子表2(Sub_table2) 名称 类型 约束条件 说明 sub_id int 无重复 表单子表标识,主键 option1 varchar 不允许为空 表单表项1 option2 varchar 不允许为空 表单表项2 option3 varchar 不允许为空 表单表项3 ……
……
②对表单再进行一个抽象,把表单看成由若干个表单表项所组合成的一个集合。这种方式的优点是相当灵活,用户建立新格式的表单时只用从已有表单表项中勾选出需要的表项即可,而且整个数据库结构清晰,没有数据冗余。缺点是开发比较复杂,工作量和上面相比高出不少,而且表单查询速度较慢。下面是这种方式的数据建模:
表单总表(Sheet_table) 名称 类型 约束条件 说明 sheet_id int 无重复 表单标识,主键 sheet_name varchar(50) 不允许为空 表单名称
表单表项表(Option_table) 名称 类型 约束条件 说明 op_id int 无重复 表单表项标识,主键 op_name varchar(50) 不允许为空 表单表项名称 op_length int 不允许为空 表单表项长度 op_unit varchar(10) 允许为空 表单表项单位
表单信息表(Sheetinfo_table) 名称 类型 约束条件 说明 info_id int 无重复 表单信息标识,主键 sheet_id int 不允许为空 所属表单标识,和Sheet_table.sheet_id关联 op_id int 不允许为空 表单表项标识,和Option_table.op_id关联 info_value varchar() 不允许为空 表单信息值
对于以上的这两种情况,我个人认为应该采用第二种较为合适。
继续中....
本文发布于:2024-03-06 00:47:44,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1709745594125063.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |