节点标识的两种方式的比较

    在AnyData 中,我们需要通过节点标识(一个sql条件)来描述一个流程节点,当前数据满足该节点标识时,数据处于该节点,例如 Printed='T' 表示 已打印,CheckPassed='F' 表示审核未通过。
    例如,在医院超声检查流程中的几个节点和节点标识如下
    已到达 :   Schedule.Arrived='T' and Schedule.Waited='F'
    室外候   :   Schedule.Arrived='T' and Schedule.Waited='T' and Schedule.Cheked='F'
    检查中   :   Schedule.Arrived='T' and Schedule.Waited='T' and Schedule.Cheked='T' and Schedule.Printed='F'
    已打印   :   Schedule.Arrived='T' and Schedule.Waited='T' and Schedule.Cheked='F' and Schedule.Printed='T'
    通过上述的多个标记字段的组合来描述流程节点,非常直观,便于阅读,但是问题是当在一个比较复杂的流程中节点标识可能会很长,最终客计算每个数据记录的流程状态时非常慢。
    而且,如果再需要在流程的开头增加一个新的节点 急诊 Schedule.emergency='T' 或 'F',则需要在每个节点的标识中都需要添加新的节点标识,如下:
    急诊      :   Schedule.emergency='T'
    已到达 :   Schedule.emergency='F' and Schedule.Arrived='T' and Schedule.Waited='F'
    室外候   :   Schedule.emergency='F' and Schedule.Arrived='T' and Schedule.Waited='T' and Schedule.Cheked='F'
    检查中   :   Schedule.emergency='F' and Schedule.Arrived='T' and Schedule.Waited='T' and Schedule.Cheked='T' and Schedule.Printed='F'
    已打印   :   Schedule.emergency='F' and Schedule.Arrived='T' and Schedule.Waited='T' and Schedule.Cheked='F' and Schedule.Printed='T'
流程调整时非常麻烦。
   上述的节点标识我们称之为多字段节点标识,即,通过多个字段组合完成对一个节点的标识。另外一种节点标识的方法我们称之为单字段节点标识,所有的流程节点都是通过一个字段进行标识。用于节点标识的字段我们称之为标志字段。例如采用一个字段SeqStep=1标识处于第一个节点,SeqStep=2标识处于第二个节点,这样,每个节点的标识都很简单,计算速度快,而且增加新的节点也非常简单,例如我们上述的超声检查流程中,我们通过单字段节点标识的方式描述流程节点,如下:
    已达到:   SeqStep=1
    室外候:   SeqStep=2
    检查中:   SeqStep=3
    已打印:   SeqStep=4
如果增加一个 急诊 节点非常容易:
    急诊:      SeqStep=5
    已达到:   SeqStep=1
    室外候:   SeqStep=2
    检查中:   SeqStep=3
    已打印:   SeqStep=4
两种方式比较之后我们可以看出区别:
                         多字段节点标识               单字段节点标识
1、可读性            好                                       差
2、可维护性         差                                       好
3、执行效率         差                                       好

你可能感兴趣的:(sql)