主从表 主表存储主件, 从表存储组件.主件与组件都来自品号.上图就是这样的记录: 主表: A B 两条记录从表就有: A,B A,C B,C B,D B,X 五条记录在输入BOM时, 先输入主件才可以输入组件 输入组件时: 对输入的组件要到库中做检查: 看这一组件是不是在上级bom中.这个就有点难度了.因为迭代次数相当多.一般就用存储过程来做.我用sql Server 做了UDF: /* 取得一品号的所有上阶品号 */ CREATE FUNCTION CheckBom (@PH char(20)) RETURNS @TT TABLE ( ID CHAR(20) ) AS BEGIN DECLARE @ZJ CHAR(20) SET @ZJ = @PH WHILE 0=0 BEGIN SELECT @ZJ = MD001 FROM BOMMD WHERE MD003 = @ZJ
IF @@ROWCOUNT >0 BEGIN INSERT @TT VALUES (@ZJ) CONTINUE END ELSE BREAK END
RETURN END在使用时, 只要用 select * from CheckBom(现在输入的主件品号)
这是一种实用的算法,但不是最好的算法吧。反正我是这么用的。
定义好数据结构及其中的关系,就以你的图为例,它可以用上表表示为:(a,b,1)、(a,c,1)、(b,c,2)、(b,d,2)、(b,x,2)
更改表时注意每一层的子级不可以为它的上级(父级、祖父),程序只要简单的遍历就可以了。
主表存储主件, 从表存储组件.主件与组件都来自品号.上图就是这样的记录:
主表:
A
B
两条记录从表就有:
A,B
A,C
B,C
B,D
B,X
五条记录在输入BOM时, 先输入主件才可以输入组件
输入组件时:
对输入的组件要到库中做检查: 看这一组件是不是在上级bom中.这个就有点难度了.因为迭代次数相当多.一般就用存储过程来做.我用sql Server 做了UDF:
/* 取得一品号的所有上阶品号 */
CREATE FUNCTION CheckBom (@PH char(20))
RETURNS @TT TABLE
(
ID CHAR(20)
)
AS
BEGIN
DECLARE @ZJ CHAR(20)
SET @ZJ = @PH WHILE 0=0
BEGIN
SELECT @ZJ = MD001 FROM BOMMD WHERE MD003 = @ZJ
IF @@ROWCOUNT >0
BEGIN
INSERT @TT VALUES (@ZJ)
CONTINUE
END
ELSE
BREAK
END
RETURN
END在使用时, 只要用
select * from CheckBom(现在输入的主件品号)