針對(duì)數(shù)據(jù)庫中元數(shù)據(jù)的采集方法設(shè)計(jì)與實(shí)現(xiàn)
摘 要:
摘 要:數(shù)據(jù)庫中元數(shù)據(jù)的采集是標(biāo)準(zhǔn)符合性檢測等工作的基礎(chǔ)。為了獲取數(shù)據(jù)庫中的元數(shù)據(jù)信息,文章提出了針對(duì)多種數(shù)據(jù)庫中元數(shù)據(jù)的采集方法設(shè)計(jì)。該采集方法采用了字符串連接數(shù)據(jù)庫的方法實(shí)現(xiàn)了對(duì)多個(gè)不同數(shù)據(jù)庫的連接,根據(jù)連接的數(shù)據(jù)庫使用相應(yīng)的元數(shù)據(jù)查詢SQL語句來實(shí)現(xiàn)對(duì)元數(shù)據(jù)的采集,最后使用xml文件的形式保存元數(shù)據(jù)。
關(guān)鍵詞:
關(guān)鍵詞:數(shù)據(jù)庫 元數(shù)據(jù) 信息采集
元數(shù)據(jù)是指用于描述數(shù)據(jù)的數(shù)據(jù),是對(duì)數(shù)據(jù)及信息資源的描述性信息。本文中所要采集的數(shù)據(jù)庫中元數(shù)據(jù)主要是數(shù)據(jù)庫中對(duì)表的定義,字段的定義等,這些元數(shù)據(jù)信息是在標(biāo)準(zhǔn)符合性檢測工作中所需要檢測的信息。
標(biāo)準(zhǔn)符合性檢測是指根據(jù)國家和行業(yè)信息化的系列數(shù)據(jù)標(biāo)準(zhǔn)、技術(shù)文件及信息系統(tǒng)設(shè)計(jì)文件等中的規(guī)定,對(duì)信息系統(tǒng)的數(shù)據(jù)字典、數(shù)據(jù)庫表結(jié)構(gòu)及數(shù)據(jù)庫內(nèi)容等與標(biāo)準(zhǔn)的符合程度進(jìn)行檢測的活動(dòng)。其中在對(duì)數(shù)據(jù)庫表結(jié)構(gòu)進(jìn)行標(biāo)準(zhǔn)符合性檢測時(shí),需要使用數(shù)據(jù)庫中表的元數(shù)據(jù)與相關(guān)標(biāo)準(zhǔn)進(jìn)行比較。數(shù)據(jù)庫中元數(shù)據(jù)采集的需求正是在這樣的條件下產(chǎn)生的。
1 采集的元數(shù)據(jù)內(nèi)容
根據(jù)標(biāo)準(zhǔn)符合性檢測的需求,我們將需要采集的元數(shù)據(jù)內(nèi)容確定為表的元數(shù)據(jù)與字段的元數(shù)據(jù)。表的元數(shù)據(jù)信息主要包括標(biāo)的名稱、表的記錄數(shù)、表的大小、表包含的字段、表的主鍵等,字段的元數(shù)據(jù)信息主要字段的名稱、字段的數(shù)據(jù)類型、字段占用字節(jié)數(shù)、字段是否允許為空、字段的備注信息等。
對(duì)于不同的數(shù)據(jù)庫,數(shù)據(jù)庫的元數(shù)據(jù)的存儲(chǔ)地址都不相同,元數(shù)據(jù)的信息存儲(chǔ)形式也不盡相同。如在SQL Server中字段的信息主要存儲(chǔ)在syscolumns、systypes 、sys.extended_properties等表中,而在Oracle數(shù)據(jù)庫中字段的信息主要存儲(chǔ)在USER_TAB_COLUMN 、USER_COL_COMMENTS表中且存儲(chǔ)的名稱也不相同。因此,采集元數(shù)據(jù)內(nèi)容時(shí)需要根據(jù)數(shù)據(jù)庫類型的不同,在不同表中采集數(shù)據(jù)庫元數(shù)據(jù)的信息。
2 元數(shù)據(jù)查詢SQL語句的設(shè)計(jì)
由于不同的數(shù)據(jù)庫中元數(shù)據(jù)信息存儲(chǔ)的方式不同,因此在元數(shù)據(jù)查詢SQL語句的設(shè)計(jì)中需要根據(jù)不同的數(shù)據(jù)庫來設(shè)計(jì)不同的SQL語句。針對(duì)SQL Server數(shù)據(jù)庫的SQL語句編寫如下:
從syscolumns表中獲取表的名字、字段序號(hào)、字段名、字段的數(shù)據(jù)類型、字段占用字節(jié)數(shù)、允許為空命名分別命名為dataTable、dataID、fieldName、dataType、fieldLen、idNull,再從sys.extended_properties表中獲取字段說明命名為memo。在連表查詢時(shí)從systypes表中取xtype值為U的項(xiàng),確保表的信息是用戶創(chuàng)建的表,而非數(shù)據(jù)庫系統(tǒng)表。
在oracle數(shù)據(jù)庫中字段的信息位置與SQL Server數(shù)據(jù)庫不同,因此,oracle數(shù)據(jù)庫與SQL Server數(shù)據(jù)庫的查詢SQL語句在列名稱,表名稱方面有所不同。
在抽取不同數(shù)據(jù)庫的元數(shù)據(jù)信息時(shí),采用的SELECT語句的結(jié)構(gòu)順序必須相同,使生成元數(shù)據(jù)信息結(jié)構(gòu)相同,便于元數(shù)據(jù)信息的下一步使用和操作。
3 采集的流程設(shè)計(jì)
在采集數(shù)據(jù)庫中元數(shù)據(jù)時(shí),我們需要對(duì)數(shù)據(jù)庫進(jìn)行訪問。在這里我們采用ADO的方式訪問數(shù)據(jù)庫。采用ADO的方式訪問數(shù)據(jù)庫,在用C#語言實(shí)現(xiàn)時(shí)可以分為以下幾個(gè)步驟:
第一, 調(diào)用命名空間。對(duì)于SQL Server數(shù)據(jù)庫需要引入System.Data.SqlClient命名空間。
第二, 創(chuàng)建連接字符串。連接字符串的創(chuàng)建需要用戶在界面輸入服務(wù)器地址、數(shù)據(jù)庫類型、數(shù)據(jù)庫端口號(hào)、用戶名、密碼等目標(biāo)數(shù)據(jù)庫的信息。
第三, 創(chuàng)建連接的對(duì)象。使用關(guān)鍵字SqlConnection創(chuàng)建連接的對(duì)象。
第四, 連接數(shù)據(jù)庫。使用連接對(duì)象的Open()函數(shù)連接數(shù)據(jù)庫。
第五, 創(chuàng)建SQL字符串 connString。創(chuàng)建設(shè)計(jì)完成的元數(shù)據(jù)SQL查詢語句。
第六, 新建查詢的一個(gè)對(duì)象。使用關(guān)鍵字SqlCommand創(chuàng)建查詢的對(duì)象。
第七, 對(duì)對(duì)象的操作。使用ExecuteScalar();ExecuteReader();ExecuteNonQuery()等函數(shù)獲得查詢的結(jié)果,將結(jié)果以datatable或dataset的形式存儲(chǔ)。
第八, 關(guān)閉連接。使用連接對(duì)象的Close()函數(shù)關(guān)閉連接。
經(jīng)過上面的數(shù)據(jù)庫訪問步驟,就可以得到所要查找的元數(shù)據(jù)的內(nèi)容。將返回的元數(shù)據(jù)結(jié)構(gòu)在界面的dataGridView控件中顯示,用戶可以將元數(shù)據(jù)內(nèi)容保存為xml文件形式。
4 采集后元數(shù)據(jù)的保存
對(duì)于采集后的數(shù)據(jù)庫元數(shù)據(jù)信息采用xml文件的形式進(jìn)行保存。使用xml文件可以方便實(shí)現(xiàn)元數(shù)據(jù)內(nèi)容的傳送和保存。在保存數(shù)據(jù)時(shí)時(shí)我們自定義了xml文件的格式,使得xml文件的格式更加清晰明了。
由于NET Framework也提供了一個(gè)快速、非緩存、只向前的方式動(dòng)態(tài)寫入xml數(shù)據(jù)的類,即XmlWriter類。因此,在實(shí)現(xiàn)時(shí)調(diào)用這個(gè)類實(shí)現(xiàn)xml文件的寫入和保存。自定義xml文件的具體實(shí)現(xiàn)為:使用WriteStartElement函數(shù)創(chuàng)建當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn),并設(shè)置節(jié)點(diǎn)的屬性及其值,WriteEndElement函數(shù)來結(jié)束一個(gè)節(jié)點(diǎn)。WriteElementString函數(shù)來寫入節(jié)點(diǎn)包含的屬性及值。
5 結(jié)語
在對(duì)數(shù)據(jù)庫中元數(shù)據(jù)的采集過程中,完成了對(duì)部分的元數(shù)據(jù)的采集和存儲(chǔ)過程,并提供了較為友好的展示界面,但是還存在采集的元數(shù)據(jù)信息不夠全面的問題。在下一階段的研究中需要繼續(xù)研究元數(shù)據(jù)信息在不同的數(shù)據(jù)庫中的存儲(chǔ),并優(yōu)化查詢的SQL語句來獲取更多,,更全面的元數(shù)據(jù)。
參考文獻(xiàn):
[1]戴維森.SQL Server 2008數(shù)據(jù)庫設(shè)計(jì)與實(shí)現(xiàn)[M].北京:人民郵電出版社,2009.
[2]徐菁.元數(shù)據(jù)的設(shè)計(jì)原則和實(shí)用中的問題[J].圖書館理論與實(shí)踐,2008(6):48-51.
[3]希爾伯沙茨.數(shù)據(jù)庫系統(tǒng)概念[M].北京:機(jī)械工業(yè)出版社,2008.
[4]張紅強(qiáng). Oracle數(shù)據(jù)庫實(shí)例教程[M].天津:天津大學(xué)出版社,2009.
[5]王珊. 數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2006.
本文編號(hào):14537
本文鏈接:http://sikaile.net/kejilunwen/jisuanjikexuelunwen/14537.html