星期天休息没上网,谢谢icevi(按钮工厂)热心回答。
可是,我的库与icevi(按钮工厂)的基本差不多,但是这种有个麻烦,我在实现插入和删除时会有问题,我无法解决。
插入时:如果插入一条项目,就必须更改其后项目的序号,而若有的有子项的话,则会找不到其父项。
删除时:比如项目级长为2时(01-99),删除后若不更新后续项目序号的话,会导致可新添项目越来越少,若更新的话也会出现插入时的问题。
可是,我的库与icevi(按钮工厂)的基本差不多,但是这种有个麻烦,我在实现插入和删除时会有问题,我无法解决。
插入时:如果插入一条项目,就必须更改其后项目的序号,而若有的有子项的话,则会找不到其父项。
删除时:比如项目级长为2时(01-99),删除后若不更新后续项目序号的话,会导致可新添项目越来越少,若更新的话也会出现插入时的问题。
工程编号 父级工程编号 年度 月份 类型编号 计划数 完成数
工程编号用于唯一确定该项,而父级工程编号则用于寻找其父级项
另外,如果存在多层问题,可以通过使用特定的工程编号来解决,如:
工程编号 父级工程编号
1 0 第一层
11 1 第二层
12 1 第二层
121 12 第三层
2 0 第一层
21 2 第二层
那么项目1的所有子项查询条件为:
设当前工程编号为current_id,
where 工程编号=substr(工程编号,1,length(current_id))
根据以上条件即可汇总当前项的概算值
and length(工程编号)>length(current_id)
你的工程项目编号应该是有规则的吧,比如A0001,A0002。这之类的,不设及到新增加项目会需要修改以前项目的序号吧?若你的系统这样处理项目编号,是很不好的。一般一个工程项目立项时设定的工程编号,以后一般都不允许再改的,不可能新加一个项目,以前的序号全部重整一次,系统开销大,数据不好管理,真的不合理。若你的系统中一定要这样,也不是不行,比如一个项目的序号被修改了,将其子项的“上级项目编号 ”也更新为新的编号就可以了。我建议你可以加一个无意义的ID号(自动增加):
工程定义表:
工程ID号 工程编号 名称描述 是否有下级项目 上级项目ID号 。概算类型表:
类型编号 类型描述 工程概算数据表:
工程ID号 年度 月份 类型编号 计划数 完成数这样工程编号的更改维护起来就简单了,子项目与上级项目是通过ID号来联系的,不会受影响。2:“删除时:比如项目级长为2时(01-99),删除后若不更新后续项目序号的话,会导致可新添项目越来越少,若更新的话也会出现插入时的问题。 ”:
这倒是一个要注意的问题,不过我想告诉你,按上面的表结构,你不需要按级长来判断一个项目是第几级及是否有下级项目。因为表中已经有字段来区别的。若你一定要在工程编号上来区分的话,建议不要用编号长度来区分,你可以参考一下某软件中科目代码的定义,级次是用“.”来区分的。比如一级科目“1001”“1002”,二级科目“1001.01”“1001.02”“1002.101”“1002.02”,这样,级次与长度无关,更灵活些。希望你能明白:)