本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,具體地說是一種分級(jí)碼多級(jí)數(shù)據(jù)的同步遷移方法。
背景技術(shù):
對(duì)于一組多級(jí)數(shù)據(jù),通過分級(jí)碼來確定上下級(jí)關(guān)系,且需要申請(qǐng)、審批過程,才能成為正式的合法數(shù)據(jù),且申請(qǐng)數(shù)據(jù)和正式數(shù)據(jù)分別保存在表A和表B中,但表B中的正式數(shù)據(jù)入口并非只有一個(gè),集團(tuán)數(shù)據(jù)管理員有權(quán)限進(jìn)行直接維護(hù)包括操作新增、調(diào)整結(jié)構(gòu),下級(jí)用戶在新增申請(qǐng)數(shù)據(jù)A時(shí),需要選擇其上級(jí)數(shù)據(jù),其上級(jí)數(shù)據(jù)必須是已存在的正式數(shù)據(jù)。
基于此,在現(xiàn)有技術(shù)中,當(dāng)多級(jí)字典遷移時(shí),無法持其上下級(jí)關(guān)系完整,且不易同步遷移前后的上下級(jí)關(guān)系,容易出現(xiàn)沒有上級(jí)而無法展示的情況。
因而,本發(fā)明提供一種通用數(shù)據(jù)交換接口的實(shí)現(xiàn)方法,本方法適用于在B中數(shù)據(jù)隨時(shí)變化的情況下,保證表A中的數(shù)據(jù)正常添加,并保證所添加的數(shù)據(jù)所在的上下級(jí)結(jié)構(gòu)正確。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的技術(shù)任務(wù)是針對(duì)以上不足之處,提供一種實(shí)用性強(qiáng)、可廣泛應(yīng)用于異構(gòu)數(shù)據(jù)集成與交換系統(tǒng)中的分級(jí)碼多級(jí)數(shù)據(jù)的同步遷移方法。
一種分級(jí)碼多級(jí)數(shù)據(jù)的同步遷移方法,以分級(jí)碼來確定上下級(jí)關(guān)系的多級(jí)數(shù)據(jù),再進(jìn)行數(shù)據(jù)遷移,其實(shí)現(xiàn)過程為:
首先確定遷移數(shù)據(jù)在源表A中的位置;
找出當(dāng)前數(shù)據(jù)在源表A中所在樹的根節(jié)點(diǎn)C;
查找根節(jié)點(diǎn)C是否存在于目標(biāo)表B中;
若存在則繼續(xù)找原數(shù)據(jù)下一級(jí)是否存在,若不存在則插入并查找下一級(jí)數(shù)據(jù),重復(fù)該過程直至插入遷移數(shù)據(jù)。
所述遷移數(shù)據(jù)為多級(jí)數(shù)據(jù),該多級(jí)數(shù)據(jù)通過分級(jí)碼K的形式確定上下級(jí)關(guān)系,分級(jí)碼K每一級(jí)的位數(shù)長度固定,且遷移數(shù)據(jù)前后均有能標(biāo)識(shí)唯一性的字段。
在確定遷移數(shù)據(jù)在源表A中的位置是指獲取當(dāng)前數(shù)據(jù),根據(jù)其分級(jí)碼K確定其所在位置,即根據(jù)分級(jí)碼K確定當(dāng)前數(shù)據(jù)為第幾級(jí)數(shù)據(jù)。
確定遷移數(shù)據(jù)在表A中的位置的具體過程為:取出表A中要遷移的當(dāng)前數(shù)據(jù),用其分級(jí)碼K1除以每一級(jí)分級(jí)碼長度得到其在A中的級(jí)數(shù)m;取遷移數(shù)據(jù)分級(jí)碼的前n位獲取其所在樹的根節(jié)點(diǎn)分級(jí)碼K2,即當(dāng)前數(shù)據(jù)所在級(jí)數(shù)為i,K2為K1的前i*n位。
獲取樹的根節(jié)點(diǎn)C的過程為:根據(jù)分級(jí)碼和分級(jí)碼的位數(shù),找到當(dāng)前數(shù)據(jù)在源表中所在樹的一級(jí)節(jié)點(diǎn),即根節(jié)點(diǎn),保存為上級(jí)節(jié)點(diǎn)C。
根據(jù)獲取的根節(jié)點(diǎn)C,確定該根節(jié)點(diǎn)是否在目標(biāo)表B中,若存在則獲取當(dāng)前數(shù)據(jù)所在樹的第二級(jí)節(jié)點(diǎn),并保存為節(jié)點(diǎn)C,若不存在則根據(jù)當(dāng)前C節(jié)點(diǎn)的級(jí)數(shù)在目標(biāo)表B中計(jì)算當(dāng)前節(jié)點(diǎn)C應(yīng)有的分級(jí)碼,并將節(jié)點(diǎn)C插入目標(biāo)表B中,然后獲取當(dāng)前數(shù)據(jù)所在樹的第二級(jí)節(jié)點(diǎn),并保存為節(jié)點(diǎn)C,重復(fù)該過程直至節(jié)點(diǎn)C為當(dāng)前節(jié)點(diǎn)。
在獲取樹的根節(jié)點(diǎn)C后,確定該樹的根節(jié)點(diǎn)C在目標(biāo)表B中是否存在的過程為:根據(jù)獲取的樹的根節(jié)點(diǎn)C,獲取樹的根節(jié)點(diǎn)C的唯一標(biāo)識(shí)字段c,根據(jù)該唯一標(biāo)識(shí)字段c,去目標(biāo)表B中檢索是否存在唯一標(biāo)識(shí)為c的節(jié)點(diǎn)。
樹的根節(jié)點(diǎn)C是否存在于目標(biāo)表B中具體分析過程為:
若C節(jié)點(diǎn)在目標(biāo)表B中存在,判斷當(dāng)前數(shù)據(jù)所在級(jí)數(shù)i是否小于m;
若i小于m,則i=i+1,獲取目標(biāo)表B中與C相同的數(shù)據(jù)C1,并獲取K1的前i*n位為新的分級(jí)碼K2,并從源表A中查出分級(jí)碼為K2的節(jié)點(diǎn)存為C;
若i等于m,則說明遷移數(shù)據(jù)在目標(biāo)表B中存在;
若C節(jié)點(diǎn)在目標(biāo)表B中不存在,則判斷i是否等于1:若i等于1,則查找出目標(biāo)表B中一級(jí)數(shù)據(jù)當(dāng)前最大分級(jí)碼K3;若i大于1則查找出目標(biāo)表B中上級(jí)為C1的數(shù)據(jù)的最大分級(jí)碼K3,最后把C節(jié)點(diǎn)的數(shù)據(jù)插入到目標(biāo)表B中且分級(jí)碼改為K3+1;
判斷i是否小于m:若i小于m則i=i+1,獲取目標(biāo)表B中新插入的數(shù)據(jù)C1,并獲取K1的前i*n位為新的分級(jí)碼K2,并從源表A中查出分級(jí)碼為K2的的節(jié)點(diǎn)存為C;
若i等于m,則說明遷移數(shù)據(jù)是當(dāng)前數(shù)據(jù),在以C1為上級(jí)節(jié)點(diǎn)插入當(dāng)前數(shù)據(jù)。
本發(fā)明的一種分級(jí)碼多級(jí)數(shù)據(jù)的同步遷移方法和現(xiàn)有技術(shù)相比,具有以下有益效果:
本發(fā)明的一種分級(jí)碼多級(jí)數(shù)據(jù)的同步遷移方法,使多級(jí)字典遷移過程中能保持其上下級(jí)關(guān)系完整,并能同步遷移前后的上下級(jí)關(guān)系,避免出現(xiàn)沒有上級(jí)而無法展示的情況;本方法可擴(kuò)展在處理遷移數(shù)據(jù)并同步其上級(jí)節(jié)點(diǎn)時(shí),可設(shè)置修改上級(jí)數(shù)據(jù)屬性,以區(qū)分是所需數(shù)據(jù)還是為保證數(shù)據(jù)樹完整性而同步過來的輔助數(shù)據(jù),該屬性可用于權(quán)限的設(shè)置,這樣既保證了數(shù)據(jù)權(quán)限的安全性,有使得所需數(shù)據(jù)信息的完整性,實(shí)用性強(qiáng),適用范圍廣泛,易于推廣。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
一種分級(jí)碼多級(jí)數(shù)據(jù)的同步遷移方法,本發(fā)明提供了一種逐條同步部分多級(jí)字典數(shù)據(jù)時(shí)保持上下級(jí)關(guān)系完整性的方法,以分級(jí)碼來確定上下級(jí)關(guān)系的多級(jí)數(shù)據(jù),在進(jìn)行部分?jǐn)?shù)據(jù)遷移,且要保證數(shù)據(jù)所在樹的完整性時(shí),可根據(jù)本方法確定數(shù)據(jù)所在的位置,該方法通過確定遷移數(shù)據(jù)在源表位置、找出數(shù)據(jù)所在樹的根節(jié)點(diǎn)、查找根節(jié)點(diǎn)是否存在與目標(biāo)表、若存在則繼續(xù)找原數(shù)據(jù)下一級(jí)是否存在,若不存在則插入并查找下一級(jí)數(shù)據(jù),重復(fù)該過程直至插入遷移數(shù)據(jù)的方式實(shí)現(xiàn)。
具體的,下面以從表A遷移數(shù)據(jù)到表B為例,其具體實(shí)現(xiàn)過程如下:
確定遷移數(shù)據(jù)在表A中的位置;獲取當(dāng)前數(shù)據(jù),首先根據(jù)其分級(jí)碼確定其所在位置,即根據(jù)分級(jí)碼確定當(dāng)前數(shù)據(jù)為第幾級(jí)數(shù)據(jù)。
找出當(dāng)前數(shù)據(jù)在A表中所在樹的根節(jié)點(diǎn)C;根據(jù)分級(jí)碼和分級(jí)碼的位數(shù),找到當(dāng)前數(shù)據(jù)在A表中所在樹的一級(jí)節(jié)點(diǎn),即根節(jié)點(diǎn),保存為上級(jí)節(jié)點(diǎn)C。
查找根節(jié)點(diǎn)在表B中是否存在;
若表B中存在根節(jié)點(diǎn)則繼續(xù)找原數(shù)據(jù)的第二級(jí)是否存在,若不存在則插入并繼續(xù)查找第二級(jí)數(shù)據(jù),重復(fù)該過程直至插入遷移數(shù)據(jù)。
獲取的根節(jié)點(diǎn)C是否在表B中,若存在則獲取當(dāng)前數(shù)據(jù)所在樹的第二級(jí)節(jié)點(diǎn),并保存為節(jié)點(diǎn)C,若不存在則根據(jù)當(dāng)前C節(jié)點(diǎn)的級(jí)數(shù)在表B中計(jì)算當(dāng)前節(jié)點(diǎn)C應(yīng)有的分級(jí)碼,并將節(jié)點(diǎn)C插入表B中,然后獲取當(dāng)前數(shù)據(jù)所在樹的第二級(jí)節(jié)點(diǎn),并保存為節(jié)點(diǎn)C。
所述遷移數(shù)據(jù)為多級(jí)數(shù)據(jù),該多級(jí)數(shù)據(jù)通過分級(jí)碼K的形式確定上下級(jí)關(guān)系,分級(jí)碼K每一級(jí)的位數(shù)長度固定,且遷移數(shù)據(jù)前后均有能標(biāo)識(shí)唯一性的字段。
確定遷移數(shù)據(jù)在表A中的位置的具體過程為:取出表A中要遷移的當(dāng)前數(shù)據(jù),用其分級(jí)碼K1除以每一級(jí)分級(jí)碼長度得到其在A中的級(jí)數(shù)m;取遷移數(shù)據(jù)分級(jí)碼的前n位獲取其所在樹的根節(jié)點(diǎn)分級(jí)碼K2,即當(dāng)前數(shù)據(jù)所在級(jí)數(shù)為i,K2為K1的前i*n位。
在獲取樹的根節(jié)點(diǎn)C后,確定該樹的根節(jié)點(diǎn)C在目標(biāo)表B中是否存在的過程為:根據(jù)獲取的樹的根節(jié)點(diǎn)C,獲取樹的根節(jié)點(diǎn)C的唯一標(biāo)識(shí)字段c,根據(jù)該唯一標(biāo)識(shí)字段c,去目標(biāo)表B中檢索是否存在唯一標(biāo)識(shí)為c的節(jié)點(diǎn)。
樹的根節(jié)點(diǎn)C是否存在于目標(biāo)表B中具體分析過程為:
若C節(jié)點(diǎn)在目標(biāo)表B中存在,判斷當(dāng)前數(shù)據(jù)所在級(jí)數(shù)i是否小于m;
若i小于m,則i=i+1,獲取目標(biāo)表B中與C相同的數(shù)據(jù)C1,并獲取K1的前i*n位為新的分級(jí)碼K2,并從源表A中查出分級(jí)碼為K2的節(jié)點(diǎn)存為C;
若i等于m,則說明遷移數(shù)據(jù)在目標(biāo)表B中存在;
若C節(jié)點(diǎn)在目標(biāo)表B中不存在,則判斷i是否等于1:若i等于1,則查找出目標(biāo)表B中一級(jí)數(shù)據(jù)當(dāng)前最大分級(jí)碼K3;若i大于1則查找出目標(biāo)表B中上級(jí)為C1的數(shù)據(jù)的最大分級(jí)碼K3,最后把C節(jié)點(diǎn)的數(shù)據(jù)插入到目標(biāo)表B中且分級(jí)碼改為K3+1;
判斷i是否小于m:若i小于m則i=i+1,獲取目標(biāo)表B中新插入的數(shù)據(jù)C1,并獲取K1的前i*n位為新的分級(jí)碼K2,并從源表A中查出分級(jí)碼為K2的的節(jié)點(diǎn)存為C;
若i等于m,則說明遷移數(shù)據(jù)是當(dāng)前數(shù)據(jù),在以C1為上級(jí)節(jié)點(diǎn)插入當(dāng)前數(shù)據(jù)。
重復(fù)過程三、四直至插入遷移數(shù)據(jù)
在本方法執(zhí)行同時(shí)可檢驗(yàn)所遷移數(shù)據(jù)分加碼的準(zhǔn)確性,并保證數(shù)據(jù)結(jié)構(gòu)的完整性和規(guī)范性。本方法的核心算法為計(jì)算每級(jí)節(jié)點(diǎn)的分級(jí)碼,在數(shù)據(jù)遷移的過程中,保證數(shù)據(jù)的上下級(jí)結(jié)構(gòu)不變的情況下,重新生成分級(jí)碼,以保證數(shù)據(jù)始終在一顆完整的數(shù)據(jù)樹中。
在一組多級(jí)數(shù)據(jù),通過分級(jí)碼來確定上下級(jí)關(guān)系,且需要申請(qǐng)、審批過程,才能成為正式的合法數(shù)據(jù),且申請(qǐng)數(shù)據(jù)和正式數(shù)據(jù)分別保存在表A和表B中,但表B中的正式數(shù)據(jù)入口并非只有一個(gè),集團(tuán)數(shù)據(jù)管理員有權(quán)限進(jìn)行直接維護(hù)包括操作新增、調(diào)整結(jié)構(gòu),下級(jí)用戶在新增申請(qǐng)數(shù)據(jù)A時(shí),需要選擇其上級(jí)數(shù)據(jù),其上級(jí)數(shù)據(jù)必須時(shí)已存在的正式數(shù)據(jù)。本方法適用于在B中數(shù)據(jù)隨時(shí)變化的情況下,保證表A中的數(shù)據(jù)正常添加,并保證所添加的數(shù)據(jù)所在的上下級(jí)結(jié)構(gòu)正確。
下面將通過一個(gè)實(shí)例說明本方法的作用,和使用方法:
現(xiàn)在有單位表申請(qǐng)表HSDWAPP和單位表HSDW,需求為:在HSDWAPP添加數(shù)據(jù),選擇的上級(jí)數(shù)據(jù)來源于HSDW表,HSDW表中的數(shù)據(jù)來源為HSDWAPP表中審批通過后插入和直接維護(hù)。
HSDWAPP表:
HSDW表:
該過程兩次用到本方法,首先在在HSDWAPP表新增數(shù)據(jù)時(shí),需要判斷所選擇的上級(jí)數(shù)據(jù)是否存在于HSDWAPP,若不存在則需要從HSDW表中遷移到HSDWAPP表中,直至其所在的一顆完整樹,都遷移到HSDWAPP表中;其次在申請(qǐng)表中的數(shù)據(jù)審批通過后插入HSDW表是,分級(jí)碼需要重新計(jì)算,亦用到了本方法;本方法的核心在于計(jì)算分級(jí)碼,并在計(jì)算過程中將數(shù)據(jù)所在的樹完整插入目標(biāo)表中。
向HSDWAPP表中插入樹時(shí)的核心代碼如下,參數(shù)為所選的上級(jí)單位編號(hào):
基于上述方法,當(dāng)兩個(gè)數(shù)據(jù)源進(jìn)行相互數(shù)據(jù)遷移時(shí),該方法能同步上下級(jí)關(guān)系數(shù)據(jù)的變化。
通過上面具體實(shí)施方式,所述技術(shù)領(lǐng)域的技術(shù)人員可容易的實(shí)現(xiàn)本發(fā)明。但是應(yīng)當(dāng)理解,本發(fā)明并不限于上述的具體實(shí)施方式。在公開的實(shí)施方式的基礎(chǔ)上,所述技術(shù)領(lǐng)域的技術(shù)人員可任意組合不同的技術(shù)特征,從而實(shí)現(xiàn)不同的技術(shù)方案。
除說明書所述的技術(shù)特征外,均為本專業(yè)技術(shù)人員的已知技術(shù)。