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