任务、父子任务的关系在系统中的表示

任务、父子任务的关系在系统中的表示

 

ERP、项目管理系统、进度管理系统、物流系统、状态跟踪系统、批处理任务分解系统等软件系统中,大多数都会遇到一个类似描述任务的需求。

 

比如在批处理任务分解系统中,任务关系表需要记录父任务、子任务,也要记录父子任务这个关系。父任务和子任务都是任务,只在任务关系表中记录这些任务即可。而父子关系怎么描述呢?

 

数据结构中有树的概念,树可以表示父子关系。如下图所示一棵树:

任务、父子任务的关系在系统中的表示_第1张图片

 

 

 

可以至少有两种设计,来描述这棵树的节点间的父子关系。

1)  通过节点编码来表示父子关系。给每个节点编码加上父节点编码的前缀,而每一层节点的编码长度固定,节点如果没有父节点,则前缀为空。由以上规则可以定义以上九个节点的编码。

01

0101

0102

0103

010101

010102

010103

010304

010305

由上面的节点编码加上编码规则可以知道,的子节点为,而为节点的子节点,为节点的父节点。

2)  通过记录父节点的编码主键来表示父子关系。给每个节点附加一个“父节点”属性,指示它的父节点为哪一个节点。表格设计如下表1

1

节点号

编码主键

父节点编码主键

1

-

2

1

3

1

4

1

5

2

6

2

7

2

8

4

9

4

由以上的附加“父节点编码主键”属性值可以清楚地知道一个节点的父节点。但是要知道一个节点是否有子节点,则只能通过搜索全表,查询哪个节点的“父节点编码主键”值与当前节点的“编码主键”是否相同。可以冗余设计表格,增加“第一个子节点编码主键”属性。表格设计如下:

2

节点号

编码主键

父节点编码主键

第一个子节点编码主键

1

-

2

2

1

5

3

1

-

4

1

8

5

2

-

6

2

-

7

2

-

8

4

-

9

4

-

这样的设计,主要是方便查找一个节点是否有子节点,以及子节点的数据值。

3)  混合设计模式。即以上两种设计同时存在,这样能够提供更加完善的分解、查找模式,分解和合并节点。

 

任务表中不但需要描述父子关系,还要描述兄弟关系、堂兄弟关系、隔辈关系、堂父子关系。那么在以上两种设计中,稍加巧妙的拼接与转换,即可实现另外这些关系的描述。若你想继续钻研这些关系,请花点时间思考一下。

你可能感兴趣的:(设计模式,数据结构,项目管理,物流,任务)