一种erwin模型软件更新方法和装置制造方法

文档序号:6536296阅读:186来源:国知局
一种erwin模型软件更新方法和装置制造方法
【专利摘要】本发明提供了一种ERWIN模型软件更新的方法,其通过将旧版本ERD的副本临时保存在各个本地设备,在各本地设备上比对新旧版本ERD得到各内置对象的变更清单,将各本地设备的变更清单合并后进行ERD的更新,将ERD的更新的并行处理,对于大数量更新的场景而言,显著提高了更新处理的效率。并且,本发明还提供了相应的装置。实施本发明提供的方法和装置,实现了大规模ERWIN模型的并行更新,并且可有效提高并行的数据处理的速度、准确度。
【专利说明】一种ERWIN模型软件更新方法和装置
【技术领域】
[0001]本发明涉及计算机软件领域,更为具体而言,涉及一种ERWIN模型软件更新方法和装置。
【背景技术】
[0002]ERWIN,是目前国内外应用最广泛的建模工具之一,全称为AllFuusin ERwin DataModeler,是CA公司AllFuusin品牌下的数据建模工具,支持各主流数据库系统。当ERWIN模型达到一定规模,特别是涉及多主题域(例如,涉及多达100个以上主题域)并行开发时,对ERWIN模型文件的维护管理难度就非常的大。以中国建设银行股份有限公司为例,企业级ERD模型文件已超过90兆,内含100多个主题域,2000多个实体,20000多个属性,接近5000个域,而且每天都会接收上游和下游提出的各种类型的数据需求,如此大规模的应用场景下,采用人工更新维护操作的处理效率比较低下。此外,模型数据之间存在各种各样的相互关系等,而ERWIN自身也无法智能地判断各内置对象的更新次序,如果通过人工判断方法进行处理,效率较低而且出错概率较高。

【发明内容】

[0003]本发明提供了一种ERWIN模型软件更新方法和装置,通过将旧版本ERD的副本临时保存在各个本地设备,在各本地设备各自修改后通过比对新旧版本ERD得到各内置对象的变更清单,再将各本地设备的变更清单通过导入工具进行ERD的更新,如此实现了对同一份ERD文件的并行处理,对于大数据量更新的场景,明显地提高了更新处理的效率。
[0004]根据本发明实施方式的第一方面,提供了一种ERWIN模型软件更新的方法,具体可包括:
[0005]将旧版本ERD的副本分别保存到多个本地设备,在各本地设备上修改所述副本得到各分组的临时修改版ERD ;
[0006]利用ERWIN的应用程序编程接口获取各本地设备上旧版本ERD和临时修改版ERD的内置对象的关联信息,并将各自所获取的内置对象的关联信息进行比对,得到各分组内置对象的变更清单,其中所述内置对象包括:主题域、实体、属性和关系;
[0007]将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新。
[0008]根据本发明实施方式的第二方面,提供了 一种ERWIN模型软件更新的装置,包括:
[0009]第一处理模块,用于将旧版本ERD的副本分别保存到多个本地设备,在各本地设备上修改所述副本得到各分组的临时修改版ERD ;
[0010]比对模块,用于利用ERWIN的应用程序编程接口 API获取各本地设备上旧版本ERD和对应的临时修改版ERD的内置对象的关联信息,并将各自所获取的内置对象的关联信息进行比对,得到各分组内置对象的变更清单,其中所述内置对象包括:主题域、实体、属性和关系;[0011]更新模块,用于将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新。
[0012]实施本发明实施方式提供的ERWIN模型软件更新的方法和装置,可以以分组并行的形式在多个本地设备上进行ERD的修改后再执行统一的更新操作,在大数量更新的情况下,可显著提高ERD更新处理的数据处理效率。
【专利附图】

【附图说明】
[0013]图1图示了根据本发明一种实施方式的ERWIN模型软件更新的方法的流程示意图;
[0014]图2图示了根据本发明一种实施方式的新旧ERD版本中属性比对的流程示意图;
[0015]图3A至图3C图示了根据本发明一种实施方式的实体变更清单导入的流程示意图;
[0016]图4A至图4C图示了根据本发明一种实施方式的属性变更清单导入的流程示意图;
[0017]图5A至图5C图示了根据本发明一种实施方式的关系管更清单导入的流程示意图;
[0018]图6图示了根据本发明一种实施方式的ERWIN模型软件更新的装置的示意图。【具体实施方式】
[0019]为使本发明的实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
[0020]参见图1,图示了根据本发明一种实施方式的ERWIN模型软件更新的方法的流程示意图,具体可包括:
[0021]S100,将旧版本ERD的副本分别保存到多个本地设备,在各本地设备上修改所述副本得到各分组的临时修改版ERD ;
[0022]S101,利用ERWIN的应用程序编程接口获取各本地设备上旧版本ERD和临时修改版ERD的内置对象的关联信息,并将各自所获取的内置对象的关联信息进行比对,得到各分组内置对象的变更清单,其中所述内置对象包括:主题域、实体、属性和关系;
[0023]S102,将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新。
[0024]在本发明的一种实施案例中,ERD模型文件属于企业级C模型,可涉及上百个主题域、上千个实体、上万个属性、几千个域。对这样大规模的ERD模型文件,可以按照主题域进行分组,分组的数目可以根据数据建模的需要灵活设置,例如,可分为2、3、4、5、6、7、8、9、10或更多个分组,每个分组各自独立维护企业级C模型的一部分内容,这一部分内容是以旧版本ERD的副本的形式保存在本地设备上。换而言之,各本地设备上均保存的是旧版本ERD的副本,但实际维护的是ERD的一部分内容。在此我们将临时保存到本地设备上的ERD的副本称为本地旧版本ERD。在旧版本ERD的副本保存到本地设备后,可以根据对ERD的数据建模需求对本地旧版本ERD进行修改,得到本地临时修改版ERD。
[0025]本发明的方法实施方式可在ERWIN7.3版本、VBA语言、EXCEL (2003版、2007版、2010版EXCEL均可以实施)的环境下进行,其中会涉及到ERWIN的术语,下面对这些术语进行简单介绍。域(domain),是属性的值的集合,是数据模型中属性全面定义的一部分。以中国建设银行为例,为便于管理,会按照企业级数据标准对数据类别进行定义,从粗到细按照“域组/域”对域体系进行定义和管理,将域划分为十一大域组,具体包括编码类、代码类、指示器类、文本类、金额类、数值类、百分比类、日期类、时间类、日期时间类、非结构化类。域是在域组的基础上对域组的细分,用于规范实体属性的数据类型、长度、小数点后位数、取值范围、格式、业务规则等内容。主题域(Subject-Area),是对数据模型的逻辑分组,根据不同的业务领域来划分数据实体,也可以把它理解为模型的视图,在不同的主题域中可含有一些公共的实体,对应ERWIN中的Subject-Area,每一个主题域均需要其主题域名称、目的、定义、范围、范围之外、主题域编号。主题域还可以进一步细分为子主题域,按照一级主题域_ 二级主题域_三级主题域的格式来分。实体(Entity),是一个唯一的事物,与业务相关,ERWIN中的每一个实体均需要定义其实体名称,所属子主题域、目的、定义、范围、范围之外、实体编号。属性(Attribute),可以作为数据来表达的实体特性,每一个属性均需要定义其所属实体、属性名称、目的、定义、范围、范围之外、域组、域、引用实体、引用属性(引用实体和引用属性反映属性间的主外键关系)、是否为主键标志、属性编号。关系(Relationship),表达两个实体之间的关联,具体可分为继承关系和引用关系,每一个关系均需要定义其关系名称、关系类型、父实体、子实体、关系基数等。
[0026]本发明实施方式中的ERWIN的内置对象可包括主题域、实体、属性和关系,在本地设备上利用 ERWIN 的应用程序编程接口(Application Programming Interface, API)可以读取ERWIN的内置对象(包括临时保存在本地设备的旧版本ERD,和本地设备上临时修改得到的临时修改版ERD的关联信息,其中,所述关联信息可以是内置对象的信息,以内置对象中的属性为例,关联信息可以是属性的基本信息,以及属性的上下文信息(包括属性所属实体的信息,和属性关联关系信息)。例如,在一些实施方式中,在一个本地设备上通过API获取临时保存的旧版本ERD的一个分组与该分组对应的临时修改版ERD的属性的比对可以按照图2所示的步骤进行。首先,从旧版本ERD中导出旧版本属性信息到EXCEL表的第一表shtl,导出的各旧版本属性按照id升序排序。需要说明的是,ERWIN的每个内置对象都有一个唯一的1ngid,此1ngid唯一标识该内置对象,全局唯一,由ERWIN自动维护,但在ERWIN的操作界面不可见,需要通过API获取,以1ngid作为索引,可以获取各内置对象的新增、删除和更新操作。在属性信息表中包括下述条目的对应信息:属性id、属性名称、所属实体id、目的、定义、范围、范围之外、域组、域、是否主键、属性的业务规则。然后,通过API导出旧版本实体信息到第二表sht2,旧版本实体信息可包括下述条目的信息:实体id、实体名称、目的、定义、范围、范围之外、实体所属子主题域。然后,导出旧版本属性关联关系到第三表sht3,旧版本属性关联关系可包括下述条目的信息:父实体id、父实体名称、父属性id、父属性名称、子实体id、子实体名称、子属性id、子属性名称。然后从临时修改版ERD导出临时修改版属性信息到第四表sht4,按属性id升序排序,临时修改版属性信息包括下述条目的信息:属性id、属性名称、所属实体id、目的、定义、范围、范围之外、域组、域、是否主键、属性的业务规则。接着通过API导出临时修改版实体信息到第五表sht5,临时修改版实体信息包括下述条目的信息:实体id、实体名称、目的、定义、范围、范围之外、实体所属子主题域。接着从临时修改版ERD中通过API导出新版本属性关联关系到第六表sht6,新版本属性关联关系可包括下述条目的信息:父实体id、父实体名称、父属性id、父属性名称、子实体id、子实体名称、子属性id、子属性名称。通过属性id查找在shtl中存在,而在sht4中不存在的属性id,结合表sht2、sht3、sht5、sht6得出属性变更清单中的删除清单。通过属性id查找在第四表sht4中存在,而在第一表shtl中不存在的属性id,结合表sht2、sht3、sht5、sht6得出属性变更清单中的新增清单。找出第一表shtl和第四表sht4中都存在的属性id,并逐一比对这些都存在的属性id对应属性的基本信息,并结合表sht2、sht3、sht5、sht6得出属性变更清单的修改/更新清单。将通过上述比对得到的属性变更清单中的删除清单sht7、新增清单sht8、变更清单sht9汇总合并得到属性变更清单shtlO。最终生成的属性变更清单中可包括如下条目的信息:变更日期、变更类别、变更说明、子主题域、新版本实体名称、新版本属性名称、新版本目的UDP、新版本定义UDP、新版本范围Μ)Ρ、新版本范围之外UDP、新版本业务规则UDP、新版本域组UDP、新版本域UDP、新版本引用实体名称、新版本引用属性名称、新版本中是否为主键、新版本属性编号UDP、旧版本实体名称、旧版本属性名称、旧版本目的UDP、旧版本定义UDP、旧版本范围UDP、旧版本范围之外UDP、旧版本业务规则UDP、旧版本域组UDP、旧版本域UDP、旧版本引用实体名称、就版本引用属性名称、旧版本中是否为主键、旧版本属性编号UDP、变更原因、变更人等。另外的新旧版本ERD的主题域、实体、关系的比对类似,分别获取新旧版本ERD的对应的主题域信息表、实体信息表、关系信息表,并比对哪些条目是要删除的、哪些是新增的、哪些是更新的。同样地,主题域的变更清单、实体变更清单和关系变更清单也分别包括相应的删除清单、新增清单和更新/修改清单。也就是说,本发明实施方式中的变更清单包括删除清单、新增清单和更新/修改清单。
[0027]在各个本地设备上各分组的获取到新旧版本ERD的主题域、实体、属性、关系的变更清单之后,将按照主题域、实体、属性、关系的顺序依次将主题域变更清单、实体变更清单、属性变更清单、关系变更清单导入本地设备上旧版本ERD的分组进行更新。上述内置对象的变更清单的导入是通过对ERWIN的内置对象主题域、实体、属性、关系的写入操作实现。ERWIN的内置对象必须按照主题域、实体、属性、关系的顺序依次将它们的变更清单导入,是因为这些内置对象之间存在的相互引用的关系,如果不按照上述顺序依次导入会导致部分内置对象更新发生混乱,无法实现ERD更新。
[0028]在一些应用场景下,可能会出现误操作,可能将某个内置对象误删除,又希望将其增加的情形,这样的情形下,本发明的实施方式通过先处理删除清单,再处理新增清单,最后处理更新清单的方式解决。以实体变更清单的导入为例,参考图3,说明实体变更清单的导入过程。参考图3A,打开基线版本ERD,也就是上面所述的旧版本ERD,再打开实体变更清单,从实体变更清单中读取待删除的实体,并获取该删除实体的旧版本实体名称OldEnt,并从ERD中查找实体OldEnt,若查找到实体OldEnt,则从ERD中删除实体OldEnt,并输出导入结果:删除实体成功,若未查找到实体OldEnt,则输出导入结果:要删除的旧实体名在ERffIN中找不到,请核对后再导入。无论是查找到实体OldEnt,还是未查找到实体OldEnt,都会返回到询问删除实体清单是否处理完,若未处理删除清单,请返回读取下一条待删除的实体,继续删除,直至处理完实体变更清单中的删除清单。在处理完删除清单之后,参考图3B,开始处理新增清单,读取新增清单中下一条待新增的实体,读取待新增实体的新版本实体名称NewEnt,在ERD中查找实体NewEnt,如果未查找到实体NewEnt,在ERD中新增实体NewEnt,并写入该新增实体NewEnt的基本信息,并从实体编号sheet中申请一个编号newid,该newid是现有编号+1,然后更新实体编号sheet,之后根据新增实体NewEnt所属子主题域,添加视图(Drawing_ob ject_Entity)到ERWIN相应的Sub ject_Area,至此成功地新增了实体,可以输出导入结果:新增实体成功,如果在ERD中查找到了实体NewEnt,也就是说,新增实体NewEnt并不算是新增的,是在ERD中已存在的,此时可以输出导入结果:要新增的新实体名在ERWIN中已存在,请核对后再导入。导入结果:新增实体成功,或者,要新增的新实体名在ERWIN中已存在,请核对后再导入,在导入结果输出之后,返回至询问实体的新增清单是否处理完毕,若未处理完毕,则返回读取待新增的实体,继续处理,直至新增清单中所有的待新增实体都已处理完毕。在处理完新增清单之后,参见图3C,开始处理更新清单,首先读取更新清单中下一条待更新的实体,获取该待更新实体的旧版本实体名称OldEnt,在ERD中查找实体OldEnt,若查找到实体OldEnt,是在ERD中,用实体变更清单中更新清单的新版信息更新实体OldEnt的旧版信息,完成实体更新,输出导入结果:更新实体成功。如果在ERD中没有查找到实体OldEnt,也就是说,要更新的实体OldEnt不存在,无法进行更新,那么可输出导入结果:要更新的旧实体名在ERWIN中找不到,请核对后再导入。在输出导入结果后,无论是成功导入,还是没有成功导入,都会返回至询问实体变更清单中的更新清单。在实体变更清单中的删除清单、新增清单、更新清单依次处理完毕后,可以得到更新后的ERD。
[0029] 在实体变更清单导入旧版本ERD之后,可以开始属性变更清单的导入。对于属性变更清单,同样也是先处理删除清单、再处理新增清单、最后处理更新清单。然而,对于属性变更清单,因为属性之间有相互引用的关系,因而在处理属性变更清单之前,要对属性变更清单中新增属性的处理顺序进行调整,对于新增属性第一属性attl,如果引用了新增属性第二属性att2,则第二属性att2优先于第一属性att2处理。在对应的属性变更清单处理之前,通过属性变更清单的预处理来解决上述问题,这样的预处理为:根据属性变更清单中属性的引用关系对新增清单中的新增属性做拓扑排序,以便保证被引用的属性优先于引用属性处理。然而,在一些情形下,考虑到实体变更清单已经导入,某属性所属实体的名称会发生变化,这样会导致处理属性变更清单的过程中该属性所属的旧实体名称找不到,在这样的情况下,对属性变更清单的预处理还可以包括:在对属性变更清单中的新增清单进行拓扑排序之后,对于属性变更清单中删除清单的待删除属性,在实体变更清单中查询该待删除属性所属的旧版本实体的名称是否已修改,若已修改,则用在实体变更清单中修改的实体名称替换该待删除属性所述的旧版本实体的名称。这样在待删除属性所属旧版本实体的名称已经修改的情形下,通过对变更清单的预处理,可以通过查询实体变更清单找到已修改的实体名称来替换,就避免了旧实体名称找不到的情形,提高了属性更新的质量。对于属性变更清单中更新清单的待更新属性,可以将该待更新属性所属的新版本实体名称替换该待更新属性所属的旧版本实体名称,从而避免在实体改名的情形下,导致处理属性变更清单的过程中旧实体名称找不到的情形。在一些场景下,还会发生属性名称改变,因为若先处理新增属性再处理更新属性的话,会导致部分引用属性找不到,本发明实施方式通过对属性变更清单的下述预处理来解决上述部分引用属性找不到的问题:在对更新清单的实体名称处理之后,对于属性变更清单中新增清单的待新增属性,在该属性变更清单中更新清单中查找该待新增属性所引用的属性的名称是否已修改,若已修改,则用属性变更清单中更新清单中的旧版本属性名称替换该待新增属性所引用的属性的名称。
[0030]下面参考图4,具体说明属性变更清单的导入。参考图4A,首先,打开ERD,打开属性变更清单。根据属性变更清单中属性之间的引用关系对新增属性做拓扑排序,以便保证被引用的属性总是优先于引用的处理处理。对每一行删除的属性(该属性对应的行中包括该属性所属实体的旧版本实体名称、新版本实体名称、以及引用属性等信息),在实体变更清单中查找该待删除的属性所属实体是否已改名,如果发现该待删除的属性所属实体已经改名,则用在实体变更清单中查找到的已经改过的实体名称去替换属性变更清单中该待删除属性所属实体的旧版本实体名称。然后,对每一行更新的属性(该待更新属性的行中包括该属性的旧版本实体名称、新版本实体名称、以及引用属性等信息),用该行的新版本实体名称来替换旧版本实体名称。然后,对每一行新增的属性,在属性变更清单中的更新清单中查找该新增属性所引用的属性为关键字,在属性更新清单中查找该新增属性所引用的属性是否已修改/已改名,若已修改/已改名,则用属性更新清单中的旧版本属性名称替换该待新增属性所引用的属性的名称。然后,从属性变更清单中读取下一条待删除的属性,获取该待删除属性所属的旧版本实体名称OldEnt和属性名称OldAtt,在ERD中查找实体OldEnt,若未查找到实体OldEnt,则可输出导入结果:要删除的旧实体名在ERWIN中找不到,请核对后再导入。若找到实体OldEnt,在进一步确认ERD中的实体OldEnt是否可以找到属性OldAtt,若找到实体OldEnt对应的属性OldAtt,在在ERD的实体OldEnt中删除属性OldAtt,那么可输出导入结果:删除属性成功,若未在实体OldEnt中查找到对应的属性OldAtt,则可输出导入结果:要删除的旧属性名在ERWIN中找不到,请核对后再导入。无论输出的导入结果如何,都会返回至属性删除清单是否处理完成的步骤,若未处理完,则会返回至读取下一条待删除的属性的步骤。若属性删除清单处理完毕,则可以开始处理新增清单,参考图4B,首先读取下一条待新增的属性,获取该待新增属性所属的新版本实体NewEnt和属性名称NewAtt,引用实体RefEnt和引用属性RefAtt。在ERD中查找实体NewEnt,若未找到实体NewEnt,贝U可输出导入结果:要新增的属性所属实体在ERWIN中找不至1J,请核对后再导入,若查找到实体NewEnt,则进一步在ERD的实体NewEnt是否可找到属性NewAtt,若找到属性NewAtt,则可输出导入结果:要新增的属性在ERWIN已存在,本次只更新属性的定义,若未找到属性NewAtt,则在ERD的实体NewEnt中新增属性NewAtt,根据变更清单中的信息,在ERD中写入NewAtt的基本信息,在输出导入结果“要新增的属性在ERffIN已存在,本次只更新属性的定义”之后,也需要根据变更清单,在ERD中写入NewAtt的基本信息。在写入NewAtt基本信息之后,确定在ERD中是否查找到引用实体RefEnt,若未查找到引用实体,则可输出导入结果:引用实体名在导入ERWIN中不存在,请核对后再导入。若在ERD中查找到引用实体,则进一步在实体RefEnt中查找引用属性RefAtt,若未超找到引用属性,则可输出导入结果:引用属性名在导入ERWIN中不存在,请核对后再导入。若在弓I用实体RefEnt中找到引用属性RefAtt,则在ERD的属性NewAtt写入其引用属性RefAtt,然后在属性编号sheet中申请一个编号newid,该newid为现有最大编号+1,在ERD的属性NewAtt中写入属性编号newid,更新属性编号sheet,至此可输出导入结果:新增属性成功。然后,可询问属性新增清单是否处理完,若未处理完毕,则可返回读取下一条待新增的属性,若处理完毕,则可以开始更新清单的处理。参考图4C,首先,读取下一条待更新的属性,获取该待更新属性所属的旧版本实体名称OldEnt和属性名称OldAtt,新版本引用实体RefEnt和新版本引用属性RefAtt,在ERD中查找实体OldEnt,若未找到,则输出导入结果:要更新的旧实体名在ERWIN中找不到,请核对后再导入,若在ERD中查找到实体OldEnt,则在ERD的实体OldEnt中查找旧版本属性OldAtt,若未查找到旧版本属性OldAtt,则可以输出导入结果:要更新的旧属性在ERWIN中找不到,请核对后再导入,若查找到旧版本属性,则在ERD中,用变更清单的新版本属性信息更新OldAtt的旧版信息,然后在ERD中查找引用实体RefEnt,若未查找到引用实体,则输出导入结果:引用实体名在导入ERWIN中不存在,请核对后再导入。若查找到引用实体RefEnt,在ERD的实体RefEnt中查找属性RefAtt,若未查找到引用属性RefAtt,则可输出导入结果:引用属性名在导入ERWIN中不存在,请核对后再导入。若查找到属性RefAtt,则在ERD的属性NewAtt写入其引用的属性RefAtt,至此可输出导入结果:更新属性成功,然后可询问属性变更清单中的更新清单是否处理完毕,若未处理完毕,可返回至读取下一条待更新的属性,继续处理,若处理完毕,则可输出变更清单导入后的ERD版本。
[0031]在实体变更清单、属性变更清单导入之后,导入关系变更清单。为了处理同一名称的关系先删除后新增的情形,对于关系变更清单的导入,同样采用先处理删除清单,再处理新增清单,最后处理更新清单的顺序。在ERWIN中,实体之间的关系具体可分为继承关系和引用关系,其主要区别在于继承关系在父实体和子实体之间多了一个与父实体同名的“子类型符号(Subtype_Symbol)”,父实体是通过子类型符号与所有的子实体之间建立关系,而引用关系是在父实体和子实体之间直接建立关系。因此,在处理关系时,要区分处理继承关系和引用关系。ERWIN在新增一个关系时,会自动把父实体的主键增加到子实体的一个同名属性作为外键,但在处理关系变更清单时属性变更清单已经处理过了,在子实体的外键与系统自动新增的外键名称不同的情形下,就会多出一个属性,本发明的实施方式解决上述问题的方法为:在新增关系之前,先遍历该新增关系的子实体的所有属性,取得子实体的属性中父属性(引用属性)是父实体的主键的序列作为第一属性的列表,在新增关系建立之后,取得子实体中自动新建的外键序列作为第二属性的列表,然后比对第一属性的列表和第二属性的列表,对于两列表中父属性相同但属性名称不同的第一属性和第二属性,用第一属性的名称、UDP目的、定义、范围、范围之外、属性编号等基础信息来覆盖第二属性,然后删除第一属性即可。对于关系的修改,因为继承关系不存在修改的情形,所以只需要考虑引用关系的修改,对引用关系可能的修改包括类型(“identitying”, “non-1dentifying”, “many to many”),是否为空(No nulls, Nulls Allowed),关系基数(“Zero, one ormore,,,“one or more,,,“zero or one,,,,,Exactly,,)。
[0032]下面参考图5,对关系变更清单的导入进行具体说明。参考图5A,首先,打开ERD,打开关系变更清单,从关系变更清单中读取下一条待删除的关系R1,获取关系Rl的父实体OldParEnt和子实体OldChaEnt,以及Rl的名称OldRel,在ERD中查找父实体OldParEnt,若未查找到父实体,则可输出导入结果:要删除的关系的父实体在导入ERWIN中不存在,请核对后再导入。若在ERD中查找到父实体,则ERD中查找子实体OldChaEnt,若未查找到子实体,则输出导入结果:要删除关系的子实体在导入ERWIN中不存在,请核对后再导入。若查找到子实体,则判断关系Rl是继承关系,还是引用关系,若是引用关系,在遍历ERD中所有的关系,查找一个关系R4的父实体是OldParEnt,子实体是OldChdEnt,名称为OldRel,然后确认关系R4是否存在,若不存在,则可输出导入结果:要删除的引用关系在导入ERWIN中不存在,请核对后再导入,若R4存在,则在ERD中删除关系R4,输出导出结果:删除引用关系成功。若判断关系Rl为继承关系,则在ERD中是否找到与实体OldParEnt同名称的子类型符号OldParSym,若未找到子类型符号,则可输出导入结果:要删除继承关系的子类型符号在导入ERWIN中不存在,请核对后再导入。若找到子类型符号,在遍历ERD中所有的关系,找到一个关系R2的父实体是OldParEnt,子实体是OldParSym,遍历ERD中所有的关系,查找是否存在一个关系R3的父实体是OldParSym,子实体是OldChdEnt,若未查找到这样的关系R3,则可输出导入结果:要删除的继承子关系在ERWIN中不存在,请核对后再导入,若查找到这样的关系R3,则在ERD中删除关系R3,如此时OldParSym下已没有关系,则同时删除R2和OldParSym,则可输出导出结果:删除继承关系成功。然后,询问关系删除清单是否处理完毕,若未处理完毕,则可以返回读取下一条待删除的关系,继续处理,若处理完毕,则可以开始处理新增清单。在此需要说明的是,流程步骤中所描述的关系R1、R2、R3、R4等,仅为了描述方便,并不具有特定意义,也不应理解为对本发明实施方式的限制。参见图5B,读取下一条待新增的关系Rl (此处的关系Rl与删除清单中涉及的Rl并不相同,仅是为描述方便,对关系的标识),获取关系Rl的父实体NewParEnt和子实体NewChdEnt,然后在ERD中查找父实体NewParEnt,若未查找到父实体,则可输出导入结果:要新增关系的父实体在导入ERWIN中不存在,请核对后再导入。若查找到父实体,则ERD中查找子实体NewChdEnt,若未查找到子实体,则可输出导入结果:要新增关系的子实体在导入ERWIN中不存在,请核对后再导入。若查找到子实体,则可对子实体的所有属性遍历,是否找到父属性是父实体的主键的属性列表AttrListl,若未查找到这样的属性列表,则可输出导入结果:要新增关系的子实体外键属性在ERWIN中不存在,请先处理属性变更清单后核对后再导入关系。若查找至IJ这样的属性列表,则判断Rl是继承关系还是引用关系,若是引用关系,则遍历ERD中所有的关系,查找是否存在一个关系R4的父实体是NewParEnt,子实体是NewChdEnt,若这样的R4存在,则可输出导入结果:要新增的引用关系在导入ERWIN中已存在,请核对后再导入。若这样的R4不存在,可在ERD中新建一个引用关系R4,R4的父实体是NewParEnt,子实体是NewChdEnt,然后根据NewChdEnt所属子主题域,添加新增关系R4的视图(Drawing_object_Relationship)到 ERWIN相应的 Sub ject_Area,将 NewChdEnt 与 NewParEnt 所属子主题域做比较,若不同,则把NewPar Ent加到NewChdEnt所属子主题域的视图中,对子实体NewChdEnt中自动新建的外键序列AttrList2,与属性列表AttrListl进行比对,看是否找到父属性相同,但属性名称不同的Attrl和Attr2,若找到,则用Attrl的基础信息来覆盖Attr2,然后删除Attrl。如果判断关系Rl为继承关系,则在ERD中是否找到与实体NewParEnt同名的子类型符号NewParSym,若未查找到,贝U在ERD中新建一个子类型符号NewParSym,名称同NewParEnt,然后在ERD中新建一个“can be a”关系R2, R2的父实体是NewParEnt,子实体是NewParSym。若找到与实体NewPatEnt同名的子类型符号NewParSym,则遍历ERD中所有的关系,找到一个关系R2的父实体是NewParEnt,子实体是NewParSym,然后遍历ERD中所有的关系,查找是否存在一个关系R3的父实体是NewParSym,子实体是NewChdEnt,若这样的关系R3存在,则可输出导入结果:要新增的继承关系在导入ERWIN中已存在,请核对后再导入。若这样的关系R3不存在,则在ERD中新建一个“is a”的关系R3,R3的父实体是NewParSym,子实体是NewChdEnt,根据NewChdEnt所属子主题域,添加关系R3的视图(Drawing_ob ject_subtype_SymboI)到 ERWIN 相应的 Sub ject_Area,之后将 NewChdEnt 与NewParEnt所属子主题域做比较,若不同,则把NewParEnt加到NewChdEnt所属子主题域的视图中,对子实体NewChdEnt中自动新建的外键序列AttrList2,与属性列表AttrListl进行比对,看是否找到父属性相同,但属性名称不同的Attrl和Attr2,若找到,则用Attrl的基本信息来覆盖Attr2,然后删除Attrl。然后,询问关系变更清单中新增清单是否处理完毕,若未处理完毕,则返回读取下一条待新增的关系,若处理完毕,则开始处理更新清单。参考图5C,首先,从关系变更清单中读取下一条待更新的关系R1,判断Rl是否为引用关系,若不是引用关系,也就是说,关系Rl为继承关系,则可输出导入结果:继承关系无需修改,请核对后再导入。若关系Rl为引用关系,读取关系Rl的旧实体OldParEnt和旧子实体OldChdEnt,以及Rl的旧版本名称OldRel。在ERD中是否找到父实体OldParEnt,若未找到父实体OldParEnt,则可输出导入结果:要更新关系的父实体在导入ERWIN中不存在,请核对后再导入。若找到父实体OldParEnt,则在ERD中查找子实体OldChdEnt,若未找到子实体OldChdEnt,则可输出导入结果:要更新关系的子实体在导入ERWIN中不存在,请核对后再导入。若查找到子实体OldChdEnt,则遍历ERD中所有的关系,查找一个关系R9的父实体是OldParEnt,子实体是OldChdEnt,名称为OldRel,若这样的关系R9不存在,则可输出导入结果:要更新的引用关系在导入ERWIN中不存在,请核对后再导入。若这样的关系R9存在,则在ERD中,用变更清单中的新版信息更新关系R9中的旧版信息,至此可输出导入结果:更新关系成功。然后可以询问,更新清单是否处理完毕,若未处理完毕,则可以返回读取下一条待更新的关系,继续处理更新清单。若处理完毕,则可输出关系变更清单导入后的ERD版本。
[0033]参见图6,图示了根据本发明一种实施方式的ERWIN模型软件更新的装置,该ERffIN模型软件更新的装置600具体可包括:
[0034]第一处理模块601,用于将旧版本ERD的副本分别保存到多个本地设备,在各本地设备上修改所述副本得到各分组的临时修改版ERD ;
[0035]比对模块602,用于利用ERWIN的应用程序编程接口 API获取各本地设备上旧版本ERD和对应的临时修改版ERD的内置对象的关联信息,并将各自所获取的内置对象的关联信息进行比对,得到各分组内置对象的变更清单,其中所述内置对象包括:主题域、实体、属性和关系;
[0036]更新模块603,用于将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新。
[0037]在本发明的一种实施案例中,ERffIN模型软件更新的装置可应用的ERD模型文件属于企业级C模型,可涉及上百个主题域、上千个实体、上万个属性、几千个域。对这样大规模的ERD模型文件,可以按照主题域进行分组,分组的数目可以根据应用需要设置,例如,可分为2、3、4、5、6、7、8、9、10或更多个分组,每个分组各自独立维护企业级C模型的一部分内容,这一部分内容是以旧版本ERD的副本的形式保存在本地设备上。换而言之,各本地设备上均保存的是旧版本ERD的副本,但实际维护的是ERD的一部分内容。第一处理模块将旧版本ERD的副本分别保存到本地设备,在此我们将保存到本地设备的ERD称为本地旧版本ERD。在旧版本ERD的副本保存到本地设备后,可以根据对ERD的数据建模需求对本地旧版本ERD进行修改,得到本地临时修改版ERD。
[0038]本发明的装置实施方式可在ERWIN7.3版本、VBA语言、EXCEL (2003版、2007版、2010版EXCEL均可以实施)的环境下进行,其中会涉及到ERWIN的术语,具体而言,包括域、主题域、实体、属性、关系等,有关这些属性的说明可参见方法实施方式中的说明。
[0039]本发明实施方式中的ERWIN的内置对象可包括主题域、实体、属性和关系,比对模块在本地设备上利用ERWIN的应用程序编程接口(Application Programming Interface,API)可以读取ERWIN的内置对象(包括临时保存在本地设备的旧版本ERD,和本地设备上临时修改得到的临时修改版ERD)的关联信息,其中,所述关联信息可以是内置对象的基本信息和上下文信息,以内置对象中的属性为例,关联信息可以是属性的基本信息(包括属性的id、名称、目的、定义、范围、域组、域等),以及属性的上下文信息(包括属性所属实体的信息,和属性之间主外键关系的信息)。例如,在一些实施方式中,比对模块在一个本地设备上通过API获取旧版本ERD与该分组的临时修改版ERD的属性的比对可以按照图2所示的步骤进行。
[0040]在各个本地设备上各分组的获取到新旧版本ERD的主题域、实体、属性、关系的变更清单之后,更新模块将按照主题域、实体、属性、关系的顺序依次将主题域变更清单、实体变更清单、属性变更清单、关系变更清单导入本地设备上旧版本ERD的分组进行更新。更新模块对上述内置对象的变更清单的导入是过对ERWIN的内置对象主题域、实体、属性、关系的写入操作实现。ERWIN的内置对象必须按照主题域、实体、属性、关系的顺序依次将它们的变更清单导入,是因为这些内置对象之间存在的相互引用的关系,如果不按照上述顺序依次导入会导致部分内置对象更新发生混乱,无法实现ERD更新。在一些应用场景下,可能会出现误操作,可能将某个内置对象误删除,又希望将其增加的情形,这样的情形下,本发明的更新模块通过先处理删除清单,再处理新增清单,最后处理更新清单的方式解决。以实体变更清单的导入为例,参考图3,说明了更新模块中实体变更清单的导入处理过程,更新模块的处理具体可参见上述方法实施方式中对实体变更清单的处理过程。
[0041]更新模块在实体变更清单导入旧版本ERD之后,可以开始属性变更清单的导入。对于属性变更清单,更新模块同样也是先处理删除清单、再处理新增清单、最后处理更新清单。然而,对于属性变更清单,因为属性之间有相互引用的关系,因而在处理属性变更清单之前,更新模块要对属性变更清单中新增属性的处理顺序进行调整,对于新增属性第一属性attl,如果引用了新增属性第二属性att2,则第二属性att2优先于第一属性att2处理。在对应的属性变更清单处理之前,通过属性变更清单的预处理来解决上述问题,这样的预处理为:根据属性变更清单中属性的引用关系对新增清单中的新增属性做拓扑排序,以便保证被引用的属性优先于引用属性处理。然而,在一些情形下,考虑到实体变更清单已经导入,某属性所属实体的名称会发生变化,这样会导致处理属性变更清单的过程中该属性所属的旧实体名称找不到,在这样的情况下,更新模块对属性变更清单的预处理还可以包括:在对属性变更清单中的新增清单进行拓扑排序之后,对于属性变更清单中删除清单的待删除属性,在实体变更清单中查询该待删除属性所属的旧版本实体的名称是否已修改,若已修改,则用在实体变更清单中修改的实体名称替换该待删除属性所述的旧版本实体的名称。这样在待删除属性所属旧版本实体的名称已经修改的情形下,通过对变更清单的预处理,可以通过查询实体变更清单找到已修改的实体名称来替换,就避免了旧实体名称找不到的情形,提高了属性更新的质量。对于属性变更清单中更新清单的待更新属性,可以将该待更新属性所属的新版本实体名称替换该待更新属性所属的旧版本实体名称,从而避免在实体改名的情形下,导致处理属性变更清单的过程中旧实体名称找不到的情形。在一些场景下,还会发生属性名称改变,因为若先处理新增属性再处理更新属性的话,会导致部分引用属性找不到,本发明实施方式通过对属性变更清单的下述预处理来解决上述部分引用属性找不到的问题:在对更新清单的实体名称处理之后,对于属性变更清单中新增清单的待新增属性,在该属性变更清单中更新清单中查找该待新增属性所引用的属性的名称是否已修改,若已修改,则用属性变更清单中更新清单中的旧版本属性名称替换该待新增属性所引用的属性的名称。参考图4,具体说明更新模块对属性变更清单的导入,具体请参见上面对于图4的描述。
[0042]在更新模块的实体变更清单、属性变更清单导入之后,导入关系变更清单。为了处理同一名称的关系先删除后新增的情形,对于关系变更清单的导入,同样采用先处理删除清单,再处理新增清单,最后处理更新清单的顺序。在ERWIN中,实体之间的关系具体可分为继承关系和引用关系,其主要区别在于继承关系在父实体和子实体之间多了一个与父实体同名的“子类型符号(Subtype_Symbol)”,父实体是通过子类型符号与所有的子实体之间建立关系,而引用关系是在父实体和子实体之间直接建立关系。因此,在处理关系时,更新模块要区分处理继承关系和引用关系。ERWIN在新增一个关系时,会自动把父实体的主键增加到子实体的一个同名属性作为外键,但在处理关系变更清单时属性变更清单已经处理过了,在子实体的外键与系统自动新增的外键名称不同的情形下,就会多出一个属性,本发明的更新模块解决上述问题的方法为:在新增关系之前,先遍历该新增关系的子实体的所有属性,取得子实体的属性中父属性是父实体的主键的序列作为第一属性的列表,在增加了所述待新增关系之后,取得子实体中自动新建的外键序列作为第二属性的列表,然后比对第一属性的列表和第二属性的列表,对于两列表中父属性相同但属性名称不同的第一属性和第二属性,用第一属性attrl的名称、UDP目的、定义、范围、范围之外、属性编号来覆盖第二属性attr2,然后删除第一属性attrl即可。对于关系的修改,因为继承关系不存在修改的情形,所以只需要考虑引用关系的修改,对引用关系可能的修改包括类型(“identitying”,“non-1dentifying”, “many to many”),是否为空(No nulls, Nulls Allowed),关系基数(“Zero, one or more,,,“one or more,,,“zero or one,,,’’Exactly,,)。参考图 5,具体说明更新模块对关系变更清单的导入,具体请参见上面对图5的描述。
[0043]实施本发明实施方式提供的ERWIN模型软件更新的方法和装置,在大数据量更新的场景下,实现了多个ERD文件的并行更新处理,并且根据ERD文件更新所固有的属性特征设置相应的内置对象的变更清单的处理顺序,还根据内置对象的各自的关联特征进行对应的更新处理步骤,在提高了数据更新处理效率的同时,还显著改善了更新处理的准确度。
[0044]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对【背景技术】做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0045]以上所揭露的仅为本发明的一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
【权利要求】
1.一种ERWIN模型软件更新的方法,其特征在于,包括: 将旧版本ERD的副本分别保存到多个本地设备,在各本地设备上修改所述副本得到各分组的临时修改版ERD ; 利用ERWIN的应用程序编程接口获取各本地设备上旧版本ERD和临时修改版ERD的内置对象的关联信息,并将各自所获取的内置对象的关联信息进行比对,得到各分组内置对象的变更清单,其中所述内置对象包括:主题域、实体、属性和关系; 将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新。
2.根据权利要求1所述的方法,其特征在于,将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新包括: 按照主题域、实体、属性、关系的顺序依次将各分组的变更清单分别导入所述旧版本ERD进行更新。
3.根据权利要求2所述的方法,其特征在于,所述导入是利用ERWIN的应用程序编程接口对主体域、实体、属性、关系的写入操作实现。
4.根据权利要求2所述的方法,其特征在于,所述变更清单包括主题域变更清单、实体变更清单、属性变更清单和关系变更清单,其中各变更清单包括删除清单、新增清单和更新清单。
5.根据权利要求4所述的方法,其特征在于,所述主题域变更清单、实体变更清单、属性变更清单和关系变更清单导入所述旧版本ERD是按照首先处理各变更清单中的删除清单,其次处理各变更清单中的新增清单,再次处理各变更清单中的更新清单的顺序依次进行。`
6.根据权利要求5所述的方法,其特征在于,其中,在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单的预处理包括: 根据属性变更清单中属性的引用关系对新增清单中的新增属性做拓扑排序,以便保证被引用的属性优先于引用属性处理。
7.根据权利要求6所述的方法,其特征在于,在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单的预处理还包括: 在所述拓扑排序后,对于所述属性变更清单中删除清单的待删除属性,在实体变更清单查询该待删除属性所属的旧版本实体的名称是否已修改,若已修改,则用在实体变更清单中已修改的实体名称替换该待删除属性所属的旧版本实体的名称。
8.根据权利要求7所述的方法,其特征在于,在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单的预处理还包括: 在对所述属性变更清单中删除清单的实体名称处理后,对于所述属性变更清单中更新清单的待更新属性,将该待更新属性所属的新版本实体名称替换该待更新属性所属的旧版本实体名称。
9.根据权利要求8所述的方法,其特征在于,在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单的预处理还包括: 在对所述属性变更清单中更新清单的实体名称处理后,对于所述属性变更清单中新增清单的待新增属性,在所述属性变更清单中更新清单中查找该待新增属性所引用的属性的名称是否已修改,若已修改,则用所述属性变更清单中更新清单中的旧版本属性名称替换该待新增属性所引用的属性的名称。
10.根据权利要求9所述的方法,其特征在于,在将所述关系变更清单导入所述旧版本ERD过程中,其中, 对于所述关系变更清单中新增清单的待新增关系,在增加该待新增关系之前,遍历该待新增关系的子实体的属性,取得所述子实体的属性中父属性是父实体的主键的序列作为第一属性的列表, 在增加了所述待新增关系之后,取得子实体中自动新建的外键序列作为第二属性的列表,然后比对第一属性的列表和第二属性的列表,对于两列表中父属性相同但属性名称不同的第一属性和第二属性,用第一属性的全部信息覆盖第二属性,并且删除第一属性。
11.一种ERWIN模型软件更新的装置,其特征在于,包括: 第一处理模块,用于将旧版本ERD的副本分别保存到多个本地设备,在各本地设备上修改所述副本得到各分组的临时修改版ERD ; 比对模块,用于利用ERWIN的应用程序编程接口 API获取各本地设备上旧版本ERD和对应的临时修改版ERD的内置对象的关联信息,并将各自所获取的内置对象的关联信息进行比对,得到各分组内置对象的变更清单,其中所述内置对象包括:主题域、实体、属性和关系; 更新模块,用于将各分组的变更清单通过ERWIN的应用程序编程接口依次导入旧版本ERD进行更新。
12.根据权利要求11所述的装置,其特征在于,所述更新模块,用于按照主题域、实体、属性、关系的顺序依次将各分组的变更清单分别导入所述旧版本ERD进行更新。
13.根据权利要求12所述的装置`,其特征在于,所述更新模块的导入是利用ERWIN的应用程序编程接口对主体域、实体、属性、关系的写入操作实现。
14.根据权利要求12所述的装置,其特征在于,所述变更清单包括主题域变更清单、实体变更清单、属性变更清单和关系变更清单,其中各变更清单包括删除清单、新增清单和更新清单。
15.根据权利要求14所述的装置,其特征在于,所述更新模块将所述主题域变更清单、实体变更清单、属性变更清单和关系变更清单导入所述旧版本ERD是按照首先处理各变更清单中的删除清单,其次处理各变更清单中的新增清单,再次处理各变更清单中的更新清单的顺序依次进行。
16.根据权利要求15所述的装置,其特征在于,所述更新模块,还用于在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单的预处理,所述预处理包括:根据属性变更清单中属性的引用关系对新增清单中的新增属性做拓扑排序,以便保证被引用的属性优先于引用属性处理。
17.根据权利要求16所述的装置,其特征在于,所述更新模块,还用于在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单进行预处理,所述预处理包括:在所述拓扑排序后,对于所述属性变更清单中删除清单的待删除属性,在实体变更清单查询该待删除属性所属的旧版本实体的名称是否已修改,若已修改,则用在实体变更清单中已修改的实体名称替换该待删除属性所属的旧版本实体的名称。
18.根据权利要求17所述的装置,其特征在于,所述更新模块,还用于在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单进行预处理,所述预处理包括:在对所述属性变更清单中删除清单的实体名称处理后,对于所述属性变更清单中更新清单的待更新属性,将该待更新属性所属的新版本实体名称替换该待更新属性所属的旧版本实体名称。
19.根据权利要求18所述的装置,其特征在于,所述更新模块,还用于在所述属性变更清单导入所述旧版本ERD过程中,对所述属性变更清单进行预处理,所述预处理包括:在对所述属性变更清单中更新清单的实体名称处理后,对于所述属性变更清单中新增清单的待新增属性,在所述属性变更清单中更新清单中查找该待新增属性所引用的属性的名称是否已修改,若已修改,则用所述属性变更清单中更新清单中的旧版本属性名称替换该待新增属性所引用的属性的名称。
20.根据权利要求19所述的装置,其特征在于,所述更新模块,还用于在将所述关系变更清单导入所述旧版本ERD过程中,对于所述关系变更清单中新增清单的待新增关系,在增加该待新增关系之前,遍历该待新增关系的子实体的属性,取得所述子实体的属性中父属性是父实体的主键的序列作为第一属性的列表,在增加了所述待新增关系之后,取得子实体中自动新建的外键序列作为第二属性的列表,然后比对第一属性的列表和第二属性的列表,对于两列表中父属性相同但属性名称 不同的第一属性和第二属性,用第一属性的全部信息覆盖第二属性,并且删除第一属性。
【文档编号】G06F17/30GK103823842SQ201410025781
【公开日】2014年5月28日 申请日期:2014年1月20日 优先权日:2014年1月20日
【发明者】程大庆, 车春雷, 张春锐, 赵亚敏, 李明, 阴斐, 田丰 申请人:中国建设银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1