CN106033436B - 一种数据库的合并方法 - Google Patents
一种数据库的合并方法 Download PDFInfo
- Publication number
- CN106033436B CN106033436B CN201510111315.8A CN201510111315A CN106033436B CN 106033436 B CN106033436 B CN 106033436B CN 201510111315 A CN201510111315 A CN 201510111315A CN 106033436 B CN106033436 B CN 106033436B
- Authority
- CN
- China
- Prior art keywords
- field
- target
- source
- database
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库的合并方法,属于数据库技术领域,为一种灵活性更强、功能更为完善的数据库合并方法。该方法包括:获取源数据库和目标数据库;设定源数据库的源表和目标数据库的目标表的对应关系、源数据库的源字段和目标数据库的目标字段的对应关系;设定目标数据库内的目标字段关联关系,目标字段关联关系包括主字段和与该主字段关联的关联字段;根据目标字段关联关系,设定目标表与对应的源表合并的处理顺序;设定源数据库中的源记录和目标数据库中的目标记录的重复判定标准,以及源记录和目标记录符合重复判定标准时的重复操作;根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库。
Description
技术领域
本发明涉及数据库技术领域,具体地说,涉及一种数据库的合并方法。
背景技术
数据库作为信息和数据的载体,对企业具有重要的价值和意义,在某些行业,企业的价值甚至取决于其所拥有的数据库。对于大型企业,一般会有许多下属分公司,为便于统一管理,分公司间所采用的数据库结构是相同或相近的。而分公司之间的数据库又往往相互独立,当总部希望统一更改数据库结构或者汇总所有子公司的信息时,便会涉及到数据库升级与数据库合并工作。
现有的数据库合并技术操作流程一般为,首先确定源数据库与目标数据库,然后确定源表和目标表、源字段和目标字段的对应关系,由用户指定或系统根据表间依赖关系决定表的先后处理顺序,接下来合并具体数据。微软的SSIS(SQL Server IntegrationServices)提供了较为灵活的数据合并功能,可支持不同数据库类型的数据合并,并且可由用户灵活设定源字段与目标字段间的对应关系。
现有技术中的大多数据库合并技术并没有对主外键字段进行较好的处理。当合并过程中遇到主键值需要变更时,与该主键值相关联的外键值也应该保持同步变更,以保证主外键之间的正确关联。另外,有些字段之间虽然没有主外键关系,但是也有保持同步的需求,即当一个数据变化时、另一个数据也要同步变化以保持一致,现有的数据库合并技术没有处理这个需求。在合并过程中,有时会遇到重复记录,现有的数据库合并技术采用了变更这条记录或者不合并这条记录的方法,但是某些情况下,这两种处理均不合理,而应该将重复记录与现有记录融合。
因此,针对上述问题,需要一种灵活性更强,功能更为完善的数据库合并技术。
发明内容
本发明的目的在于提供一种数据库的合并方法,为一种灵活性更强、功能更为完善的数据库合并方法。
本发明提供了一种数据库的合并方法,该方法包括:
获取源数据库和目标数据库;
设定源数据库的源表和目标数据库的目标表的对应关系、源数据库的源字段和目标数据库的目标字段的对应关系;
设定目标数据库内的目标字段关联关系,目标字段关联关系包括主字段和与该主字段关联的关联字段;
根据目标字段关联关系,设定目标表与对应的源表合并的处理顺序;
设定源数据库中的源记录和目标数据库中的目标记录的重复判定标准,以及源记录和目标记录符合重复判定标准时的重复操作;
根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库。
其中,根据目标目标字段关联关系,设定源表和目标表的处理顺序包括:
根据目标字段关联关系,判断当前的目标表中是否存在作为关联字段的目标字段;
当判断到存在作为关联字段的目标字段,判断其对应的主字段所在的目标表是否已存在于处理顺序中;
当判断到主字段所在的目标表已存在于处理顺序中,将当前的目标表添加入处理顺序中;
或当未判断到存在作为关联字段的目标字段,将当前的目标表添加入处理顺序中。
其中,根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库之前,还包括:
获取目标数据库的最大主键值。
其中,根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库包括:
根据所设定的处理顺序,获取目标表及其对应的源表;
若根据重复判定标准,判断到目标表中存在与对应的源表的源记录重复的目标记录,对该目标记录执行对应的重复操作;
若根据重复判定标准,未判断到目标表中存在与对应的源表的源记录重复的目标记录,变更源记录的主键值。
其中,对该源记录执行对应的重复操作之后,还包括:
若判断到该源记录对应的目标记录中存在为主字段的目标字段,获取该目标字段的关联字段;
建立将该目标字段的值赋予其关联字段在源表中的对应源字段的字段变更规则;
对该源记录执行该字段变更规则,并添加入目标数据库中。
其中,变更源记录的主键值包括:
将源记录的主键值加上目标数据库的最大主键值与一之和。
其中,变更源记录的主键值之后,还包括:
判断该源记录中是否存在对应的目标字段为关联字段的源字段;
若判断到该源记录中存在对应的目标字段为关联字段的源字段,判断该源字段是否存在对应的字段变更规则;
若判断到该源字段存在对应的字段变更规则,获取并执行该源字段对应的字段变更规则,并将变更后的源记录添加入目标数据库中。
其中,变更源记录的主键值之后,还包括:
判断该源记录中是否存在对应的目标字段为关联字段的源字段;
若判断到该源记录中存在对应的目标字段为关联字段的源字段,判断该源字段是否存在对应的字段变更规则;
若未判断到该源字段存在对应的字段变更规则,判断该源字段对应的目标字段是否存在源头主字段;
若判断到该源字段对应的目标字段存在源头主字段,判断该源头主字段是否为主键;
若判断到该源头主字段为主键,将该源字段加上目标数据库的最大主键值与一之和,并将变更后的源记录添加入目标数据库中。
本发明带来了以下有益效果:本发明实施例提供了一种数据库的合并方法,该数据库的合并方法中设定了源数据库的源表和目标数据库的目标表的对应关系、源数据库的源字段和目标数据库的目标字段的对应关系,另外还设定了目标表与对应的源表合并的处理顺序、源记录和目标数据库中的目标记录的重复判定标准,以及源记录和目标记录符合重复判定标准时的重复操作,使得合并后的数据库较为准确、合理,为一种灵活性更强、功能更为完善的数据库合并方法。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要的附图做简单的介绍:
图1是本发明实施例中的数据库的合并方法的流程示意图;
图2是本发明实施例中的数据库A的示意图;
图3是本发明实施例中的数据库B的示意图;
图4是本发明实施例中的数据库A和数据库B合并后得到的数据库的示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
本发明实施例提供了一种数据库的合并方法,如图1所示,该方法包括:
步骤S101、获取源数据库和目标数据库。
在合并数据库时,源数据库为用户选择的一个或多个待合并的数据库,目标数据库可以是一个未创建的数据库,也可以是一个已经创建好的数据库。对于数据库合并中目标数据库未创建的情况,用户需要指定数据库生成脚本文件,以用于创建目标数据库。
另外,本发明实施例提供的方法同样适用于数据库的升级,因为升级和合并操作在数据导入层面是相同的,都是将数据从源数据库合并到新数据库。对于升级数据库,源数据库为用户所指定的待升级的老数据库,用户不需要选择目标数据库,系统将会基于用户选定的脚本文件建立一个临时数据库作为目标数据库,在数据导入完成后替换源数据库,实现数据库的升级操作。
源数据库和目标数据库的类型可以不相同,每条数据记录的合并都可通过结构化查询语言(Structured Query Language,简称SQL)语句来执行。
步骤S102、设定源数据库的源表和目标数据库的目标表的对应关系、源数据库的源字段和目标数据库的目标字段的对应关系
系统将根据预先设定的规则,设定源数据库和目标数据库之间表与表,字段与字段的对应关系,基于这些对应关系来进行数据记录的合并。
系统根据初始默认规则建立的对应关系为同名表之间相对应、两个表之间同名的字段相对应;用户可以手动更改这些建立对应关系的规则,建立符合用户实际需要的新的规则。源数据库中的数据记录会按照这些对应关系,添加到目标数据库的对应表的对应字段中去。另外可以设定某些表不进行对应或直接拷贝,在合并数据时不进行数据合并或者直接复制整张表。
步骤S103、设定目标数据库内的目标字段关联关系,字段的关联关系包括主字段和与该主字段关联的关联字段。
其中,目标字段关联关系的形式为“主字段-关联字段”,并作为一条记录存储到目标字段关联关系列表中。初始默认的目标字段关联关系为从目标数据库提取的所有目标字段间的主外键关系,即主键作为主字段,外键作为关联字段,存储到目标字段关联关系列表中。用户可继续添加目标字段关联关系,但需注意的是,为了保证源数据库和目标数据库可以顺利合并,目标字段中的主键不能作为目标字段关联关系中的关联字段。设定了关联关系的目标字段在之后的数据库的合并过程中将会一直保持数据值的同步。
步骤S104、根据目标字段关联关系,设定目标表与对应的源表合并的处理顺序。
遍历目标数据库的所有目标表,对于每张目标表,验证其是否可以加入当前的处理顺序的方法为:根据目标字段关联关系,判断当前的目标表中是否存在作为关联字段的目标字段。如果没有,则将当前的这张目标表添加入处理顺序中;否则,当判断到存在作为关联字段的目标字段,判断其对应的主字段所在的目标表是否已存在于处理顺序中。进而当判断到主字段所在的目标表已存在于处理顺序中,将当前的目标表添加入处理顺序中;否则,则继续遍历验证其他的目标表,直到所有目标表都加入到序列中。
如果对于对目标数据库的一次完整的遍历,没有一张目标表被加入处理顺序中,则表示此时步骤S103中所建立的目标字段关联关系存在循环依赖的情况,无法进行数据库的合并或升级,系统会提示用户重新设定目标字段关联关系。
目标数据库的目标表的处理顺序生成完毕之后,按照步骤S102中的源数据库和目标数据库之间的源表与目标表的对应关系,处理顺序中的每个目标表会对应源数据库中一张源表,则对于源数据库也将生成一组关于源表与对应的目标表合并的处理顺序,数据合并时源数据库和目标数据库会分别按照这两个处理顺序中源表和目标表的顺序进行合并。
步骤S105、设定源数据库中的源记录和目标数据库中的目标记录的重复判定标准,以及源记录和目标记录符合重复判定标准时的重复操作。
对于合并过程中遇到的重复记录,不应该被添加,否则将导致合并后的数据库过于冗余。该重复判定标准可以由用户来设定,一般用如名称、名字等这类字段是否相同来作为某两个记录是否重复的判定标准。重复判别标准的格式可为每个表名对应一个字符串数组,数组中每个字符串是这张表的某个字段名,判别时就比较源记录和目标记录中这些字段对应的值是否均相同。如果目标表中现存在一条目标记录,其所有判别标准字段对应的值都与来自源表的待添加的源记录相同,则判定该来资源表的待添加的源记录为重复记录。如果该目标表的字符串数组为空,则表示不对该目标表进行重复记录判别。
接下来设定源记录和目标记录符合重复判定标准时的重复操作,即在源记录与目标记录发生重复时,对待添加的源记录和目标记录的某些字段进行相应处理,例如加、减、乘、除等简单运算,并将处理后的结果值替换该目标记录对应字段的数据值。重复操作的格式为“表名,字段名,操作名”,其会作为一条记录存储在重复操作列表中。
接下来,即可执行以下步骤:
步骤S106、根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库。
最后,可得到符合用户需要的数据库。
进一步的,每个源数据库合并之前,要获取当前的目标数据库的最大主键值。获取方法为遍历当前的目标数据库的所有目标表的主键字段的值,找到其中最大的。然后按照目标表的处理顺序以及源表的处理顺序依次合并每张源表和目标表。对于不需要执行合并的源表,直接跳过;而对于直接拷贝的源表,直接复制整张源表到目标数据库。
在本发明实施例中,数据库升级/合并工作中对一条源记录和目标记录的具体合并都按照源表与目标表、源字段与目标字段的对应关系来获取源数据库中相应源表和源字段的数据,并添加到目标数据库对应目标表和目标字段中。当源表的源字段与目标表的目标字段的类型不匹配时,将按照目标数据库的目标字段的类型对源表的源字段进行转换。
具体的,根据所设定的处理顺序,依次获取目标数据库中的目标表及其对应的源表。进而,对于源表中的每一条源记录,都需根据重复判定标准,判断目标表中是否存在与对应的源表的源记录重复的目标记录,若有,将对该目标记录执行对应的重复操作。方法为先在重复操作列表中查找和该重复的目标记录所属的目标表相关的重复操作记录,找到后,按照该重复操作记录所示的字段名和操作名进行重复操作。字段名即需要操作的目标数据库的目标字段;操作名,比如加,则是将重复操作记录中需要操作的目标字段的值加上源记录中对应的源字段的值,并用重复操作结果替换现有的重复的目标记录中需要操作的字段的值。
对该目标记录执行对应的重复操作之后,源记录尚未添加到目标数据库中,但是这条源记录中可能有些源字段的值与当前目标数据库中对应目标字段的值并不相同,为了使得该源字段的值在合并后发生了变化,变为目标数据库对应目标字段中的值,同时为了使得与这些源字段有关联的其他源字段保持值的同步变更,就需要建立字段变更规则。在本发明实施例中,一条字段变更规则记录的具体格式为“表名,字段名,原值,新值”。
建立字段变更规则具体方法为:先判断重复操作记录所含的目标数据库的目标字段是否出现在目标数据库目标字段关联关系列表的主字段中,若判断到该源记录对应的目标记录中存在为主字段的目标字段,获取该目标字段的关联字段。由于目标字段关联关系相当于一个树形结构,主字段为父节点,关联字段为其子节点,目标字段关联关系记录相当于节点间的父子关系,一个主字段的所有关联字段即这个主字段结点的所有子节点,通过递归的方式,先寻找主字段的所有关联字段,然后对每个关联字段,继续将其看做主字段并寻找其所有的关联字段,直到无法找到为止。
对这些关联字段建立将该目标字段的值赋予其关联字段在源表中的对应源字段的字段变更规则。同时,对此次重复操作的源记录执行该字段变更规则,并添加入目标数据库中。
具体的,每一个关联字段对应一条字段变更规则记录,其中表名和字段名即这个关联字段的所属表及自己的名称,原值为此关联字段对应的主字段在待添加的源记录中所对应的源字段的数据值,新值为此关联字段对应的主字段在现有的目标记录中的目标字段的数据值。
另外,若未判断到该源记录对应的目标记录中存在为主字段的目标字段,则可直接将该源记录添加入目标数据库中。
进一步的,若根据重复判定标准,未判断到目标表中存在与对应的源表的源记录重复的目标记录,则首先变更该源记录的主键值。具体的,对于待插的源记录中对应到目标数据库中主键字段的源字段,需要将源记录的主键值加上目标数据库的最大主键值与一之和,以保证主键值不重复。
接下来,对于待插的源记录中其他源字段,判断该源记录中是否存在对应的目标字段为关联字段的源字段;若判断到该源记录中存在对应的目标字段为关联字段的源字段,判断该源字段是否存在对应的字段变更规则;若判断到该源字段存在对应的字段变更规则,获取并执行该源字段对应的字段变更规则,并将变更后的源记录添加入目标数据库中。
其中,执行字段变更规则的方法为,由字段变更规则中所给出的目标表和目标字段,根据源数据库和目标数据库间表与表、字段与字段的对应关系,得到此目标字段在待插的源记录中对应的源字段,并将目标记录中“新值”的内容替换待插的源记录中对应的源字段的值。
另外,若未判断到该源字段存在对应的字段变更规则,判断该源字段对应的目标字段是否存在源头主字段。判断该源字段对应的目标字段是否存在源头主字段的方法为先获取关联字段对应的主字段,然后再在目标字段关联关系列表的所有关联字段中寻找这个主字段,如果没有找到,则这个主字段即源头主字段,如果找到,则继续获取找到的这条目标记录的主字段,然后继续在目标目标字段关联关系列表的所有关联字段中寻找这个主字段,一直到无法找到为止。
接下来,若判断到该源字段对应的目标字段存在源头主字段,需要判断该源头主字段是否为主键;若判断到该源头主字段为主键,将该源字段加上目标数据库的最大主键值与一之和,并将变更后的源记录添加入目标数据库中。否则,若该源头主字段不是主键,则直接将该源记录添加入目标数据库中。
显然,本实施例所提供的方法可对主外键字段进行较好的处理,保证了字段值的同步变更;对其他有同步需求的字段,也实现了升级合并过程中的同步变更;在合并过程中遇到的重复记录,除了变更和跳过操作外,提供了更多的处理方式,增强了数据库升级合并方法的功能性、实用性。
以下,以一个具体实施场景来说明本发明提供的数据库的合并方法的具体工作流程:
在具体实施场景中,假定给出的数据库A和数据库B为同一个集团的下属两个子公司的员工信息数据库,分别如图2、图3所示。其中每个表的第一个字段都是主键,即数据库A的主键为“人员表.人员ID”、“职务表.职务ID”和“部门表.部门ID”,数据库B的主键为“职员表.编号”、“职务表.职务ID”和“部门表.部门ID”。
数据库A中的主外键关系有两个,分别为“部门表.部门ID-人员表.部门ID”,“职务表.职务ID-人员表.职务ID”;数据库B中的主外键关系有两个,分别为“部门表.部门ID-职员表.部门ID”,“职务表.职务ID-职员表.职务ID”。
现在将数据库A作为源数据库,数据库B作为目标数据库进行合并。首先设定源数据库与目标数据库中表与表、字段与字段的对应关系,本具体实施场景中的源表和目标表的对应关系设定为“人员表-职员表”、“职务表-职务表”以及“部门表-部门表”;对于每对源表和目标表,表中同名的字段自动赋予对应关系,对于非同名字段,在本具体实施场景中设定的对应关系为“人员表.人员ID-职员表.编号”和“人员表.人员名称-职员表.姓名”。
接下来,设定目标数据库目标字段关联关系,数据库B中已经存在的主外键会自动生成为目标字段关联关系,得到两条记录“部门表.部门ID-职员表.部门ID”和“职务表.职务ID-职员表.职务ID”。另外,在本具体实施场景中再添加一条对应关系“职务表.职务ID-职务表.上级职务ID”来确保之后合并数据时,“上级职务ID”也能随“职务ID”正确地进行值的同步变更。
之后,根据目标字段关联关系生成目标表的处理顺序。具体的,在本具体实施场景中,遍历数据库B的三张表,首先对于第一张“职员表”,验证其是否可以加入当前的处理顺序:在目标字段关联关系列表中查找这张“职员表”是否有目标字段作为关联字段,可以找到记录“部门表.部门ID-职员表.部门ID”,并且关联字段“部门表.部门ID”所在的表“部门表”不在处理顺序中,说明“职员表”目前不能放到当前的处理顺序中。接下来验证第二张“职务表”,在目标字段关联关系列表中查找这张“职务表”是否有目标字段作为关联字段,可以找到一条记录“职务表.职务ID-职务表.上级职务ID”,但是主字段所属表“职务表”是同一张表,说明“职务表”能放到当前的处理顺序中,将其添加到处理顺序中。接下来第三张“部门表”,在目标字段关联关系列表中查找这张表是否有目标字段作为关联字段,找不到记录,说明“部门表”能放到当前的处理顺序中,将其添加到序列中。此次遍历后,有两张表添加到了处理顺序中,还有一张未添加,进行下一次遍历。下一次遍历第一张“职员表”,在目标字段关联关系列表中可以找到两条记录“部门表.部门ID-职员表.部门ID”,“职务表.职务ID-职员表.职务ID”,但是这两条记录的主字段所在的表“部门表”,“职务表”已经在处理顺序中,说明“职员表”能放到当前的处理顺序中,将其添加到处理顺序中。至此处理顺序生成完毕,顺序依次为“职务表”、“部门表”和“职员表”,根据源表和目标表的对应关系,得到与之相对的数据库A的处理顺序依次为“职务表”、“部门表”和“人员表”。
接下来,设定数据库B每个目标表的重复判定标准及重复操作。对于“职员表”,重复判定标准为无,表示所有记录都进行合并。对于“职务表”重复判定标准为“职务名称”,表示“职务名称”相同的记录算重复记录。对于“部门表”重复判定标准为“部门名称”和“简称”,表示“部门名称”和“简称”都相同的记录算重复记录。
本具体实施场景中添加一条为“部门表,人数,加”的重复操作,表示目标数据库的“部门表”和此目标表在源数据库中的对应源表在合并时,如遇到重复的记录,则将目标数据库中重复记录的“人数”字段的值与此目标字段在待添加的源记录中对应的源字段的值相加,并赋给目标数据库中重复记录的“人数”字段。
接下来进行数据合并,先获取当前目标数据库的最大主键值,即遍历数据库B的所有表,取所有主键字段记录值中的最大值,得到值为5。然后按照处理顺序中的顺序依次进行表的合并,具体过程如下:
按照处理顺序的顺序,先合并“职务表”,依次遍历数据库A的每条记录,对于第一条记录“0,,总裁”,在目标数据库B中按重复判定标准“职务名称”进行判定,发现数据库B中已经存在重复记录“1,,总裁”,判定为重复,执行重复操作,重复操作中无此表的相关记录,即无重复操作,接下来查找记录所含的各个目标数据库的目标字段是否出现在目标字段关联关系的主字段中,发现“职务表.职务ID”作为主字段存在于目标字段关联关系中,获取“职务表.职务ID”的所有关联字段,得到两个结果“职员表.职务ID”和“职务表.上级职务ID”。对于第一个结果,生成字段变更规则记录为“职员表.职务ID,0,1”,表示合并时所有值为0的“职员表.职务ID”字段都变为1,即保证了“职员表”中“职务ID”字段的同步变更。对于第二个结果,生成字段变更规则记录为“职务表.上级职务ID,0,1”,表示合并时所有值为0的“职务表.上级职务ID”字段都变为1,即保证了“职务表”中“上级职务ID”字段的同步变更。
对于第二条记录“1,0,副总裁”,在目标数据库B中按重复判定标准“职务名称”进行判定,找不到重复记录,则将这条记录先经过主键值变更,再添加到目标表中。主键值变更的方法为,对于主键字段“职务ID”,需要将主键值加上之前记录的目标数据库最大主键值再加1,即加6,得到7。进一步的,对于其他字段,如“上级职务ID”,查找其是否出现在目标字段关联关系的关联字段中,找到一条记录“职务表.职务ID-职务表.上级职务ID”,则继续查找字段变更规则中是否有相应的记录,找到一条记录“职务表.上级职务ID,0,1”满足条件,即字段相同均为“职务表.上级职务ID”,且原值与待插入的源记录的对应字段值相同,均为0,将待插入的源记录的“上级职务ID”的值替换为字段变更规则中的新值1;对于“职务名称”字段,查找其是否出现在目标字段关联关系的关联字段中,未找到记录,不作更改。最终的待插入的源记录变为“7,1,副总裁”。将其插入到目标数据库中。
对于第三至第五条记录,处理方法与第一条记录相同,它们生成的字段变更规则记录分别为“职员表.职务ID,2,3”,“职务表.上级职务ID,2,3”,“职员表.职务ID,3,4”,“职务表.上级职务ID,3,4”,“职员表.职务ID,4,5”,“职务表.上级职务ID,4,5”。
接下来合并“部门表”,与“职务表”合并方法相似,不同的是有一个重复操作涉及到此表,即“部门表,人数,加”,如第一条记录“0,财务管理部,财务,50”,先判断是否与数据库B中有重复记录,“部门表”的重复判定标准为“部门名称”和“简称”,即这两个字段都相同才算重复记录,可以在数据库B中找到“1,财务管理部,财务,60”满足条件,为重复记录,此时执行重复操作,“部门表,人数,加”,即将数据库B中重复记录对应的“人数”字段的值60和待添加记录中“人数”字段的值50相加,得到110,并替换现有记录中“人数”字段的值60。之后的操作和上面“职务表”相似,具体过程为查找重复记录所含的各个目标数据库的目标字段是否出现在目标字段关联关系的主字段中,发现“部门表.部门ID”作为主字段出现在目标字段关联关系记录中,获取“部门表.部门ID”的所有关联字段,得到一个结果“职员表.部门ID”,生成字段变更规则记录为“职员表.部门ID,0,1”,表示合并时所有值为0的“职员表.部门ID”字段都变为1,即保证了“职员表”中“部门ID”字段的同步变更。
对“部门表”的第二条记录,处理方式与第一条相同,都是有重复记录,其生成的字段变更规则记录为“职员表.部门ID,1,2”。
对于“部门表”的第三条记录“2,产品销售部,销售,200”,在数据库B中找不到重复记录,将这条记录先经过数据值变更,再添加到目标表中,数据值变更的方法为,对于主键字段“部门ID”,需要将数据值加上之前记录的目标数据库最大主键值再加1,即加6,得到8;对于其他字段,在目标字段关联关系中查找其是否出现在目标字段关联关系的关联字段中,没有找到相应记录,字段的数据不作更改,最终的插入记录为“8,产品销售部,销售,200”。将其插入到目标数据库中。
最后合并“人员表”及“职员表”,重复判定标准为无,所有源记录和目标都会合并起来,对于每条源记录,如第一条源记录“0,张三,0,4”,将这条源记录先经过数据值变更,再添加到目标表中,数据值变更的方法为,对于主键字段“编号”,需要将数据值加上之前目标记录的目标数据库最大主键值再加1,即加6,得到6;对于其他字段,在目标字段关联关系中查找其是否出现在目标字段关联关系的关联字段中,如对“部门ID”找到一条记录“部门表.部门ID-职员表.部门ID”,则查找字段变更规则中是否有“职员表.部门ID”相应的记录,找到记录“职员表.部门ID,0,1”,满足条件,即字段相同均为“职员表.部门ID”且字段变更规则记录中的原值为0,与待插入的源记录中“部门ID”的值0相同,则将待插入的源记录的“部门ID”的值替换为变更规则记录中的新值1;接下来对待插入的源记录中的其他字段执行同样操作,如“职务ID”也找到一条记录“职务表.职务ID-职员表.职务ID”,并且在变更规则中也能找到相应记录“职员表.职务ID,4,5”,将待插入的源记录的“职务ID”的值替换为变更规则中的新值5。最终的待插入的源记录变为“6,张三,1,5”。将其插入到目标数据库中。
对于“人员表”中的第二和第三条记录,处理方式与第一条相同。生成的插入记录分别为“7,李四,2,4”和“8,王五,2,3”,将其插入到目标数据库中。
对于“人员表”中的第四条记录“3,周六,1,1”,与前几条不同的是对于“职务ID”的字段值1,虽然能在目标字段关联关系的关联字段中找到相应记录“职务表.职务ID-职员表.职务ID”,但是接下来字段变更规则中却没有找到相应记录,则寻找此关联字段“职员表.职务ID”的源头主字段。具体方法为,先获取关联字段“职员表.职务ID”对应的主字段“职务表.职务ID”,然后再在所有关联字段中寻找这个主字段“职务表.职务ID”,未找到结果,说明“职务表.职务ID”即“职员表.职务ID”的源头主字段。源头主字段“职务表.职务ID”是主键类型,则将待插入“职员表.职务ID”的数据值1加上目标数据库最大主键值5再加1,得到7,最终的待插入的源记录变为“9,周六,2,7”。将其插入到目标数据库中。
至此,数据库合并工作完成,得到的合并后数据库如图4所示,所有数据都经过了合理的变更并正确地合并到了一起。
综上,本发明实施例提供了一种数据库的合并方法,该数据库的合并方法中设定了源数据库的源表和目标数据库的目标表的对应关系、源数据库的源字段和目标数据库的目标字段的对应关系,另外还设定了目标表与对应的源表合并的处理顺序、源记录和目标数据库中的目标记录的重复判定标准,以及源记录和目标记录符合重复判定标准时的重复操作,使得合并后的数据库较为准确、合理,为一种灵活性更强、功能更为完善的数据库合并方法。
虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (8)
1.一种数据库的合并方法,其特征在于,包括:
获取源数据库和目标数据库;
设定源数据库的源表和目标数据库的目标表的对应关系、源数据库的源字段和目标数据库的目标字段的对应关系;
设定目标数据库内的目标字段关联关系,目标字段关联关系包括主字段和与该主字段关联的关联字段;
根据目标字段关联关系,设定目标表与对应的源表合并的处理顺序;
设定源数据库中的源记录和目标数据库中的目标记录的重复判定标准,以及源记录和目标记录符合重复判定标准时的重复操作;
根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库。
2.根据权利要求1所述的方法,其特征在于,根据目标字段关联关系,设定目标表与对应的源表合并的处理顺序,包括:
根据目标字段关联关系,判断当前的目标表中是否存在作为关联字段的目标字段;
在当前的目标表中不存在作为关联字段的目标字段时,将当前的目标表添加入处理顺序中;
在当前的目标表中存在作为关联字段的目标字段时,判断该关联字段对应的主字段所在的目标表是否已存在于处理顺序中,其中:
当该关联字段对应的主字段所在的目标表已存在于处理顺序中时,将当前的目标表添加入处理顺序中。
3.根据权利要求2所述的方法,其特征在于,根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库之前,还包括:
获取目标数据库的最大主键值。
4.根据权利要求3所述的方法,其特征在于,根据所设定的处理顺序、重复判定标准及重复操作,合并源数据库和目标数据库包括:
根据所设定的处理顺序,获取目标表及其对应的源表;
若根据重复判定标准,判断到目标表中存在与对应的源表的源记录重复的目标记录,对该目标记录执行对应的重复操作;
若根据重复判定标准,未判断到目标表中存在与对应的源表的源记录重复的目标记录,变更源记录的主键值。
5.根据权利要求4所述的方法,其特征在于,对该目标记录执行对应的重复操作之后,还包括:
若判断到该源记录对应的目标记录中存在为主字段的目标字段,获取该目标字段的关联字段;
建立将该目标字段的值赋予其关联字段在源表中的对应源字段的字段变更规则;
对该源记录执行该字段变更规则,并添加入目标数据库中。
6.根据权利要求5所述的方法,其特征在于,变更源记录的主键值包括:
将源记录的主键值加上目标数据库的最大主键值与一之和。
7.根据权利要求6所述的方法,其特征在于,变更源记录的主键值之后,还包括:
判断该源记录中是否存在对应的目标字段为关联字段的源字段;
若判断到该源记录中存在对应的目标字段为关联字段的源字段,判断该源字段是否存在对应的字段变更规则;
若判断到该源字段存在对应的字段变更规则,获取并执行该源字段对应的字段变更规则,并将变更后的源记录添加入目标数据库中。
8.根据权利要求6所述的方法,其特征在于,变更源记录的主键值之后,还包括:
判断该源记录中是否存在对应的目标字段为关联字段的源字段;
若判断到该源记录中存在对应的目标字段为关联字段的源字段,判断该源字段是否存在对应的字段变更规则;
若未判断到该源字段存在对应的字段变更规则,判断该源字段对应的目标字段是否存在源头主字段;
若判断到该源字段对应的目标字段存在源头主字段,判断该源头主字段是否为主键;
若判断到该源头主字段为主键,将该源字段的数据值加上目标数据库的最大主键值与一之和,并将变更后的源记录添加入目标数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510111315.8A CN106033436B (zh) | 2015-03-13 | 2015-03-13 | 一种数据库的合并方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510111315.8A CN106033436B (zh) | 2015-03-13 | 2015-03-13 | 一种数据库的合并方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106033436A CN106033436A (zh) | 2016-10-19 |
CN106033436B true CN106033436B (zh) | 2020-05-22 |
Family
ID=57150574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510111315.8A Active CN106033436B (zh) | 2015-03-13 | 2015-03-13 | 一种数据库的合并方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106033436B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107122476A (zh) * | 2017-05-02 | 2017-09-01 | 山东浪潮通软信息科技有限公司 | 一种网络隔离模式下公有数据的处理方法和装置 |
US10936563B2 (en) * | 2017-06-23 | 2021-03-02 | Yokogawa Electric Corporation | System and method for merging a source data from a source application into a target data of a target application |
CN107391607B (zh) * | 2017-06-30 | 2023-06-23 | 北京拉近众博科技有限公司 | 一种协同变更关联数据项的方法及装置 |
CN107632972B (zh) * | 2017-08-31 | 2021-02-09 | 北京秒针人工智能科技有限公司 | 表单处理方法和装置 |
CN108733793B (zh) * | 2018-05-14 | 2019-12-10 | 北京大学 | 一种面向关系数据库的本体模型构造方法及系统 |
CN108833298B (zh) * | 2018-05-29 | 2022-07-05 | 中国建设银行股份有限公司 | 报文分组发送方法、装置以及存储介质 |
US11120025B2 (en) * | 2018-06-16 | 2021-09-14 | Hexagon Technology Center Gmbh | System and method for comparing and selectively merging database records |
CN109299098B (zh) * | 2018-09-29 | 2022-04-12 | 北京理工大学 | 一种多个多层表头的表格在数据库中的存储及其访问方法 |
CN111198910B (zh) * | 2018-11-16 | 2023-09-26 | 杭州海康威视数字技术股份有限公司 | 数据融合方法及装置 |
CN109739855B (zh) * | 2018-12-28 | 2022-03-01 | 第四范式(北京)技术有限公司 | 实现数据表拼接及自动训练机器学习模型的方法和系统 |
CN109697066B (zh) * | 2018-12-28 | 2021-02-05 | 第四范式(北京)技术有限公司 | 实现数据表拼接及自动训练机器学习模型的方法和系统 |
CN109902078B (zh) * | 2019-01-10 | 2021-01-26 | 杭州迪普科技股份有限公司 | 数据库升级兼容的方法、装置、设备及存储介质 |
CN110502519B (zh) * | 2019-08-26 | 2022-04-29 | 北京启迪区块链科技发展有限公司 | 一种数据聚合的方法、装置、设备及存储介质 |
CN110955661B (zh) * | 2019-11-29 | 2023-03-21 | 北京明略软件系统有限公司 | 数据融合方法、装置、可读存储介质及电子设备 |
CN111639091B (zh) * | 2020-06-04 | 2023-09-19 | 山东汇贸电子口岸有限公司 | 一种基于并表的多表合并方法 |
CN112612839A (zh) * | 2020-12-28 | 2021-04-06 | 中国农业银行股份有限公司 | 一种数据处理方法及装置 |
CN112783873B (zh) * | 2021-03-25 | 2022-03-18 | 四川省林业和草原调查规划院 | 一对多关系下森林资源空间数据管理方法、装置及设备 |
CN113377772A (zh) * | 2021-06-08 | 2021-09-10 | 中国农业银行股份有限公司 | 数据处理方法、装置、设备、介质及程序产品 |
CN113779132A (zh) * | 2021-09-15 | 2021-12-10 | 深圳我家云网络科技有限公司 | 一种数据导入的方法、装置、计算机设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176989A (zh) * | 2011-12-21 | 2013-06-26 | 中国银联股份有限公司 | 基于数据字典和可变规则的数据库表级比较方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130110907A1 (en) * | 2011-11-02 | 2013-05-02 | Xerox Corporation | Method and system for merging, correcting, and validating data |
-
2015
- 2015-03-13 CN CN201510111315.8A patent/CN106033436B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176989A (zh) * | 2011-12-21 | 2013-06-26 | 中国银联股份有限公司 | 基于数据字典和可变规则的数据库表级比较方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106033436A (zh) | 2016-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106033436B (zh) | 一种数据库的合并方法 | |
US8892504B2 (en) | Method and system for reconciling meta-data in a data warehouse | |
US6502239B2 (en) | Method and apparatus for round-trip software engineering | |
US7165078B2 (en) | Collaborative data cleansing | |
US11593336B2 (en) | Data pipeline branching | |
CN111401029B (zh) | 一种基于文档分区和协同编辑的文档版本更新系统和方法 | |
WO2018145559A1 (zh) | 持续集成流水线的生成方法和系统 | |
US8677376B2 (en) | Expressing equivalency relationships with identity graphs across multiple environments to create change list to be traversed to conform the environments | |
CN110134663B (zh) | 组织结构数据处理方法、装置、电子设备 | |
CN111428095B (zh) | 图数据质量验证方法及图数据质量验证装置 | |
CN110990055B (zh) | 一种基于程序分析的Pull Request功能分类方法 | |
Mitsyuk et al. | Process model repair by detecting unfitting fragments? | |
CN115687503A (zh) | 数据库间的数据同步方法、装置、设备及存储介质 | |
CN112256637A (zh) | 一种基于抽象语法树的文件管理方法、装置及存储介质 | |
CN116303516A (zh) | 一种更新知识图谱的方法、装置及相关设备 | |
CN115905353A (zh) | 关联数据导出、导入方法、装置、设备及存储介质 | |
CN112256978B (zh) | 一种基于数据模型的数据处理方法、装置、介质 | |
CN115168085A (zh) | 一种基于diff代码块匹配的重复冲突方案检测方法 | |
CN113204811A (zh) | 一种关联或追溯bim模型修改前后信息的方法 | |
RU2553054C2 (ru) | Способ и система для распространения изменений, произведенных в оригинале, на копии | |
CN104881455A (zh) | 一种基于mysql的结构差异处理方法及系统 | |
CN108804134A (zh) | 基于产品特征的软件版本管理方法、装置、系统及介质 | |
CN113010230B (zh) | 配置信息处理方法、装置、设备及存储介质 | |
CN109492051B (zh) | 一种管网数据同步方法和装置 | |
CN116739397B (zh) | 一种新能源指标的动态管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |