一種數(shù)據(jù)庫的合并方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)庫的合并方法,屬于數(shù)據(jù)庫技術(shù)領(lǐng)域,為一種靈活性更強(qiáng)、功能更為完善的數(shù)據(jù)庫合并方法。該方法包括:獲取源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫;設(shè)定源數(shù)據(jù)庫的源表和目標(biāo)數(shù)據(jù)庫的目標(biāo)表的對應(yīng)關(guān)系、源數(shù)據(jù)庫的源字段和目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的對應(yīng)關(guān)系;設(shè)定目標(biāo)數(shù)據(jù)庫內(nèi)的目標(biāo)字段關(guān)聯(lián)關(guān)系,目標(biāo)字段關(guān)聯(lián)關(guān)系包括主字段和與該主字段關(guān)聯(lián)的關(guān)聯(lián)字段;根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,設(shè)定目標(biāo)表與對應(yīng)的源表合并的處理順序;設(shè)定源數(shù)據(jù)庫中的源記錄和目標(biāo)數(shù)據(jù)庫中的目標(biāo)記錄的重復(fù)判定標(biāo)準(zhǔn),以及源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作;根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫。
【專利說明】
一種數(shù)據(jù)庫的合并方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,具體地說,涉及一種數(shù)據(jù)庫的合并方法。
【背景技術(shù)】
[0002]數(shù)據(jù)庫作為信息和數(shù)據(jù)的載體,對企業(yè)具有重要的價值和意義,在某些行業(yè),企業(yè)的價值甚至取決于其所擁有的數(shù)據(jù)庫。對于大型企業(yè),一般會有許多下屬分公司,為便于統(tǒng)一管理,分公司間所采用的數(shù)據(jù)庫結(jié)構(gòu)是相同或相近的。而分公司之間的數(shù)據(jù)庫又往往相互獨立,當(dāng)總部希望統(tǒng)一更改數(shù)據(jù)庫結(jié)構(gòu)或者匯總所有子公司的信息時,便會涉及到數(shù)據(jù)庫升級與數(shù)據(jù)庫合并工作。
[0003]現(xiàn)有的數(shù)據(jù)庫合并技術(shù)操作流程一般為,首先確定源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫,然后確定源表和目標(biāo)表、源字段和目標(biāo)字段的對應(yīng)關(guān)系,由用戶指定或系統(tǒng)根據(jù)表間依賴關(guān)系決定表的先后處理順序,接下來合并具體數(shù)據(jù)。微軟的SSIS(SQL Server Integrat1nServices)提供了較為靈活的數(shù)據(jù)合并功能,可支持不同數(shù)據(jù)庫類型的數(shù)據(jù)合并,并且可由用戶靈活設(shè)定源字段與目標(biāo)字段間的對應(yīng)關(guān)系。
[0004]現(xiàn)有技術(shù)中的大多數(shù)據(jù)庫合并技術(shù)并沒有對主外鍵字段進(jìn)行較好的處理。當(dāng)合并過程中遇到主鍵值需要變更時,與該主鍵值相關(guān)聯(lián)的外鍵值也應(yīng)該保持同步變更,以保證主外鍵之間的正確關(guān)聯(lián)。另外,有些字段之間雖然沒有主外鍵關(guān)系,但是也有保持同步的需求,即當(dāng)一個數(shù)據(jù)變化時、另一個數(shù)據(jù)也要同步變化以保持一致,現(xiàn)有的數(shù)據(jù)庫合并技術(shù)沒有處理這個需求。在合并過程中,有時會遇到重復(fù)記錄,現(xiàn)有的數(shù)據(jù)庫合并技術(shù)采用了變更這條記錄或者不合并這條記錄的方法,但是某些情況下,這兩種處理均不合理,而應(yīng)該將重復(fù)記錄與現(xiàn)有記錄融合。
[0005]因此,針對上述問題,需要一種靈活性更強(qiáng),功能更為完善的數(shù)據(jù)庫合并技術(shù)。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供一種數(shù)據(jù)庫的合并方法,為一種靈活性更強(qiáng)、功能更為完善的數(shù)據(jù)庫合并方法。
[0007]本發(fā)明提供了一種數(shù)據(jù)庫的合并方法,該方法包括:
[0008]獲取源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫;
[0009]設(shè)定源數(shù)據(jù)庫的源表和目標(biāo)數(shù)據(jù)庫的目標(biāo)表的對應(yīng)關(guān)系、源數(shù)據(jù)庫的源字段和目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的對應(yīng)關(guān)系;
[0010]設(shè)定目標(biāo)數(shù)據(jù)庫內(nèi)的目標(biāo)字段關(guān)聯(lián)關(guān)系,目標(biāo)字段關(guān)聯(lián)關(guān)系包括主字段和與該主字段關(guān)聯(lián)的關(guān)聯(lián)字段;
[0011]根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,設(shè)定目標(biāo)表與對應(yīng)的源表合并的處理順序;
[0012]設(shè)定源數(shù)據(jù)庫中的源記錄和目標(biāo)數(shù)據(jù)庫中的目標(biāo)記錄的重復(fù)判定標(biāo)準(zhǔn),以及源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作;
[0013]根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫。
[0014]其中,根據(jù)目標(biāo)目標(biāo)字段關(guān)聯(lián)關(guān)系,設(shè)定源表和目標(biāo)表的處理順序包括:
[0015]根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,判斷當(dāng)前的目標(biāo)表中是否存在作為關(guān)聯(lián)字段的目標(biāo)字段;
[0016]當(dāng)判斷到存在作為關(guān)聯(lián)字段的目標(biāo)字段,判斷其對應(yīng)的主字段所在的目標(biāo)表是否已存在于處理順序中;
[0017]當(dāng)判斷到主字段所在的目標(biāo)表已存在于處理順序中,將當(dāng)前的目標(biāo)表添加入處理順序中;
[0018]或當(dāng)未判斷到存在作為關(guān)聯(lián)字段的目標(biāo)字段,將當(dāng)前的目標(biāo)表添加入處理順序中。
[0019]其中,根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之前,還包括:
[0020]獲取目標(biāo)數(shù)據(jù)庫的最大主鍵值。
[0021]其中,根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫包括:
[0022]根據(jù)所設(shè)定的處理順序,獲取目標(biāo)表及其對應(yīng)的源表;
[0023]若根據(jù)重復(fù)判定標(biāo)準(zhǔn),判斷到目標(biāo)表中存在與對應(yīng)的源表的源記錄重復(fù)的目標(biāo)記錄,對該目標(biāo)記錄執(zhí)行對應(yīng)的重復(fù)操作;
[0024]若根據(jù)重復(fù)判定標(biāo)準(zhǔn),未判斷到目標(biāo)表中存在與對應(yīng)的源表的源記錄重復(fù)的目標(biāo)記錄,變更源記錄的主鍵值。
[0025]其中,對該源記錄執(zhí)行對應(yīng)的重復(fù)操作之后,還包括:
[0026]若判斷到該源記錄對應(yīng)的目標(biāo)記錄中存在為主字段的目標(biāo)字段,獲取該目標(biāo)字段的關(guān)聯(lián)字段;
[0027]建立將該目標(biāo)字段的值賦予其關(guān)聯(lián)字段在源表中的對應(yīng)源字段的字段變更規(guī)則;
[0028]對該源記錄執(zhí)行該字段變更規(guī)則,并添加入目標(biāo)數(shù)據(jù)庫中。
[0029]其中,變更源記錄的主鍵值包括:
[0030]將源記錄的主鍵值加上目標(biāo)數(shù)據(jù)庫的最大主鍵值與一之和。
[0031]其中,變更源記錄的主鍵值之后,還包括:
[0032]判斷該源記錄中是否存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段;
[0033]若判斷到該源記錄中存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段,判斷該源字段是否存在對應(yīng)的字段變更規(guī)則;
[0034]若判斷到該源字段存在對應(yīng)的字段變更規(guī)則,獲取并執(zhí)行該源字段對應(yīng)的字段變更規(guī)則,并將變更后的源記錄添加入目標(biāo)數(shù)據(jù)庫中。
[0035]其中,變更源記錄的主鍵值之后,還包括:
[0036]判斷該源記錄中是否存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段;
[0037]若判斷到該源記錄中存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段,判斷該源字段是否存在對應(yīng)的字段變更規(guī)則;
[0038]若未判斷到該源字段存在對應(yīng)的字段變更規(guī)則,判斷該源字段對應(yīng)的目標(biāo)字段是否存在源頭主字段;
[0039]若判斷到該源字段對應(yīng)的目標(biāo)字段存在源頭主字段,判斷該源頭主字段是否為主鍵;
[0040]若判斷到該源頭主字段為主鍵,將該源字段加上目標(biāo)數(shù)據(jù)庫的最大主鍵值與一之和,并將變更后的源記錄添加入目標(biāo)數(shù)據(jù)庫中。
[0041]本發(fā)明帶來了以下有益效果:本發(fā)明實施例提供了一種數(shù)據(jù)庫的合并方法,該數(shù)據(jù)庫的合并方法中設(shè)定了源數(shù)據(jù)庫的源表和目標(biāo)數(shù)據(jù)庫的目標(biāo)表的對應(yīng)關(guān)系、源數(shù)據(jù)庫的源字段和目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的對應(yīng)關(guān)系,另外還設(shè)定了目標(biāo)表與對應(yīng)的源表合并的處理順序、源記錄和目標(biāo)數(shù)據(jù)庫中的目標(biāo)記錄的重復(fù)判定標(biāo)準(zhǔn),以及源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作,使得合并后的數(shù)據(jù)庫較為準(zhǔn)確、合理,為一種靈活性更強(qiáng)、功能更為完善的數(shù)據(jù)庫合并方法。
[0042]本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
【附圖說明】
[0043]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要的附圖做簡單的介紹:
[0044]圖1是本發(fā)明實施例中的數(shù)據(jù)庫的合并方法的流程示意圖;
[0045]圖2是本發(fā)明實施例中的數(shù)據(jù)庫A的示意圖;
[0046]圖3是本發(fā)明實施例中的數(shù)據(jù)庫B的示意圖;
[0047]圖4是本發(fā)明實施例中的數(shù)據(jù)庫A和數(shù)據(jù)庫B合并后得到的數(shù)據(jù)庫的示意圖。
【具體實施方式】
[0048]以下將結(jié)合附圖及實施例來詳細(xì)說明本發(fā)明的實施方式,借此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實現(xiàn)過程能充分理解并據(jù)以實施。需要說明的是,只要不構(gòu)成沖突,本發(fā)明中的各個實施例以及各實施例中的各個特征可以相互結(jié)合,所形成的技術(shù)方案均在本發(fā)明的保護(hù)范圍之內(nèi)。
[0049]本發(fā)明實施例提供了一種數(shù)據(jù)庫的合并方法,如圖1所示,該方法包括:
[0050]步驟S101、獲取源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫。
[0051]在合并數(shù)據(jù)庫時,源數(shù)據(jù)庫為用戶選擇的一個或多個待合并的數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫可以是一個未創(chuàng)建的數(shù)據(jù)庫,也可以是一個已經(jīng)創(chuàng)建好的數(shù)據(jù)庫。對于數(shù)據(jù)庫合并中目標(biāo)數(shù)據(jù)庫未創(chuàng)建的情況,用戶需要指定數(shù)據(jù)庫生成腳本文件,以用于創(chuàng)建目標(biāo)數(shù)據(jù)庫。
[0052]另外,本發(fā)明實施例提供的方法同樣適用于數(shù)據(jù)庫的升級,因為升級和合并操作在數(shù)據(jù)導(dǎo)入層面是相同的,都是將數(shù)據(jù)從源數(shù)據(jù)庫合并到新數(shù)據(jù)庫。對于升級數(shù)據(jù)庫,源數(shù)據(jù)庫為用戶所指定的待升級的老數(shù)據(jù)庫,用戶不需要選擇目標(biāo)數(shù)據(jù)庫,系統(tǒng)將會基于用戶選定的腳本文件建立一個臨時數(shù)據(jù)庫作為目標(biāo)數(shù)據(jù)庫,在數(shù)據(jù)導(dǎo)入完成后替換源數(shù)據(jù)庫,實現(xiàn)數(shù)據(jù)庫的升級操作。
[0053]源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的類型可以不相同,每條數(shù)據(jù)記錄的合并都可通過結(jié)構(gòu)化查詢語言(Structured Query Language,簡稱SQL)語句來執(zhí)行。
[0054]步驟S102、設(shè)定源數(shù)據(jù)庫的源表和目標(biāo)數(shù)據(jù)庫的目標(biāo)表的對應(yīng)關(guān)系、源數(shù)據(jù)庫的源字段和目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的對應(yīng)關(guān)系
[0055]系統(tǒng)將根據(jù)預(yù)先設(shè)定的規(guī)則,設(shè)定源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之間表與表,字段與字段的對應(yīng)關(guān)系,基于這些對應(yīng)關(guān)系來進(jìn)行數(shù)據(jù)記錄的合并。
[0056]系統(tǒng)根據(jù)初始默認(rèn)規(guī)則建立的對應(yīng)關(guān)系為同名表之間相對應(yīng)、兩個表之間同名的字段相對應(yīng);用戶可以手動更改這些建立對應(yīng)關(guān)系的規(guī)則,建立符合用戶實際需要的新的規(guī)則。源數(shù)據(jù)庫中的數(shù)據(jù)記錄會按照這些對應(yīng)關(guān)系,添加到目標(biāo)數(shù)據(jù)庫的對應(yīng)表的對應(yīng)字段中去。另外可以設(shè)定某些表不進(jìn)行對應(yīng)或直接拷貝,在合并數(shù)據(jù)時不進(jìn)行數(shù)據(jù)合并或者直接復(fù)制整張表。
[0057]步驟S103、設(shè)定目標(biāo)數(shù)據(jù)庫內(nèi)的目標(biāo)字段關(guān)聯(lián)關(guān)系,字段的關(guān)聯(lián)關(guān)系包括主字段和與該主字段關(guān)聯(lián)的關(guān)聯(lián)字段。
[0058]其中,目標(biāo)字段關(guān)聯(lián)關(guān)系的形式為“主字段-關(guān)聯(lián)字段”,并作為一條記錄存儲到目標(biāo)字段關(guān)聯(lián)關(guān)系列表中。初始默認(rèn)的目標(biāo)字段關(guān)聯(lián)關(guān)系為從目標(biāo)數(shù)據(jù)庫提取的所有目標(biāo)字段間的主外鍵關(guān)系,即主鍵作為主字段,外鍵作為關(guān)聯(lián)字段,存儲到目標(biāo)字段關(guān)聯(lián)關(guān)系列表中。用戶可繼續(xù)添加目標(biāo)字段關(guān)聯(lián)關(guān)系,但需注意的是,為了保證源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫可以順利合并,目標(biāo)字段中的主鍵不能作為目標(biāo)字段關(guān)聯(lián)關(guān)系中的關(guān)聯(lián)字段。設(shè)定了關(guān)聯(lián)關(guān)系的目標(biāo)字段在之后的數(shù)據(jù)庫的合并過程中將會一直保持?jǐn)?shù)據(jù)值的同步。
[0059]步驟S104、根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,設(shè)定目標(biāo)表與對應(yīng)的源表合并的處理順序。
[0060]遍歷目標(biāo)數(shù)據(jù)庫的所有目標(biāo)表,對于每張目標(biāo)表,驗證其是否可以加入當(dāng)前的處理順序的方法為:根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,判斷當(dāng)前的目標(biāo)表中是否存在作為關(guān)聯(lián)字段的目標(biāo)字段。如果沒有,則將當(dāng)前的這張目標(biāo)表添加入處理順序中;否則,當(dāng)判斷到存在作為關(guān)聯(lián)字段的目標(biāo)字段,判斷其對應(yīng)的主字段所在的目標(biāo)表是否已存在于處理順序中。進(jìn)而當(dāng)判斷到主字段所在的目標(biāo)表已存在于處理順序中,將當(dāng)前的目標(biāo)表添加入處理順序中;否則,則繼續(xù)遍歷驗證其他的目標(biāo)表,直到所有目標(biāo)表都加入到序列中。
[0061]如果對于對目標(biāo)數(shù)據(jù)庫的一次完整的遍歷,沒有一張目標(biāo)表被加入處理順序中,則表示此時步驟S103中所建立的目標(biāo)字段關(guān)聯(lián)關(guān)系存在循環(huán)依賴的情況,無法進(jìn)行數(shù)據(jù)庫的合并或升級,系統(tǒng)會提示用戶重新設(shè)定目標(biāo)字段關(guān)聯(lián)關(guān)系。
[0062]目標(biāo)數(shù)據(jù)庫的目標(biāo)表的處理順序生成完畢之后,按照步驟S102中的源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之間的源表與目標(biāo)表的對應(yīng)關(guān)系,處理順序中的每個目標(biāo)表會對應(yīng)源數(shù)據(jù)庫中一張源表,則對于源數(shù)據(jù)庫也將生成一組關(guān)于源表與對應(yīng)的目標(biāo)表合并的處理順序,數(shù)據(jù)合并時源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫會分別按照這兩個處理順序中源表和目標(biāo)表的順序進(jìn)行合并。
[0063]步驟S105、設(shè)定源數(shù)據(jù)庫中的源記錄和目標(biāo)數(shù)據(jù)庫中的目標(biāo)記錄的重復(fù)判定標(biāo)準(zhǔn),以及源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作。
[0064]對于合并過程中遇到的重復(fù)記錄,不應(yīng)該被添加,否則將導(dǎo)致合并后的數(shù)據(jù)庫過于冗余。該重復(fù)判定標(biāo)準(zhǔn)可以由用戶來設(shè)定,一般用如名稱、名字等這類字段是否相同來作為某兩個記錄是否重復(fù)的判定標(biāo)準(zhǔn)。重復(fù)判別標(biāo)準(zhǔn)的格式可為每個表名對應(yīng)一個字符串?dāng)?shù)組,數(shù)組中每個字符串是這張表的某個字段名,判別時就比較源記錄和目標(biāo)記錄中這些字段對應(yīng)的值是否均相同。如果目標(biāo)表中現(xiàn)存在一條目標(biāo)記錄,其所有判別標(biāo)準(zhǔn)字段對應(yīng)的值都與來自源表的待添加的源記錄相同,則判定該來資源表的待添加的源記錄為重復(fù)記錄。如果該目標(biāo)表的字符串?dāng)?shù)組為空,則表示不對該目標(biāo)表進(jìn)行重復(fù)記錄判別。
[0065]接下來設(shè)定源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作,即在源記錄與目標(biāo)記錄發(fā)生重復(fù)時,對待添加的源記錄和目標(biāo)記錄的某些字段進(jìn)行相應(yīng)處理,例如加、減、乘、除等簡單運(yùn)算,并將處理后的結(jié)果值替換該目標(biāo)記錄對應(yīng)字段的數(shù)據(jù)值。重復(fù)操作的格式為“表名,字段名,操作名”,其會作為一條記錄存儲在重復(fù)操作列表中。
[0066]接下來,即可執(zhí)行以下步驟:
[0067]步驟S106、根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫。
[0068]最后,可得到符合用戶需要的數(shù)據(jù)庫。
[0069]進(jìn)一步的,每個源數(shù)據(jù)庫合并之前,要獲取當(dāng)前的目標(biāo)數(shù)據(jù)庫的最大主鍵值。獲取方法為遍歷當(dāng)前的目標(biāo)數(shù)據(jù)庫的所有目標(biāo)表的主鍵字段的值,找到其中最大的。然后按照目標(biāo)表的處理順序以及源表的處理順序依次合并每張源表和目標(biāo)表。對于不需要執(zhí)行合并的源表,直接跳過;而對于直接拷貝的源表,直接復(fù)制整張源表到目標(biāo)數(shù)據(jù)庫。
[0070]在本發(fā)明實施例中,數(shù)據(jù)庫升級/合并工作中對一條源記錄和目標(biāo)記錄的具體合并都按照源表與目標(biāo)表、源字段與目標(biāo)字段的對應(yīng)關(guān)系來獲取源數(shù)據(jù)庫中相應(yīng)源表和源字段的數(shù)據(jù),并添加到目標(biāo)數(shù)據(jù)庫對應(yīng)目標(biāo)表和目標(biāo)字段中。當(dāng)源表的源字段與目標(biāo)表的目標(biāo)字段的類型不匹配時,將按照目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的類型對源表的源字段進(jìn)行轉(zhuǎn)換。
[0071]具體的,根據(jù)所設(shè)定的處理順序,依次獲取目標(biāo)數(shù)據(jù)庫中的目標(biāo)表及其對應(yīng)的源表。進(jìn)而,對于源表中的每一條源記錄,都需根據(jù)重復(fù)判定標(biāo)準(zhǔn),判斷目標(biāo)表中是否存在與對應(yīng)的源表的源記錄重復(fù)的目標(biāo)記錄,若有,將對該目標(biāo)記錄執(zhí)行對應(yīng)的重復(fù)操作。方法為先在重復(fù)操作列表中查找和該重復(fù)的目標(biāo)記錄所屬的目標(biāo)表相關(guān)的重復(fù)操作記錄,找到后,按照該重復(fù)操作記錄所示的字段名和操作名進(jìn)行重復(fù)操作。字段名即需要操作的目標(biāo)數(shù)據(jù)庫的目標(biāo)字段;操作名,比如加,則是將重復(fù)操作記錄中需要操作的目標(biāo)字段的值加上源記錄中對應(yīng)的源字段的值,并用重復(fù)操作結(jié)果替換現(xiàn)有的重復(fù)的目標(biāo)記錄中需要操作的字段的值。
[0072]對該目標(biāo)記錄執(zhí)行對應(yīng)的重復(fù)操作之后,源記錄尚未添加到目標(biāo)數(shù)據(jù)庫中,但是這條源記錄中可能有些源字段的值與當(dāng)前目標(biāo)數(shù)據(jù)庫中對應(yīng)目標(biāo)字段的值并不相同,為了使得該源字段的值在合并后發(fā)生了變化,變?yōu)槟繕?biāo)數(shù)據(jù)庫對應(yīng)目標(biāo)字段中的值,同時為了使得與這些源字段有關(guān)聯(lián)的其他源字段保持值的同步變更,就需要建立字段變更規(guī)則。在本發(fā)明實施例中,一條字段變更規(guī)則記錄的具體格式為“表名,字段名,原值,新值”。
[0073]建立字段變更規(guī)則具體方法為:先判斷重復(fù)操作記錄所含的目標(biāo)數(shù)據(jù)庫的目標(biāo)字段是否出現(xiàn)在目標(biāo)數(shù)據(jù)庫目標(biāo)字段關(guān)聯(lián)關(guān)系列表的主字段中,若判斷到該源記錄對應(yīng)的目標(biāo)記錄中存在為主字段的目標(biāo)字段,獲取該目標(biāo)字段的關(guān)聯(lián)字段。由于目標(biāo)字段關(guān)聯(lián)關(guān)系相當(dāng)于一個樹形結(jié)構(gòu),主字段為父節(jié)點,關(guān)聯(lián)字段為其子節(jié)點,目標(biāo)字段關(guān)聯(lián)關(guān)系記錄相當(dāng)于節(jié)點間的父子關(guān)系,一個主字段的所有關(guān)聯(lián)字段即這個主字段結(jié)點的所有子節(jié)點,通過遞歸的方式,先尋找主字段的所有關(guān)聯(lián)字段,然后對每個關(guān)聯(lián)字段,繼續(xù)將其看做主字段并尋找其所有的關(guān)聯(lián)字段,直到無法找到為止。
[0074]對這些關(guān)聯(lián)字段建立將該目標(biāo)字段的值賦予其關(guān)聯(lián)字段在源表中的對應(yīng)源字段的字段變更規(guī)則。同時,對此次重復(fù)操作的源記錄執(zhí)行該字段變更規(guī)則,并添加入目標(biāo)數(shù)據(jù)庫中。
[0075]具體的,每一個關(guān)聯(lián)字段對應(yīng)一條字段變更規(guī)則記錄,其中表名和字段名即這個關(guān)聯(lián)字段的所屬表及自己的名稱,原值為此關(guān)聯(lián)字段對應(yīng)的主字段在待添加的源記錄中所對應(yīng)的源字段的數(shù)據(jù)值,新值為此關(guān)聯(lián)字段對應(yīng)的主字段在現(xiàn)有的目標(biāo)記錄中的目標(biāo)字段的數(shù)據(jù)值。
[0076]另外,若未判斷到該源記錄對應(yīng)的目標(biāo)記錄中存在為主字段的目標(biāo)字段,則可直接將該源記錄添加入目標(biāo)數(shù)據(jù)庫中。
[0077]進(jìn)一步的,若根據(jù)重復(fù)判定標(biāo)準(zhǔn),未判斷到目標(biāo)表中存在與對應(yīng)的源表的源記錄重復(fù)的目標(biāo)記錄,則首先變更該源記錄的主鍵值。具體的,對于待插的源記錄中對應(yīng)到目標(biāo)數(shù)據(jù)庫中主鍵字段的源字段,需要將源記錄的主鍵值加上目標(biāo)數(shù)據(jù)庫的最大主鍵值與一之和,以保證主鍵值不重復(fù)。
[0078]接下來,對于待插的源記錄中其他源字段,判斷該源記錄中是否存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段;若判斷到該源記錄中存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段,判斷該源字段是否存在對應(yīng)的字段變更規(guī)則;若判斷到該源字段存在對應(yīng)的字段變更規(guī)則,獲取并執(zhí)行該源字段對應(yīng)的字段變更規(guī)則,并將變更后的源記錄添加入目標(biāo)數(shù)據(jù)庫中。
[0079]其中,執(zhí)行字段變更規(guī)則的方法為,由字段變更規(guī)則中所給出的目標(biāo)表和目標(biāo)字段,根據(jù)源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫間表與表、字段與字段的對應(yīng)關(guān)系,得到此目標(biāo)字段在待插的源記錄中對應(yīng)的源字段,并將目標(biāo)記錄中“新值”的內(nèi)容替換待插的源記錄中對應(yīng)的源字段的值。
[0080]另外,若未判斷到該源字段存在對應(yīng)的字段變更規(guī)則,判斷該源字段對應(yīng)的目標(biāo)字段是否存在源頭主字段。判斷該源字段對應(yīng)的目標(biāo)字段是否存在源頭主字段的方法為先獲取關(guān)聯(lián)字段對應(yīng)的主字段,然后再在目標(biāo)字段關(guān)聯(lián)關(guān)系列表的所有關(guān)聯(lián)字段中尋找這個主字段,如果沒有找到,則這個主字段即源頭主字段,如果找到,則繼續(xù)獲取找到的這條目標(biāo)記錄的主字段,然后繼續(xù)在目標(biāo)目標(biāo)字段關(guān)聯(lián)關(guān)系列表的所有關(guān)聯(lián)字段中尋找這個主字段,一直到無法找到為止。
[0081]接下來,若判斷到該源字段對應(yīng)的目標(biāo)字段存在源頭主字段,需要判斷該源頭主字段是否為主鍵;若判斷到該源頭主字段為主鍵,將該源字段加上目標(biāo)數(shù)據(jù)庫的最大主鍵值與一之和,并將變更后的源記錄添加入目標(biāo)數(shù)據(jù)庫中。否則,若該源頭主字段不是主鍵,則直接將該源記錄添加入目標(biāo)數(shù)據(jù)庫中。
[0082]顯然,本實施例所提供的方法可對主外鍵字段進(jìn)行較好的處理,保證了字段值的同步變更;對其他有同步需求的字段,也實現(xiàn)了升級合并過程中的同步變更;在合并過程中遇到的重復(fù)記錄,除了變更和跳過操作外,提供了更多的處理方式,增強(qiáng)了數(shù)據(jù)庫升級合并方法的功能性、實用性。
[0083]以下,以一個具體實施場景來說明本發(fā)明提供的數(shù)據(jù)庫的合并方法的具體工作流程:
[0084]在具體實施場景中,假定給出的數(shù)據(jù)庫A和數(shù)據(jù)庫B為同一個集團(tuán)的下屬兩個子公司的員工信息數(shù)據(jù)庫,分別如圖2、圖3所示。其中每個表的第一個字段都是主鍵,即數(shù)據(jù)庫A的主鍵為“人員表.人員ID”、“職務(wù)表.職務(wù)ID”和“部門表.部門ID”,數(shù)據(jù)庫B的主鍵為“職員表.編號”、“職務(wù)表.職務(wù)ID”和“部門表.部門ID”。
[0085]數(shù)據(jù)庫A中的主外鍵關(guān)系有兩個,分別為“部門表.部門ID-人員表.部門ID”,“職務(wù)表.職務(wù)ID-人員表.職務(wù)ID”;數(shù)據(jù)庫B中的主外鍵關(guān)系有兩個,分別為“部門表.部門ID-職員表.部門ID,,,“職務(wù)表.職務(wù)ID-職員表.職務(wù)ID,,。
[0086]現(xiàn)在將數(shù)據(jù)庫A作為源數(shù)據(jù)庫,數(shù)據(jù)庫B作為目標(biāo)數(shù)據(jù)庫進(jìn)行合并。首先設(shè)定源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫中表與表、字段與字段的對應(yīng)關(guān)系,本具體實施場景中的源表和目標(biāo)表的對應(yīng)關(guān)系設(shè)定為“人員表-職員表”、“職務(wù)表-職務(wù)表”以及“部門表-部門表”;對于每對源表和目標(biāo)表,表中同名的字段自動賦予對應(yīng)關(guān)系,對于非同名字段,在本具體實施場景中設(shè)定的對應(yīng)關(guān)系為“人員表.人員ID-職員表.編號”和“人員表.人員名稱-職員表.姓名”。
[0087]接下來,設(shè)定目標(biāo)數(shù)據(jù)庫目標(biāo)字段關(guān)聯(lián)關(guān)系,數(shù)據(jù)庫B中已經(jīng)存在的主外鍵會自動生成為目標(biāo)字段關(guān)聯(lián)關(guān)系,得到兩條記錄“部門表.部門ID-職員表.部門ID”和“職務(wù)表.職務(wù)ID-職員表.職務(wù)ID”。另外,在本具體實施場景中再添加一條對應(yīng)關(guān)系“職務(wù)表.職務(wù)ID-職務(wù)表.上級職務(wù)ID”來確保之后合并數(shù)據(jù)時,“上級職務(wù)ID”也能隨“職務(wù)ID”正確地進(jìn)行值的同步變更。
[0088]之后,根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系生成目標(biāo)表的處理順序。具體的,在本具體實施場景中,遍歷數(shù)據(jù)庫B的三張表,首先對于第一張“職員表”,驗證其是否可以加入當(dāng)前的處理順序:在目標(biāo)字段關(guān)聯(lián)關(guān)系列表中查找這張“職員表”是否有目標(biāo)字段作為關(guān)聯(lián)字段,可以找至IJ記錄“部門表.部門ID-職員表.部門ID”,并且關(guān)聯(lián)字段“部門表.部門ID”所在的表“部門表”不在處理順序中,說明“職員表”目前不能放到當(dāng)前的處理順序中。接下來驗證第二張“職務(wù)表”,在目標(biāo)字段關(guān)聯(lián)關(guān)系列表中查找這張“職務(wù)表”是否有目標(biāo)字段作為關(guān)聯(lián)字段,可以找到一條記錄“職務(wù)表.職務(wù)ID-職務(wù)表.上級職務(wù)ID”,但是主字段所屬表“職務(wù)表”是同一張表,說明“職務(wù)表”能放到當(dāng)前的處理順序中,將其添加到處理順序中。接下來第三張“部門表”,在目標(biāo)字段關(guān)聯(lián)關(guān)系列表中查找這張表是否有目標(biāo)字段作為關(guān)聯(lián)字段,找不到記錄,說明“部門表”能放到當(dāng)前的處理順序中,將其添加到序列中。此次遍歷后,有兩張表添加到了處理順序中,還有一張未添加,進(jìn)行下一次遍歷。下一次遍歷第一張“職員表”,在目標(biāo)字段關(guān)聯(lián)關(guān)系列表中可以找到兩條記錄“部門表.部門ID-職員表.部門ID”,“職務(wù)表.職務(wù)ID-職員表.職務(wù)ID”,但是這兩條記錄的主字段所在的表“部門表”,“職務(wù)表”已經(jīng)在處理順序中,說明“職員表”能放到當(dāng)前的處理順序中,將其添加到處理順序中。至此處理順序生成完畢,順序依次為“職務(wù)表”、“部門表”和“職員表”,根據(jù)源表和目標(biāo)表的對應(yīng)關(guān)系,得到與之相對的數(shù)據(jù)庫A的處理順序依次為“職務(wù)表”、“部門表”和“人員表”。
[0089]接下來,設(shè)定數(shù)據(jù)庫B每個目標(biāo)表的重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作。對于“職員表”,重復(fù)判定標(biāo)準(zhǔn)為無,表示所有記錄都進(jìn)行合并。對于“職務(wù)表”重復(fù)判定標(biāo)準(zhǔn)為“職務(wù)名稱”,表示“職務(wù)名稱”相同的記錄算重復(fù)記錄。對于“部門表”重復(fù)判定標(biāo)準(zhǔn)為“部門名稱”和“簡稱”,表示“部門名稱”和“簡稱”都相同的記錄算重復(fù)記錄。
[0090]本具體實施場景中添加一條為“部門表,人數(shù),加”的重復(fù)操作,表示目標(biāo)數(shù)據(jù)庫的“部門表”和此目標(biāo)表在源數(shù)據(jù)庫中的對應(yīng)源表在合并時,如遇到重復(fù)的記錄,則將目標(biāo)數(shù)據(jù)庫中重復(fù)記錄的“人數(shù)”字段的值與此目標(biāo)字段在待添加的源記錄中對應(yīng)的源字段的值相加,并賦給目標(biāo)數(shù)據(jù)庫中重復(fù)記錄的“人數(shù)”字段。
[0091]接下來進(jìn)行數(shù)據(jù)合并,先獲取當(dāng)前目標(biāo)數(shù)據(jù)庫的最大主鍵值,即遍歷數(shù)據(jù)庫B的所有表,取所有主鍵字段記錄值中的最大值,得到值為5。然后按照處理順序中的順序依次進(jìn)行表的合并,具體過程如下:
[0092]按照處理順序的順序,先合并“職務(wù)表”,依次遍歷數(shù)據(jù)庫A的每條記錄,對于第一條記錄“0,,總裁”,在目標(biāo)數(shù)據(jù)庫B中按重復(fù)判定標(biāo)準(zhǔn)“職務(wù)名稱”進(jìn)行判定,發(fā)現(xiàn)數(shù)據(jù)庫B中已經(jīng)存在重復(fù)記錄“1,,總裁”,判定為重復(fù),執(zhí)行重復(fù)操作,重復(fù)操作中無此表的相關(guān)記錄,即無重復(fù)操作,接下來查找記錄所含的各個目標(biāo)數(shù)據(jù)庫的目標(biāo)字段是否出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系的主字段中,發(fā)現(xiàn)“職務(wù)表.職務(wù)ID”作為主字段存在于目標(biāo)字段關(guān)聯(lián)關(guān)系中,獲取“職務(wù)表.職務(wù)ID”的所有關(guān)聯(lián)字段,得到兩個結(jié)果“職員表.職務(wù)ID”和“職務(wù)表.上級職務(wù)ID”。對于第一個結(jié)果,生成字段變更規(guī)則記錄為“職員表.職務(wù)ID,0,1”,表示合并時所有值為O的“職員表.職務(wù)ID”字段都變?yōu)?,即保證了“職員表”中“職務(wù)ID”字段的同步變更。對于第二個結(jié)果,生成字段變更規(guī)則記錄為“職務(wù)表.上級職務(wù)ID,0,1”,表示合并時所有值為O的“職務(wù)表.上級職務(wù)ID”字段都變?yōu)?,即保證了“職務(wù)表”中“上級職務(wù)ID”字段的同步變更。
[0093]對于第二條記錄“1,0,副總裁”,在目標(biāo)數(shù)據(jù)庫B中按重復(fù)判定標(biāo)準(zhǔn)“職務(wù)名稱”進(jìn)行判定,找不到重復(fù)記錄,則將這條記錄先經(jīng)過主鍵值變更,再添加到目標(biāo)表中。主鍵值變更的方法為,對于主鍵字段“職務(wù)ID”,需要將主鍵值加上之前記錄的目標(biāo)數(shù)據(jù)庫最大主鍵值再加1,即加6,得到7。進(jìn)一步的,對于其他字段,如“上級職務(wù)ID”,查找其是否出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系的關(guān)聯(lián)字段中,找到一條記錄“職務(wù)表.職務(wù)ID-職務(wù)表.上級職務(wù)ID”,則繼續(xù)查找字段變更規(guī)則中是否有相應(yīng)的記錄,找到一條記錄“職務(wù)表.上級職務(wù)ID,0,I”滿足條件,即字段相同均為“職務(wù)表.上級職務(wù)ID”,且原值與待插入的源記錄的對應(yīng)字段值相同,均為0,將待插入的源記錄的“上級職務(wù)ID”的值替換為字段變更規(guī)則中的新值I ;對于“職務(wù)名稱”字段,查找其是否出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系的關(guān)聯(lián)字段中,未找到記錄,不作更改。最終的待插入的源記錄變?yōu)椤?,1,副總裁”。將其插入到目標(biāo)數(shù)據(jù)庫中。
[0094]對于第三至第五條記錄,處理方法與第一條記錄相同,它們生成的字段變更規(guī)則記錄分別為“職員表.職務(wù)ID,2,3”,“職務(wù)表.上級職務(wù)ID,2,3”,“職員表.職務(wù)ID,3,4”,“職務(wù)表.上級職務(wù)ID, 3,4”,“職員表.職務(wù)ID, 4,5”,“職務(wù)表.上級職務(wù)ID, 4,5”。
[0095]接下來合并“部門表”,與“職務(wù)表”合并方法相似,不同的是有一個重復(fù)操作涉及到此表,即“部門表,人數(shù),加”,如第一條記錄“0,財務(wù)管理部,財務(wù),50”,先判斷是否與數(shù)據(jù)庫B中有重復(fù)記錄,“部門表”的重復(fù)判定標(biāo)準(zhǔn)為“部門名稱”和“簡稱”,即這兩個字段都相同才算重復(fù)記錄,可以在數(shù)據(jù)庫B中找到“ I,財務(wù)管理部,財務(wù),60”滿足條件,為重復(fù)記錄,此時執(zhí)行重復(fù)操作,“部門表,人數(shù),加”,即將數(shù)據(jù)庫B中重復(fù)記錄對應(yīng)的“人數(shù)”字段的值60和待添加記錄中“人數(shù)”字段的值50相加,得到110,并替換現(xiàn)有記錄中“人數(shù)”字段的值60。之后的操作和上面“職務(wù)表”相似,具體過程為查找重復(fù)記錄所含的各個目標(biāo)數(shù)據(jù)庫的目標(biāo)字段是否出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系的主字段中,發(fā)現(xiàn)“部門表.部門ID”作為主字段出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系記錄中,獲取“部門表.部門ID”的所有關(guān)聯(lián)字段,得到一個結(jié)果“職員表.部門ID”,生成字段變更規(guī)則記錄為“職員表.部門ID,0,1”,表示合并時所有值為O的“職員表.部門ID”字段都變?yōu)?,即保證了“職員表”中“部門ID”字段的同步變更。
[0096]對“部門表”的第二條記錄,處理方式與第一條相同,都是有重復(fù)記錄,其生成的字段變更規(guī)則記錄為“職員表.部門ID,1,2”。
[0097]對于“部門表”的第三條記錄“2,產(chǎn)品銷售部,銷售,200”,在數(shù)據(jù)庫B中找不到重復(fù)記錄,將這條記錄先經(jīng)過數(shù)據(jù)值變更,再添加到目標(biāo)表中,數(shù)據(jù)值變更的方法為,對于主鍵字段“部門ID”,需要將數(shù)據(jù)值加上之前記錄的目標(biāo)數(shù)據(jù)庫最大主鍵值再加1,即加6,得到8 ;對于其他字段,在目標(biāo)字段關(guān)聯(lián)關(guān)系中查找其是否出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系的關(guān)聯(lián)字段中,沒有找到相應(yīng)記錄,字段的數(shù)據(jù)不作更改,最終的插入記錄為“8,產(chǎn)品銷售部,銷售,200”。將其插入到目標(biāo)數(shù)據(jù)庫中。
[0098]最后合并“人員表”及“職員表”,重復(fù)判定標(biāo)準(zhǔn)為無,所有源記錄和目標(biāo)都會合并起來,對于每條源記錄,如第一條源記錄“0,張三,0,4”,將這條源記錄先經(jīng)過數(shù)據(jù)值變更,再添加到目標(biāo)表中,數(shù)據(jù)值變更的方法為,對于主鍵字段“編號”,需要將數(shù)據(jù)值加上之前目標(biāo)記錄的目標(biāo)數(shù)據(jù)庫最大主鍵值再加1,即加6,得到6 ;對于其他字段,在目標(biāo)字段關(guān)聯(lián)關(guān)系中查找其是否出現(xiàn)在目標(biāo)字段關(guān)聯(lián)關(guān)系的關(guān)聯(lián)字段中,如對“部門ID”找到一條記錄“部門表.部門ID-職員表.部門ID”,則查找字段變更規(guī)則中是否有“職員表.部門ID”相應(yīng)的記錄,找到記錄“職員表.部門10,0,1”,滿足條件,即字段相同均為“職員表.部門ID”且字段變更規(guī)則記錄中的原值為0,與待插入的源記錄中“部門ID”的值O相同,則將待插入的源記錄的“部門ID”的值替換為變更規(guī)則記錄中的新值I ;接下來對待插入的源記錄中的其他字段執(zhí)行同樣操作,如“職務(wù)ID”也找到一條記錄“職務(wù)表.職務(wù)ID-職員表.職務(wù)ID”,并且在變更規(guī)則中也能找到相應(yīng)記錄“職員表.職務(wù)ID,4,5”,將待插入的源記錄的“職務(wù)ID”的值替換為變更規(guī)則中的新值5。最終的待插入的源記錄變?yōu)椤?,張三,1,5”。將其插入到目標(biāo)數(shù)據(jù)庫中。
[0099]對于“人員表”中的第二和第三條記錄,處理方式與第一條相同。生成的插入記錄分別為“7,李四,2,4”和“8,王五,2,3”,將其插入到目標(biāo)數(shù)據(jù)庫中。
[0100]對于“人員表”中的第四條記錄“3,周六,1,1”,與前幾條不同的是對于“職務(wù)ID”的字段值1,雖然能在目標(biāo)字段關(guān)聯(lián)關(guān)系的關(guān)聯(lián)字段中找到相應(yīng)記錄“職務(wù)表.職務(wù)ID-職員表.職務(wù)ID”,但是接下來字段變更規(guī)則中卻沒有找到相應(yīng)記錄,則尋找此關(guān)聯(lián)字段“職員表.職務(wù)ID”的源頭主字段。具體方法為,先獲取關(guān)聯(lián)字段“職員表.職務(wù)ID”對應(yīng)的主字段“職務(wù)表.職務(wù)ID”,然后再在所有關(guān)聯(lián)字段中尋找這個主字段“職務(wù)表.職務(wù)ID”,未找到結(jié)果,說明“職務(wù)表.職務(wù)ID”即“職員表.職務(wù)ID”的源頭主字段。源頭主字段“職務(wù)表.職務(wù)ID”是主鍵類型,則將待插入“職員表.職務(wù)ID”的數(shù)據(jù)值I加上目標(biāo)數(shù)據(jù)庫最大主鍵值5再加1,得到7,最終的待插入的源記錄變?yōu)椤?,周六,2,7”。將其插入到目標(biāo)數(shù)據(jù)庫中。
[0101]至此,數(shù)據(jù)庫合并工作完成,得到的合并后數(shù)據(jù)庫如圖4所示,所有數(shù)據(jù)都經(jīng)過了合理的變更并正確地合并到了一起。
[0102]綜上,本發(fā)明實施例提供了一種數(shù)據(jù)庫的合并方法,該數(shù)據(jù)庫的合并方法中設(shè)定了源數(shù)據(jù)庫的源表和目標(biāo)數(shù)據(jù)庫的目標(biāo)表的對應(yīng)關(guān)系、源數(shù)據(jù)庫的源字段和目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的對應(yīng)關(guān)系,另外還設(shè)定了目標(biāo)表與對應(yīng)的源表合并的處理順序、源記錄和目標(biāo)數(shù)據(jù)庫中的目標(biāo)記錄的重復(fù)判定標(biāo)準(zhǔn),以及源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作,使得合并后的數(shù)據(jù)庫較為準(zhǔn)確、合理,為一種靈活性更強(qiáng)、功能更為完善的數(shù)據(jù)庫合并方法。
[0103]雖然本發(fā)明所公開的實施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術(shù)領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所公開的精神和范圍的前提下,可以在實施的形式上及細(xì)節(jié)上作任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
【主權(quán)項】
1.一種數(shù)據(jù)庫的合并方法,其特征在于,包括: 獲取源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫; 設(shè)定源數(shù)據(jù)庫的源表和目標(biāo)數(shù)據(jù)庫的目標(biāo)表的對應(yīng)關(guān)系、源數(shù)據(jù)庫的源字段和目標(biāo)數(shù)據(jù)庫的目標(biāo)字段的對應(yīng)關(guān)系; 設(shè)定目標(biāo)數(shù)據(jù)庫內(nèi)的目標(biāo)字段關(guān)聯(lián)關(guān)系,目標(biāo)字段關(guān)聯(lián)關(guān)系包括主字段和與該主字段關(guān)聯(lián)的關(guān)聯(lián)字段; 根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,設(shè)定目標(biāo)表與對應(yīng)的源表合并的處理順序; 設(shè)定源數(shù)據(jù)庫中的源記錄和目標(biāo)數(shù)據(jù)庫中的目標(biāo)記錄的重復(fù)判定標(biāo)準(zhǔn),以及源記錄和目標(biāo)記錄符合重復(fù)判定標(biāo)準(zhǔn)時的重復(fù)操作; 根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)目標(biāo)目標(biāo)字段關(guān)聯(lián)關(guān)系,設(shè)定源表和目標(biāo)表的處理順序包括: 根據(jù)目標(biāo)字段關(guān)聯(lián)關(guān)系,判斷當(dāng)前的目標(biāo)表中是否存在作為關(guān)聯(lián)字段的目標(biāo)字段;當(dāng)判斷到存在作為關(guān)聯(lián)字段的目標(biāo)字段,判斷其對應(yīng)的主字段所在的目標(biāo)表是否已存在于處理順序中; 當(dāng)判斷到主字段所在的目標(biāo)表已存在于處理順序中,將當(dāng)前的目標(biāo)表添加入處理順序中; 或當(dāng)未判斷到存在作為關(guān)聯(lián)字段的目標(biāo)字段,將當(dāng)前的目標(biāo)表添加入處理順序中。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之前,還包括: 獲取目標(biāo)數(shù)據(jù)庫的最大主鍵值。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,根據(jù)所設(shè)定的處理順序、重復(fù)判定標(biāo)準(zhǔn)及重復(fù)操作,合并源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫包括: 根據(jù)所設(shè)定的處理順序,獲取目標(biāo)表及其對應(yīng)的源表; 若根據(jù)重復(fù)判定標(biāo)準(zhǔn),判斷到目標(biāo)表中存在與對應(yīng)的源表的源記錄重復(fù)的目標(biāo)記錄,對該目標(biāo)記錄執(zhí)行對應(yīng)的重復(fù)操作; 若根據(jù)重復(fù)判定標(biāo)準(zhǔn),未判斷到目標(biāo)表中存在與對應(yīng)的源表的源記錄重復(fù)的目標(biāo)記錄,變更源記錄的主鍵值。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,對該目標(biāo)記錄執(zhí)行對應(yīng)的重復(fù)操作之后,還包括: 若判斷到該源記錄對應(yīng)的目標(biāo)記錄中存在為主字段的目標(biāo)字段,獲取該目標(biāo)字段的關(guān)聯(lián)字段; 建立將該目標(biāo)字段的值賦予其關(guān)聯(lián)字段在源表中的對應(yīng)源字段的字段變更規(guī)則; 對該源記錄執(zhí)行該字段變更規(guī)則,并添加入目標(biāo)數(shù)據(jù)庫中。6.根據(jù)權(quán)利要求5所述的方法,其特征在于,變更源記錄的主鍵值包括: 將源記錄的主鍵值加上目標(biāo)數(shù)據(jù)庫的最大主鍵值與一之和。7.根據(jù)權(quán)利要求6所述的方法,其特征在于,變更源記錄的主鍵值之后,還包括: 判斷該源記錄中是否存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段; 若判斷到該源記錄中存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段,判斷該源字段是否存在對應(yīng)的字段變更規(guī)則; 若判斷到該源字段存在對應(yīng)的字段變更規(guī)則,獲取并執(zhí)行該源字段對應(yīng)的字段變更規(guī)貝IJ,并將變更后的源記錄添加入目標(biāo)數(shù)據(jù)庫中。8.根據(jù)權(quán)利要求6所述的方法,其特征在于,變更源記錄的主鍵值之后,還包括: 判斷該源記錄中是否存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段; 若判斷到該源記錄中存在對應(yīng)的目標(biāo)字段為關(guān)聯(lián)字段的源字段,判斷該源字段是否存在對應(yīng)的字段變更規(guī)則; 若未判斷到該源字段存在對應(yīng)的字段變更規(guī)則,判斷該源字段對應(yīng)的目標(biāo)字段是否存在源頭主字段; 若判斷到該源字段對應(yīng)的目標(biāo)字段存在源頭主字段,判斷該源頭主字段是否為主鍵;若判斷到該源頭主字段為主鍵,將該源字段加上目標(biāo)數(shù)據(jù)庫的最大主鍵值與一之和,并將變更后的源記錄添加入目標(biāo)數(shù)據(jù)庫中。
【文檔編號】G06F17/30GK106033436SQ201510111315
【公開日】2016年10月19日
【申請日】2015年3月13日
【發(fā)明人】彭成, 盛秀杰, 張桓, 曹晉, 王義剛, 徐忠美
【申請人】中國石油化工股份有限公司, 中國石油化工股份有限公司石油勘探開發(fā)研究院