第二种方法是直接记录各序列号之间的关联关系,形成一棵“树”。比较而言,第一种方法方便形成批量数据关联关系的报表,而第二种方法隔离了序列号数据与产品结构,所以产品的结构变了也不会影响历史数据。
我们更倾向于采用第二种方法,因为这对于后面要说到的序列号关联替换、注销等操作更为方便。
4.2序列号关联表的设计
考虑到关联的结构,用父-子节点来定义树状结构是非常方便的,效率也比较高。如图4-5所示的结构:


ID字段是序列号所在的节点,SN是序列号,father_id是序列号的父节点,如为负数则表示此父节点并没有对应的序列号存在,也就是说此SN是该节点数上的根节点,为方便,我们称负数的节点为虚节点。
4.3新增序列号关联
按照节点的设计,任何一次关联动作可以看成把某一节点设置为另一节点的父节点,为方便叙述,我们统一称为把SN1的节点设置为SN2的父节点,或者把SN2关联到SN1上。
新增序列号关联的方法为:更新序列号关联表,设置SN2的父节点等于SN1的节点。
为避免逻辑上的混乱,我们在关联之前必须进行检查,规则为:
1)SN2的父节点必须为虚节点,也就是说SN2是根节点,这样做是为了保证任何一个SN只能有一个父节点。
2)SN2的父节点不能是SN1所在树上的根节点。
例如,将2221关联到1116上,如图4-7

则2221必须没有父节点,这样不会造成大于1个父节点。而且2221必须不等于1116树上的根节点(1111)。