本文档下载自文库下载网,内容可能不完整,您可以点击以下网址继续阅读或下载:http://www.wenkuxiazai.com/doc/f1d73c1fc5da50e2524d7f87.html一种基于存储过程的BOM遍历算法一种基于存储过程的BOM遍历算法JournalofHefeiUniversity(NaturalSciences)2007年2月第17卷第1期Feb.2007Vol.17No.1合肥学院学报(自然科学版)一种基于存储过程的BOM遍历算法檀明,袁,钟伯成,胡学友,吴晓琴(合肥学院计算机科学技术系,合肥230601)摘要:BOM是ERP系统中的基础数据,其数据结构的确定与操作算法的设计直接影响到ERP系统的效率.通过对BOM概念的分析,提出一种基于存储过程的BOM的遍历算法,同时介绍了将遍历算法与Dephi6.0的树形控件相结合,实现从数据库中提取产品数据,直观地显示BOM的层次关系的方法.关键词:BOM;存储过程;ERP中图分类号:TH166文献标识码:A:-(-0040-06BOM(物料清单),、中间件、零件、.BOM实质是产品结构关系的反映,并将.由于BOM处于ERP(企业资源计划)系统中的关键地位,BOM的数据ERP系统中数据模型的核心,BOM设计的好坏直接影响ERP系统的实施和运行的效率.为了优化ERP系统的性能,提高系统运行的效率,从数据结构的角度研究BOM的构造方法与遍历算法,对ERP系统的设计与开发有着重要的实际意义.[1]761BOM的数据结构设计由于实际产品的结构应该是网状结构,网状结构的产生源于父部件与子部件之间的关系,并非一对多或多对一,而是多对多,也即父部件通常由许多子部件装配而成,而许多通用子部件又被用在多种产品或父部件的装配中.网状数据结构在当今主流的关系数据库中通常难以实现,BOM中的数据在关系数据库中只能以二维的形式表示,因此二维数据在数据库中如何表示也就成了BOM构造的关键.常见的BOM主[1]79要有多层BOM和单层BOM.1.1多层BOM多层BOM采用“单父—多子”的数据结构,要求详细地记录了产品的结构信息,即便是同样的零http://www.wenkuxiazai.com/doc/f1d73c1fc5da50e2524d7f87.html部件结构,只要存在于不同的产品中,也要多次详尽地记录.例如,产品A的结构如图1所示,其多层BOM数据表如表1.多层BOM结构的优点是:(1)产品间结构不互相影响,各个产品之间的数据记录没有交叉,因而维护比较方便;(2)多层BOM结构再分解时算法比较简单,只要根据产品的编码查询出最底层子件(即需要制造和采购的零部件)的编码和数目即可,效率比较高.但多层BOM结构也存在很多缺点:(1)数据冗余量大,零部件结构的重复定义,也增加了系统启动时录入基础数据的工作量.(2)虽然定义了子件的层次关系,但是它属于哪一个父层并没有记录,因此,并不收稿日期:2006-11-01修回日期:2007-01-04作者简介:檀明(1974—),男,安徽望江人,合肥学院计算机科学技术系讲师,硕士;研究方向多媒体、数据库技术、嵌入式系统.第1期檀明,等:一种基于存储过程的BOM遍历算法41能反查出某零部件的上一层父件,而只能查出它属于哪个产品,无法清晰地显示产品的树型结构.(3)结构不灵活,缺乏扩展性.比如,当某个产品下的一个零部件要作为产品销售时,需要重新录入该零部件.(4)BOM结构设计必须按由部件到小部件再到零件的由大到小的顺序进行.1.2单层BOM单层BOM结构采用“单父—单子”的数据结构,即BOM表中相同的零部件装配关系只记录一次.BOM以“父件号件号”为联合主关键字.同样以图1所示的产品A为例,其单层BOM在数据[2,3]库中的存储形式,如表2所示.表2产品A单层BOM数据表单层BOM结构对于每种层次结构只定义一次,可以大大节省存储空记录号父件号件号用量数间,另外在产品的设计阶段,由于零部件结构和一些相关属性需经常改1AB1动,为便于BOM的生成和管理,应采用单层BOM结构.笔者综合以上23456AABBCCDCDE13124BOM两种结构模型特点,BOM结构模型,如表3所示.表3BOM数据表结构://www.wenkuxiazai.com/doc/f1d73c1fc5da50e2524d7f87.htmlr序号字段名1Feed_no23456789101112131415161718192021222324Ffeed_noSpread_tagUse_potEditionMap_noUnitUnit_useMemoDos_countEffect_dateInvalid_dateHarmCost_ratioOver_controlBring_makeRoot_noDoc_unitProc_modeCheck_fomuLengthWidthHighTypeVarcharVarcharVarcharVarcharVarcharVarcharNumericVarcharNumericDatetimeDatetime...