本發(fā)明涉及一種計(jì)算機(jī)應(yīng)用系統(tǒng)技術(shù)領(lǐng)域,尤其是一種自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法。
背景技術(shù):
隨著大數(shù)據(jù)時(shí)代的到來(lái),現(xiàn)代關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)的表數(shù)量和表關(guān)系數(shù)量正變得越來(lái)越龐大,而表關(guān)系在不同的使用場(chǎng)景中又存在差異,因此整理數(shù)據(jù)庫(kù)表關(guān)系的工作也開始變得復(fù)雜化。
但對(duì)于一個(gè)成熟的基于關(guān)系型數(shù)據(jù)庫(kù)的大型系統(tǒng)而言,系統(tǒng)中的現(xiàn)有程序已經(jīng)對(duì)大量數(shù)據(jù)庫(kù)表執(zhí)行了查詢操作,因此我們只需要分析這些現(xiàn)有程序的取數(shù)過(guò)程,對(duì)這些程序的數(shù)據(jù)查詢過(guò)程進(jìn)行跟蹤分析,就能快速找出數(shù)據(jù)庫(kù)表關(guān)系。
目前SQL跟蹤已經(jīng)是較為成熟的技術(shù),利用SQL跟蹤技術(shù)可以跟蹤出目標(biāo)程序在指定時(shí)間范圍中執(zhí)行過(guò)的SQL序列。具體來(lái)說(shuō),我們首先需要使用SQL跟蹤工具,跟蹤該系統(tǒng)現(xiàn)有程序的執(zhí)行過(guò)程,提取出SQL執(zhí)行序列。從這些SQL序列中可以提取出數(shù)據(jù)庫(kù)表的查詢條件,找到查詢條件以后,在前序SQL查詢語(yǔ)句的查詢結(jié)果中進(jìn)行手工檢索,找到每個(gè)查詢條件的值的來(lái)源,即可確認(rèn)出數(shù)據(jù)庫(kù)表、字段之間的關(guān)聯(lián)關(guān)系。
這種表關(guān)系分析方式的優(yōu)點(diǎn)是,只要數(shù)據(jù)庫(kù)表的取數(shù)邏輯已經(jīng)存在于現(xiàn)有程序中,既可以通過(guò)成熟的SQL跟蹤工具,跟蹤該程序的SQL的執(zhí)行序列,以SQL序列為線索,即可提取出數(shù)據(jù)庫(kù)表關(guān)聯(lián)關(guān)系。
該方式的缺點(diǎn)是,在獲取到目標(biāo)程序的SQL執(zhí)行序列之后,仍需要結(jié)合手工查詢數(shù)據(jù)庫(kù)表以及人工對(duì)比數(shù)據(jù)的過(guò)程,才能完成表關(guān)系分析,效率較低且容易出錯(cuò),因此該方法有進(jìn)一步優(yōu)化的空間。
目前暫未出現(xiàn)可廣泛運(yùn)用的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是提供一種簡(jiǎn)單的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法。
為解決上述技術(shù)問題,本發(fā)明提供一種自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法,通過(guò)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)現(xiàn)有程序的學(xué)習(xí),從程序的SQL執(zhí)行序列逆向推導(dǎo)出取數(shù)邏輯,生成表關(guān)系。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的改進(jìn):所述學(xué)習(xí)、推導(dǎo)過(guò)程如下:按時(shí)間先后順序排列N個(gè)SQL查詢語(yǔ)句作為輸入數(shù)據(jù),并通過(guò)該輸入數(shù)據(jù)做為獲取該SQL語(yǔ)句對(duì)應(yīng)的數(shù)據(jù)庫(kù)表與前序表、字段的匹配關(guān)系,自動(dòng)完成對(duì)時(shí)間序列的第N個(gè)SQL查詢語(yǔ)句的表關(guān)系分析。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的進(jìn)一步改進(jìn):所述匹配、分析步驟如下;第一步:提取出每個(gè)SQL查詢語(yǔ)句的查詢條件和查詢結(jié)果;第二步:按照時(shí)間先后順序,將每個(gè)SQL查詢語(yǔ)句的查詢條件與前序SQL查詢語(yǔ)句的查詢結(jié)果進(jìn)行值清單匹配;第三步:利用步驟二中記錄的匹配信息,生成并記錄該SQL語(yǔ)句的表關(guān)系分析結(jié)果;第四步:按照步驟三所獲得的分析結(jié)果輸出表關(guān)系。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的進(jìn)一步改進(jìn):所述步驟一中:要提取的查詢條件包括查詢條件的字段清單以及字段對(duì)應(yīng)的值清單;要提取的查詢結(jié)果包括查詢結(jié)果的字段清單以及查詢結(jié)果的各行的各字段的數(shù)據(jù)值。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的進(jìn)一步改進(jìn):所述步驟二中:將時(shí)間序列的第N個(gè)SQL查詢語(yǔ)句的查詢條件,與第1~N-1個(gè)SQL查詢語(yǔ)句的查詢結(jié)果進(jìn)行值清單的匹配操作,并將所有匹配成功的表、字段和值信息記錄下來(lái)。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的進(jìn)一步改進(jìn):所述步驟三中表分析步驟如下:第N個(gè)SQL查詢語(yǔ)句的數(shù)據(jù)庫(kù)表為C,第N-2個(gè)SQL查詢語(yǔ)句的數(shù)據(jù)庫(kù)表為A,第N個(gè)SQL查詢語(yǔ)句的查詢條件中的字段g值g、與第N-2個(gè)SQL查詢語(yǔ)句的查詢結(jié)果中的字段p值g匹配成功,則獲取到的表關(guān)系結(jié)果為:表C-字段g=表A-字段2=值g。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的進(jìn)一步改進(jìn):所述步驟四中:根據(jù)步驟三所獲取到的字段匹配清單,按照字段的匹配強(qiáng)度從高到低輸出表關(guān)系。
作為對(duì)本發(fā)明所述的自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的進(jìn)一步改進(jìn):步驟四中,用匹配值的有效長(zhǎng)度來(lái)定義匹配強(qiáng)度。
本發(fā)明利用機(jī)器學(xué)習(xí)的思想,通過(guò)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)現(xiàn)有程序的學(xué)習(xí),從程序的SQL執(zhí)行序列逆向推導(dǎo)出取數(shù)邏輯,生成表關(guān)系,解決了表關(guān)系分析依賴于大量人工查找的問題,有效減少了工作量。
具體而言,本發(fā)明利用機(jī)器學(xué)習(xí)的原理,以跟蹤到的大量SQL查詢語(yǔ)句為基礎(chǔ)進(jìn)行自動(dòng)學(xué)習(xí),自動(dòng)分析得到表關(guān)系。
本發(fā)明將現(xiàn)有方法中需要手工處理的步驟轉(zhuǎn)化成了自動(dòng)化的處理流程,實(shí)現(xiàn)了一種可行的自動(dòng)分析關(guān)系型數(shù)據(jù)庫(kù)表關(guān)系的方法,并通過(guò)該方法可以在SQL跟蹤工具提取出程序的SQL執(zhí)行序列之后,自動(dòng)利用跟蹤到的SQL執(zhí)行序列分析出完整的數(shù)據(jù)庫(kù)表關(guān)系。
通過(guò)本發(fā)明可以大幅度的節(jié)約表關(guān)系分析的時(shí)間,解決人工分析表關(guān)系的低效率和準(zhǔn)確率低的問題。
附圖說(shuō)明
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)說(shuō)明。
圖1是本發(fā)明自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法的流程示意圖。
具體實(shí)施方式
實(shí)施例1、圖1給出一種自動(dòng)分析數(shù)據(jù)庫(kù)表關(guān)系的方法,本方法以一系列按時(shí)間先后順序排列的SQL查詢語(yǔ)句作為輸入數(shù)據(jù),進(jìn)行自動(dòng)化分析。
具體執(zhí)行流程如下:
第一步:提取出每個(gè)SQL查詢語(yǔ)句的查詢條件和查詢結(jié)果:
要提取的查詢條件包括查詢條件的字段清單以及字段對(duì)應(yīng)的值清單;
要提取的查詢結(jié)果包括查詢結(jié)果的字段清單以及查詢結(jié)果的各行的各字段的數(shù)據(jù)值。
第二步:按照時(shí)間先后順序,將每個(gè)SQL查詢語(yǔ)句的查詢條件,與前序SQL查詢語(yǔ)句的查詢結(jié)果進(jìn)行值清單匹配操作。
具體而言,就是將時(shí)間序列的第N個(gè)SQL查詢語(yǔ)句的查詢條件,與第1~N-1個(gè)SQL查詢語(yǔ)句的查詢結(jié)果進(jìn)行值清單的匹配操作,并將所有匹配成功的表、字段和值信息記錄下來(lái)。
第三步:利用第二步中記錄的表、字段和值的匹配信息,生成并記錄該SQL語(yǔ)句的表關(guān)系分析結(jié)果。
具體而言,假設(shè)第N個(gè)SQL查詢語(yǔ)句的數(shù)據(jù)庫(kù)表為C,第N-2個(gè)SQL查詢語(yǔ)句的數(shù)據(jù)庫(kù)表為A。第N個(gè)SQL查詢語(yǔ)句的查詢條件中的字段g值g、與第N-2個(gè)SQL查詢語(yǔ)句的查詢結(jié)果中的字段2值g匹配成功。
則獲取到的表關(guān)系結(jié)果為:表C-字段g=表A-字段2=值g。
第四步:按照字段的匹配強(qiáng)度從高到低輸出表關(guān)系。
在第三步中,我們通過(guò)查詢條件和前序查詢結(jié)果的值清單的匹配,獲取到了字段匹配的清單,接下來(lái)我們需要按照字段的匹配強(qiáng)度從高到低輸出表關(guān)系。
本方法用匹配值的有效長(zhǎng)度來(lái)定義匹配強(qiáng)度,例如表A的字段1和表B的字段2通過(guò)值“qwert”匹配,則他們的匹配長(zhǎng)度為匹配值“qwert”的有效長(zhǎng)度5。
依次執(zhí)行以上四個(gè)步驟,最終我們獲取到了時(shí)間序列的第N個(gè)SQL查詢語(yǔ)句對(duì)應(yīng)的數(shù)據(jù)庫(kù)表與前序表、字段的匹配關(guān)系,至此我們已經(jīng)完成了對(duì)數(shù)據(jù)庫(kù)表關(guān)系的自動(dòng)分析。
最后,還需要注意的是,以上列舉的僅是本發(fā)明的一個(gè)具體實(shí)施例。顯然,本發(fā)明不限于以上實(shí)施例,還可以有許多變形。本領(lǐng)域的普通技術(shù)人員能從本發(fā)明公開的內(nèi)容直接導(dǎo)出或聯(lián)想到的所有變形,均應(yīng)認(rèn)為是本發(fā)明的保護(hù)范圍。