孟凡榮,閆秋艷
(中國礦業(yè)大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,徐州221116)
數(shù)據(jù)庫技術(shù)產(chǎn)生于20 世紀(jì)60 年代末70 年代初,其主要目的是有效地管理和存取大量的數(shù)據(jù)資源。數(shù)據(jù)庫技術(shù)主要研究如何存儲、使用和管理數(shù)據(jù)[1]。數(shù)年來,數(shù)據(jù)庫技術(shù)和計算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展相互滲透,相互促進(jìn),已成為當(dāng)今計算機(jī)領(lǐng)域發(fā)展迅速,應(yīng)用廣泛的兩大領(lǐng)域。數(shù)據(jù)庫技術(shù)不僅應(yīng)用于事務(wù)處理,并且進(jìn)一步應(yīng)用到情報檢索、人工智能、專家系統(tǒng)、計算機(jī)輔助設(shè)計等領(lǐng)域[2]。
從20 世紀(jì)60 年代末期開始到如今,數(shù)據(jù)庫技術(shù)已經(jīng)發(fā)展了半個多世紀(jì)。在這發(fā)展歷程中,人們在數(shù)據(jù)庫技術(shù)的理論研究和系統(tǒng)開發(fā)上都取得了輝煌的成就,而且已經(jīng)開始對新一代數(shù)據(jù)庫系統(tǒng)的深入研究[3]。數(shù)據(jù)庫系統(tǒng)已經(jīng)成為現(xiàn)代計算機(jī)系統(tǒng)的重要組成部分。數(shù)據(jù)庫最初是在大公司或大機(jī)構(gòu)中用作大規(guī)模事務(wù)處理的基礎(chǔ)。后來隨著個人計算機(jī)的普及,數(shù)據(jù)庫技術(shù)被移植到PC(Personal Computer,個人計算機(jī))上,供單用戶個人數(shù)據(jù)庫應(yīng)用,接著,由于PC 在工作組內(nèi)連成網(wǎng),數(shù)據(jù)庫技術(shù)就移植到工作組級。如今,數(shù)據(jù)庫正在Internet 和內(nèi)聯(lián)網(wǎng)中廣泛使用[4]。
數(shù)據(jù)庫技術(shù)是通過研究數(shù)據(jù)庫的結(jié)構(gòu)、存儲、設(shè)計、管理以及應(yīng)用的基本理論和實現(xiàn)方法,并利用這些理論來實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行處理、分析和理解的技術(shù)[5]。即:數(shù)據(jù)庫技術(shù)是研究、管理和應(yīng)用數(shù)據(jù)庫的一門軟件科學(xué)[6]。數(shù)據(jù)庫技術(shù)研究和管理的對象是數(shù)據(jù),所以數(shù)據(jù)庫技術(shù)所涉及的具體內(nèi)容主要包括:通過對數(shù)據(jù)的統(tǒng)一組織和管理,按照指定的結(jié)構(gòu)建立相應(yīng)的數(shù)據(jù)庫和數(shù)據(jù)倉庫;利用數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)挖掘系統(tǒng)設(shè)計出能夠?qū)崿F(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行添加、修改、刪除、處理、分析、理解、報表和打印等多種功能的數(shù)據(jù)管理和數(shù)據(jù)挖掘應(yīng)用系統(tǒng);并利用應(yīng)用管理系統(tǒng)最終實現(xiàn)對數(shù)據(jù)的處理、分析和理解[7]。
在數(shù)據(jù)庫技術(shù)中,一個關(guān)鍵的步驟就是數(shù)據(jù)庫的邏輯設(shè)計,數(shù)據(jù)庫設(shè)計的好壞會直接影響數(shù)據(jù)存儲和處理的性能[8]。所以,為了解決數(shù)據(jù)庫中數(shù)據(jù)的插入、刪除、修改異常等問題,必須形成一系列規(guī)范化的規(guī)則,稱為關(guān)系規(guī)范化理論[9]。關(guān)系規(guī)范化理論是數(shù)據(jù)庫邏輯設(shè)計的指南和工具,其涉及到考查關(guān)系模型的函數(shù)依賴關(guān)系、確定范式等級和對關(guān)系模式進(jìn)行合并或分解[10]。關(guān)系規(guī)范化理論提供了判斷關(guān)系邏輯模式優(yōu)劣的理論標(biāo)準(zhǔn),幫助預(yù)測模式可能出現(xiàn)的問題,是產(chǎn)生各種模式的算法工具,因此是設(shè)計人員的有力工具[11]。而在實際教學(xué)中,關(guān)系規(guī)范化理論往往較為抽象,且計算較為復(fù)雜,為了使教學(xué)人員在教學(xué)中可以方便地得到關(guān)系規(guī)范化理論的結(jié)果,提高教學(xué)質(zhì)量和水平,本文對關(guān)系規(guī)范化理論中的最小覆蓋、函數(shù)依賴保持和無損分解問題進(jìn)行了程序?qū)崿F(xiàn),只要輸入關(guān)系模式和函數(shù)依賴關(guān)系,就可以得到相應(yīng)的結(jié)果輸出,從而可以極大提高課堂教學(xué)效果,保證教學(xué)質(zhì)量和水平。
本文針對最小覆蓋、函數(shù)依賴保持、無損分解進(jìn)行代碼實現(xiàn),并展示程序運(yùn)行結(jié)果。本文程序基于Python 2.7.9 語言編寫,并在2.94GHz、3GB 內(nèi)存配置的Windows 7 上運(yùn)行。
定義3:如果函數(shù)依賴集F 滿足下列條件,則稱F是一個極小函數(shù)依賴集或最小覆蓋。
(1)F 中每一個函數(shù)依賴的右部都是單個屬性。
(2)對F 中任一函數(shù)依賴X→A,F(xiàn)-{X→A}都不與F 等價。
(3)對于F 中的任一函數(shù)依賴X→A,{F-{X→A}}∪{Z-A}都不與F 等價,其中Z 為X 的任一子集。
設(shè)有關(guān)系模式R(U,F),其中U 表示表示屬性集合,F(xiàn) 表示函數(shù)依賴,求F 最小覆蓋的步驟如下。
(1)將F 的所有函數(shù)依賴的右部分解成單一屬性,并去掉重復(fù)屬性。
(2)分別F 中考察各個函數(shù)依賴,去掉冗余的函數(shù)依賴。
(3)去掉F 中冗余的屬性。
由于該材料碳含量高、碳化物數(shù)量多,因此預(yù)熱可以減少熱應(yīng)力從而減少零件的變形和開裂傾向。對于航空等精度要求高、形狀復(fù)雜的鍛件,為防止開裂,淬火后可先在100℃左右進(jìn)行去應(yīng)力處理。
求F 最小覆蓋的實驗代碼如下。
檢驗一個分解是否具有函數(shù)依賴保持性,其實就是檢函數(shù)依賴集是否和原函數(shù)集F 等價,其判斷函數(shù)依賴集等價的步驟如下。
其實驗代碼如下。
分解的無損連接性是通過構(gòu)建屬性表的方式來判斷,其算法步驟如下。
輸出:確定ρ 是否是一個連接不失真分解。
(1)構(gòu)造一個n 列k 行表,第i 行對應(yīng)于Ri,第j 列對應(yīng)于屬性Aj。
(2)填表:若Ai∈Ri,則第i 行第j 列上填入aj,否則填入bij。
(3)修改表:逐一檢查F 中每一個函數(shù)依賴X →Y,如果在對應(yīng)于X 的那些屬性的所有列上X 的符號相同,就使這些符號相同的行中對應(yīng)于Y 的那些屬性的所有列上的符號相同。即如果其中有aj,則將bij改為aj;若無aj,則將它們?nèi)臑閎ij。一般說,i 是其中最小行號。
(4)反復(fù)進(jìn)行步驟3,如發(fā)現(xiàn)某一行變成a1,a2,…,ak,則此分解具有連接不失真性。
其實驗代碼如下。
本文針對關(guān)系規(guī)范化理論中最小覆蓋、函數(shù)依賴保持和無損分解判斷問題,基于Python 語言進(jìn)行了程序?qū)崿F(xiàn),從而使教學(xué)人員在實際教學(xué)中只需要進(jìn)行簡單的輸入,就能得到最小覆蓋、函數(shù)依賴保持和無損分解判斷問題的結(jié)果,提高了數(shù)據(jù)庫關(guān)系規(guī)范化理論教學(xué)的質(zhì)量和水平,減輕了教學(xué)人員的講解和課業(yè)負(fù)擔(dān),有利于數(shù)據(jù)庫技術(shù)教學(xué)的改進(jìn)。