大數(shù)據(jù)時(shí)代,審計(jì)進(jìn)入數(shù)字化模式,采集獲取、整理分析被審計(jì)單位的各類電子數(shù)據(jù)成為一項(xiàng)重要的基礎(chǔ)性工作,能否有一種直觀、高效的方法,方便審計(jì)人員對電子數(shù)據(jù)的理解?筆者認(rèn)為,數(shù)據(jù)庫表的漢化,是一個(gè)有效方式。 一、漢化的作用 審計(jì)人員在對電子數(shù)據(jù)進(jìn)行審計(jì)分析時(shí),需編寫查詢語句,完成數(shù)據(jù)的篩選、統(tǒng)計(jì),這就要求必須掌握電子數(shù)據(jù)結(jié)構(gòu)、表間關(guān)系、字段含義。 庫表漢化,就是把英文或者字母代表的表名、字段名改為漢字,達(dá)到見名知意的目的。這樣可以提高審計(jì)人員對數(shù)據(jù)庫表間關(guān)系、字段含義的理解,減少對數(shù)據(jù)含義的陌生感,降低因理解有誤而出錯(cuò)的幾率。 二、傳統(tǒng)漢化方法的分析 (一)select…into…語句 對于數(shù)據(jù)量比較小的數(shù)據(jù),可以通過數(shù)據(jù)字典或者個(gè)人猜測,在使用select語句做查詢時(shí),用中文名稱來定義所取得字段的別名,通過into子句把數(shù)據(jù)結(jié)果放入一張新表中,可以說是邊用邊漢化的方式。 這種方式的優(yōu)點(diǎn)是實(shí)現(xiàn)起來比較簡單。不足是僅限于查詢結(jié)果的字段名稱,范圍有限;因?yàn)榘呀Y(jié)果放到了新表中,增加了存儲空間的使用,建議在大數(shù)據(jù)的場合避免使用。 (二)使用存儲過程sp_rename 存儲過程sp_rename可以對表、字段進(jìn)行重命名。為了提高運(yùn)行效率,首先根據(jù)數(shù)據(jù)字典或者字段解釋編制新舊表、新舊字段的對應(yīng)關(guān)系,而后使用sql腳本或者編寫小工具,使用整理的對應(yīng)關(guān)系逐個(gè)對表、字段進(jìn)行重命名。 這種方式適合于各種場合,只要數(shù)據(jù)在MS SQL Server的環(huán)境中存儲。但是這種漢化的方式,從技術(shù)的角度看,改動(dòng)了處于數(shù)據(jù)庫三種模式:內(nèi)模式、模式、外模式的中間層——“模式”,一旦改動(dòng),直接對外模式有根本的影響。如果被審計(jì)單位提供了參考的sql語句,這時(shí)只有把這些語句中的字段“再次漢化”后才能進(jìn)行驗(yàn)證或使用,依靠人力來完成,轉(zhuǎn)換過程中不免會有疏漏。 三、庫表漢化的新思路 能不能找到其他的漢化方式呢?根據(jù)數(shù)據(jù)庫“三種模式,兩種轉(zhuǎn)換”原理,獨(dú)辟蹊徑,選擇外模式為漢化地點(diǎn),充分利用三種模式兩種轉(zhuǎn)換的特點(diǎn),發(fā)揮外模式的邏輯結(jié)構(gòu)功能,使用視圖來完成漢化。 視圖,是一種邏輯表,不占用額外的數(shù)據(jù)存儲空間,且與物理表相互獨(dú)立,不用修改表、字段的名稱,且結(jié)果和物理表一致。唯一增加的,是視圖定義,而視圖定義的本質(zhì)就是一個(gè)select查詢語句。 與上述第一種傳統(tǒng)方法相比,相同的都是在select語句中使用中文名稱定義字段的別名;不同的不是把結(jié)果放到新表中,只是創(chuàng)建視圖對象,避免占用存儲空間。 與上述第二種傳統(tǒng)方法相比,通過訪問視圖而不是原始表,既完成了庫表字段的漢化,能以熟悉的中文名稱完成查詢語句;又因表、字段本身并沒有進(jìn)行修改,還可直接(或作修改)執(zhí)行被審計(jì)單位提供的sql語句進(jìn)行結(jié)果驗(yàn)證。 四、視圖實(shí)現(xiàn)庫表漢化 視圖,是數(shù)據(jù)庫產(chǎn)品都支持的一個(gè)功能,作為庫表漢化的新方法,適應(yīng)性較強(qiáng)。下面以MS SQL Server數(shù)據(jù)庫為例,介紹漢化過程。 (一)獲取字段說明 在獲取數(shù)據(jù)時(shí),如果被審計(jì)單位沒有提供數(shù)據(jù)字典,則需要提供表及表中每個(gè)字段的中文含義,根據(jù)這些信息,整理出字段、名稱的對應(yīng)關(guān)系,具體工作就是從字典或表結(jié)構(gòu)說明中選中需要的字段和字段釋義,復(fù)制粘貼至文本文件中備用。 (二)使用正則表達(dá)式,生成創(chuàng)建視圖的sql語句 正則表達(dá)式,是一種定義好的詞語“模式”,用以在不確定、模糊的文字內(nèi)容中進(jìn)行精確地搜索與提取的智能技術(shù)。它使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的文字內(nèi)容。很多文本編輯器都支持用正則表達(dá)式來檢索、替換符合文本的功能,比如UltraEdit、WinHex,甚至在Word中也能找到正則表達(dá)式的身影。 找出字段、名稱的對應(yīng)關(guān)系的規(guī)律,編寫正則表達(dá)式(不同的文本編輯器,其正則表達(dá)式的具體語法有所不同,但概念是一致的),提取出需要的兩個(gè)內(nèi)容——英文字段名、中文含義,再使用提取出的內(nèi)容,根據(jù)創(chuàng)建視圖的語法組合出sql語句。 以下是在MS Sql Server Management Studio的編輯器中的操作步驟: 1. 編寫創(chuàng)建視圖的sql語句框架,將整理出字段、名稱的對應(yīng)關(guān)系復(fù)制至sql語句中(如圖1所示); 2. 觀察字段、名稱的對應(yīng)關(guān)系,使用SSMS編輯器所支持的正則表達(dá)式的語法,定義查找、替換的正則表達(dá)式(如圖2所示):查找內(nèi)容的表達(dá)式為{[^:b]+}:b+{[^:b]+}\n,替換內(nèi)容的表達(dá)式為\2 as \[\1\],\n。前者把字段名、中文名給“摳”出來,后者則是重排“摳”出來的內(nèi)容; 3. 選中相關(guān)文本行,執(zhí)行替換操作,得到創(chuàng)建視圖的sql語句(如圖3所示); 4. 刪除最后一個(gè)“,”,再進(jìn)行適當(dāng)?shù)亩温淇s進(jìn),就可以得到創(chuàng)建視圖的sql語句,選中整個(gè)語句并執(zhí)行,完成一個(gè)漢化視圖的創(chuàng)建操作。 對需要漢化的每一個(gè)表,都進(jìn)行同樣的操作,創(chuàng)建與之對應(yīng)的視圖,實(shí)現(xiàn)通過視圖漢化庫表的設(shè)想。 五、總結(jié) 使用視圖的思路,不僅可以解決庫表的漢化功能,也可以在不規(guī)范的業(yè)務(wù)數(shù)據(jù)向數(shù)據(jù)規(guī)劃中定義的相對規(guī)范的數(shù)據(jù)轉(zhuǎn)換過程中,發(fā)揮積極有效的作用。使用視圖進(jìn)行漢化也存在著不足,如局限于大數(shù)據(jù)環(huán)境的應(yīng)用;查詢語句的執(zhí)行效率不高;AO中只能采用連接大型數(shù)據(jù)庫的方式來使用等。 實(shí)現(xiàn)數(shù)據(jù)庫表漢化的方法很多,這里提出的視圖漢化的思路,只是本人在工作中的一點(diǎn)思考,希望能與大家分享交流。(薛寧) |
|