数据库字段设计之流程与状态

数据库是动态网站开发不可缺少的一部分,当业务步骤较复杂时,我们可以使用Status来控制其整个流程。Status表示业务所处阶段的状态,而流程中的每个步骤通常表示一个动作,两者的每一步都一一对应但也有一些差异,差异来自于不同的角色间不同的观察角度,开发人员看的是流程,而用户看的是状态,下面我以某审批流程为例进行解释。
假设审批流程有七个步骤:

  1. 发起申请
  2. 副经理审批
  3. 副经理驳回
  4. 经理审批
  5. 经理驳回
  6. 采购
  7. 入库

副经理审批和副经理驳回可以理解为副经理审批这一步骤的两种结果:一种是通过,另一种是驳回,这俩可以理解为一步的两种情况,他们是并列关系;
经理审批和经理驳回可以理解为经理审批这一步骤的两种结果:一种是通过,另一种是驳回,这俩也可以理解为一步的两种情况,他们是并列关系。
因此,说这个审批流程有七个步骤可以,说他有五个步骤也行,而且流程中的每个步骤都是一个动作,这对于程序开发人员来说比较好理解,因为我们平时描述一个流程也不过如此,但是如果用这些步骤来作为业务所处阶段的状态描述信息的话,那用户就不太能理解了。
例如:
A发起申请并指定下一步的审批人是副经理B,B登录系统后发现名下多了一个待处理的项目,状态是“发起申请”,其实现在这个项目的状态描述地就不明确,如果感觉不出来的话,那请对比下面的情况;
A发起申请并指定下一步的审批人是副经理B,B登录系统后发现名下多了一个待处理的项目,状态是“副经理待审批”,这样就比较明确了,副经理登录后看见项目的状态就知道自己该怎么做。
“发起申请”表示流程中的一个步骤,而“副经理待审批”表示业务所处阶段的状态,他俩是一对一对应的关系,但是应用的场景不同,前者用于开发者明确业务流程,后者用于提示用户进行操作。
业务所处阶段的状态通常描述的是下一步应该进行的操作,因为只有这样,它才能对该流程下一步的处理人员的操作起到提示作用:
如果发起申请后的下一步是副经理审批,那业务所处阶段的状态就是“副经理待审批”;
如果发起申请后的下一步是经理秘书审批,那业务所处阶段的状态就是“经理秘书待审批”。
所以流程与状态的对应关系应该是这样的:
数据库字段设计之流程与状态_第1张图片
驳回会造成流程回环,所以把它们单独拿出来,剩下的是一个线性流程,对应关系更加明显。
流程中的每个步骤通常表示一个动作,而且是已完成的动作,上面的状态其实是简化过的,下面附上流程与完整的状态的对应关系图:
数据库字段设计之流程与状态_第2张图片
我们一般不会使用完整的状态,一是太长了显示出来不好看,二是不符合人们的习惯。
如果你有心的话会发现,简化的状态是完整的状态中的后半句话,但是2副经理已驳回和4经理已驳回是前半句话,这很符合人们的习惯,我觉得用后半句话更合理,不过使用前半句话或后半句话都没错。
副经理B驳回到发起人A后,A登录系统发现名下有一个项目,状态是“副经理已驳回”,这时A会重新发起申请;
如果副经理B驳回到发起人A后,A登录系统发现名下有一个项目,状态是“待重新发起申请”,这时A也会重新发起申请,我觉得这样的状态对操作人员的提示更加明显;
注意:
别把流程中的步骤与状态链中的状态混淆了,如果流程描述成如下:

  1. 发起申请
  2. 副经理审批
  3. 副经理驳回
  4. 经理审批
  5. 经理驳回
  6. 正在采购
  7. 已入库

那6和7其实就是错误的,这样就会把流程中的步骤与状态链中的状态混淆了,给自己造成不必要的麻烦,所以一定要牢记:“流程中的每个步骤通常表示一个动作,而且是已完成的动作”。
不知道大家现在搞清楚流程与状态的关系了没,如果有帮助的话请点个赞。

你可能感兴趣的:(SQL基础)