數(shù)據(jù)庫管理系統(tǒng)總體設(shè)計(jì)_第1頁
數(shù)據(jù)庫管理系統(tǒng)總體設(shè)計(jì)_第2頁
數(shù)據(jù)庫管理系統(tǒng)總體設(shè)計(jì)_第3頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、圖書倉庫管理系統(tǒng)本系統(tǒng)主要完成對(duì)圖書倉庫的庫存管理,包括圖書入庫、出庫、庫存,員工信息,供應(yīng)商信 息以及密碼管理等六個(gè)方面。系統(tǒng)可以完成對(duì)各類信息的瀏覽、查詢、添加、刪除、修改、 報(bào)表等功能。系統(tǒng)的核心是入庫、 庫存和出庫三者之間的聯(lián)系, 每一個(gè)表的修改都將聯(lián)動(dòng)的影響其它的表, 當(dāng)完成入庫或出庫操作時(shí)系統(tǒng)會(huì)自動(dòng)地完成庫存的修改。 查詢功能也是系統(tǒng)的核心之一, 在 系統(tǒng)中即有單條件查詢和多條件查詢, 也有精確查詢和模糊查詢, 系統(tǒng)不僅有靜態(tài)的條件查 詢,也有動(dòng)態(tài)生成的條件查詢,其目的都是為了方便用戶使用。系統(tǒng)有完整的用戶添加、刪 除和密碼修改功能,并具備報(bào)表打印功能。系統(tǒng)采用 Microsoft

2、 Office 中的 Access 2000 來設(shè)計(jì)數(shù)據(jù)庫,并使用當(dāng)前優(yōu)秀的開發(fā)工具 Delphi 6.0 ,它有著最為靈活的數(shù)據(jù)庫結(jié)構(gòu),對(duì)數(shù)據(jù)庫應(yīng)用有著良好的支持。論文主要介紹了本課題的開發(fā)背景, 所要完成的功能和開發(fā)的過程。 重點(diǎn)的說明了系統(tǒng)設(shè)計(jì) 的重點(diǎn)、設(shè)計(jì)思想、難點(diǎn)技術(shù)和解決方案。關(guān)鍵字:數(shù)據(jù)庫, SQL 語言, Delph 6 ,數(shù)據(jù)庫組件,倉庫管理目錄第一章引言 11.1 課題來源 11.2 開發(fā)工具的選擇 21.3 所做的主要工作 3第二章數(shù)據(jù)庫概論 42.1 數(shù)據(jù)庫的發(fā)展 4數(shù)據(jù)庫的發(fā)展 42.1.2 數(shù)據(jù)庫階段的特點(diǎn) 52.1.3 數(shù)據(jù)庫技術(shù) 62.2 數(shù)據(jù)庫理論基礎(chǔ) 72.

3、2.1 數(shù)據(jù)庫模型 7數(shù)據(jù)庫體系結(jié)構(gòu) 102.2.3 數(shù)據(jù)的獨(dú)立性 112.2.4 范式 112.3 SQL語言基礎(chǔ) 132.3.1 SQL 簡介 132.3.2 SQL 查詢 132.3.3 SQL數(shù)據(jù)更新 14第三章數(shù)據(jù)庫開發(fā)工具 163.1 Delphi 6.0 簡介 163.2 Delphi 6.0 控件 173.2.1 ADO 數(shù)據(jù)訪問組件 17322數(shù)據(jù)控制類DataControl 183.2.3 數(shù)據(jù)訪問類DataAccess 183.2.4 SQL語言在Delphi中的應(yīng)用 193.3 Access 簡介 21第四章系統(tǒng)總體設(shè)計(jì) 234.1系統(tǒng)需求分析 234.2系統(tǒng)概要設(shè)計(jì)

4、254.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 25數(shù)據(jù)庫設(shè)計(jì) 2 ER 圖設(shè)計(jì) 2 數(shù)據(jù)庫表格設(shè)計(jì) 294.3系統(tǒng)詳細(xì)設(shè)計(jì) 34第五章系統(tǒng)應(yīng)用程序設(shè)計(jì) 375.1 系統(tǒng)窗體模塊組成 375.2 數(shù)據(jù)模塊窗體設(shè)置 385.3 主窗體功能模塊的實(shí)現(xiàn) 395.4 入庫、出庫窗體模塊的實(shí)現(xiàn) 435.5 查詢功能的實(shí)現(xiàn) 515.6 系統(tǒng)登陸窗體模塊的實(shí)現(xiàn) 525.7 用戶管理功能的實(shí)現(xiàn) 545.7.1 用戶管理主窗體 545.7.2 密碼修改窗體模塊的實(shí)現(xiàn) 54用戶注冊(cè)窗體模塊的實(shí)現(xiàn) 55用戶注銷窗體模塊的實(shí)現(xiàn) 57結(jié)束語 59致謝 60參考文獻(xiàn) 61第一章 引 言§1.1 課

5、題來源隨著社會(huì)經(jīng)濟(jì)的迅速發(fā)展和科學(xué)技術(shù)的全面進(jìn)步, 計(jì)算機(jī)事業(yè)的飛速發(fā)展, 以計(jì)算機(jī)與通信 技術(shù)為基礎(chǔ)的信息系統(tǒng)正處于蓬勃發(fā)展的時(shí)期。 隨著經(jīng)濟(jì)文化水平的顯著提高, 人們對(duì)生活 質(zhì)量及工作環(huán)境的要求也越來越高。 書籍做為人類的精神食糧, 在現(xiàn)代社會(huì)中越來越受到重 視,大量的書籍出現(xiàn)在市場(chǎng)上,人們有了各種各樣不同的選擇。與此同時(shí),為了管理大量的 圖書,圖書倉庫也大量的出現(xiàn),倉庫的管理問題也就提上了日程。隨著圖書的大量增加,其 管理難度也越來越大,如何優(yōu)化倉庫的日常管理也就成為了一個(gè)大眾化的課題。 在計(jì)算機(jī)飛速發(fā)展的今天,將計(jì)算機(jī)這一信息處理利器應(yīng)用于倉庫的日常管理已是勢(shì)必所 然,而且這也將為倉庫

6、管理帶來前所未有的改變, 它可以帶來意想不到的效益, 同時(shí)也會(huì)為 企業(yè)的飛速發(fā)展提供無限潛力。 采用計(jì)算機(jī)管理信息系統(tǒng)已成為倉庫管理科學(xué)化和現(xiàn)代化的 重要標(biāo)志,它給企業(yè)管理來了明顯的經(jīng)濟(jì)效益和社會(huì)效益。主要體現(xiàn)在: 極大提高了倉庫工作人員的工作效率, 大大減少了以往入出存流程繁瑣, 雜亂,周期長的弊 端?;趥}庫管理的全面自動(dòng)化, 可以減少入庫管理、 出庫管理及庫存管理中的漏洞, 可以節(jié)約 不少管理開支,增加企業(yè)收入。倉庫的管理的操作自動(dòng)化和信息的電子化,全面提高了倉庫的管理水平。 隨著我國改革開放的不斷深入,經(jīng)濟(jì)飛速的發(fā)展,企業(yè)要想生存、發(fā)展,要想在激烈的市場(chǎng) 競爭中立于不敗之地, 沒有現(xiàn)代

7、化的管理是萬萬不行的, 倉庫管理的全面自動(dòng)化、 信息化則 是其中極其重要的部分。為了加快倉庫管理自動(dòng)化的步伐,提高倉庫的管理業(yè)務(wù)處理效率, 建立倉庫管理系統(tǒng)已變得十分心要。入庫、庫存、出庫還是現(xiàn)在企業(yè)圖書倉庫管理的常規(guī)基本模式,雖然,最近又出現(xiàn)了很多新 的管理模式, 如:基于零庫存思想的沃爾瑪特管理方式, 但這些新的思想在中國大部分企業(yè) 的管理中還是難以實(shí)現(xiàn)的。 所以如何設(shè)計(jì)好倉庫管理系統(tǒng), 盡可能地減少倉庫管理的重復(fù)性 和低效性就成為當(dāng)前最為重要的問題。 圖書倉庫管理的核心是入庫、 庫存和出庫之間的聯(lián)系, 如何處理好三者之間的關(guān)系是系統(tǒng)最為關(guān)鍵的部分。另外, 員工信息和供應(yīng)商信息管理也是倉庫

8、管理中一個(gè)必不可少的部分, 它提供著與入庫和出庫相關(guān)的地一些信息, 使得整個(gè)系統(tǒng) 更加完整,更加實(shí)用。通過對(duì)倉庫管理日常工作的詳細(xì)調(diào)查, 搜集了大量的資料, 從系統(tǒng)結(jié)構(gòu)的組織, 功能的實(shí)現(xiàn), 技術(shù)的要求以及可行性等多方面進(jìn)行考慮, 認(rèn)為本課題是一個(gè)適應(yīng)現(xiàn)今圖書倉庫管理需求的 計(jì)算機(jī)信息管理系統(tǒng),具有一定的實(shí)際開發(fā)價(jià)值和使用價(jià)值。§ 1.2 開發(fā)工具的選擇自 Java 誕生以來, 隨著 Internet 技術(shù)的普及和應(yīng)用需求的變化, 以第四代語言為主的應(yīng)用開 發(fā)產(chǎn)品發(fā)生了較大的變化, 它們不僅已成為人們開發(fā)應(yīng)用的開發(fā)工具, 而且很多產(chǎn)品已發(fā)展 成為一種強(qiáng)有力的應(yīng)用開發(fā)環(huán)境。 這些新型的

9、開發(fā)工具通常以一種集成軟件包的形式提供給 開發(fā)人員,被稱為Studio (工作室)或Suite (程序組)。例如,微軟的Visual Studio 6.0 , Borland 公司的 Delphi 6.0 等數(shù)據(jù)庫輔助開發(fā)工具?,F(xiàn)在,市場(chǎng)上可以選購的應(yīng)用開發(fā)產(chǎn)品很多,流行的也有數(shù)十種。目前在我國市場(chǎng)上最為 流行、使用最多、最為先進(jìn)的可用作企業(yè)級(jí)開發(fā)工具的產(chǎn)品有:Microsoft 公司的 Visual Basic 6.0 版 Microsoft 公司的 Visual C+6.0 版 Borland 公司的 Delphi 6.0 版 在目前市場(chǎng)上這些眾多的程序開發(fā)工具中, 有些強(qiáng)調(diào)程語言的彈性與

10、執(zhí)行效率; 有些則偏重 于可視化程序開發(fā)工具所帶來的便利性與效率的得高,各有各的優(yōu)點(diǎn)和特色, 也滿足了不同用戶的需求。然而,語言的彈性和工具的便利性是密不可分的,只有便利的工具,卻沒有彈 性的語言作支持, 許多特殊化的處理動(dòng)作必需要耗費(fèi)數(shù)倍的工夫來處理,使得原來所標(biāo)榜的效率提高的優(yōu)點(diǎn)失去了作用;相反,如果只強(qiáng)調(diào)程語言的彈性,卻沒有便利的工具作配合, 會(huì)使一些即使非常簡單的界面處理動(dòng)作,也會(huì)嚴(yán)重地浪費(fèi)程序設(shè)計(jì)師的寶貴時(shí)間。而 Delphi 是一個(gè)非常理想選擇。 Delphi 6 是操作系統(tǒng)中快速應(yīng)用開發(fā)環(huán)境的最新版本。它 也是當(dāng)前 Windows 平臺(tái)上第一個(gè)全面支持最新 Web 服務(wù)的快速開發(fā)

11、工具。無論是企業(yè)級(jí)用 戶,還是個(gè)人開發(fā)者,都能夠利用 Delphi 6 輕松、快捷地構(gòu)建新一代電子商務(wù)應(yīng)用。 Delphi 6 是惟一支持所有新出現(xiàn)的工業(yè)標(biāo)準(zhǔn)的 RAD 環(huán)境,包括 XML (擴(kuò)展標(biāo)記語言) /XSL (可 擴(kuò)展樣式語言) , SOAP (簡單對(duì)象存取協(xié)議)和 WSDL ( Web 服務(wù)器描述語言)等。Delphi 6 是可視化的快速應(yīng)用程序開發(fā)語言, 它提供了可視化的集成開發(fā)環(huán)境, 這一環(huán)境為 應(yīng)用程序設(shè)計(jì)人員提供了一系列靈活而先進(jìn)的工具, 可以廣泛地用于種類應(yīng)用程序設(shè)計(jì)。 在 Delphi 6 的集成開發(fā)環(huán)境中,用戶可以設(shè)計(jì)程序代碼、運(yùn)行程序、進(jìn)行程序錯(cuò)誤的調(diào)試等, 可視化

12、的開發(fā)方法降低了應(yīng)用程序開發(fā)的難度。 Delphi 的基礎(chǔ)編程語言是具有面向?qū)ο筇匦?的Pascal語言,即Object Pascal。Object Pascal具有代碼穩(wěn)定、可讀性好、編譯速度快等優(yōu) 點(diǎn),并將面向?qū)ο蟮母拍钜浦驳搅薖ascal語言中,使這種基礎(chǔ)語言有了新的發(fā)展空間。使用 Delphi 6.0 ,我們幾乎可以作任何事情, 還可以撰寫種各種類型的應(yīng)用程序, 動(dòng)態(tài)鏈接 庫(DLL )、CON、或 CORBA 對(duì)象,CGI/ISAPI 程序,Microsoft Back Office 應(yīng)用程序。程 序的規(guī)模小到簡單的個(gè)人數(shù)據(jù)庫應(yīng)用,大到復(fù)雜的企業(yè)的多層次分布式系統(tǒng),都可以使用Delp

13、hi 進(jìn)行開發(fā), 其友好的集成開發(fā)界面, 可視化的雙向開發(fā)模式, 良好的數(shù)據(jù)庫應(yīng)用支持 高效的程序開發(fā)和程序運(yùn)行,備受廣大程序開發(fā)人員的好評(píng)。尤其是 Delphi 對(duì)數(shù)據(jù)庫應(yīng)用 的強(qiáng)大支持, 大大提高了數(shù)據(jù)庫應(yīng)用軟件開發(fā)的效率, 縮短了開發(fā)周期, 深受廣大數(shù)據(jù)庫應(yīng) 用程序設(shè)計(jì)人員的喜愛。 Delphi 為數(shù)據(jù)庫應(yīng)用開發(fā)人員提供了豐富的數(shù)據(jù)庫開發(fā)組件, 使數(shù) 據(jù)庫應(yīng)用開發(fā)功能更強(qiáng)大,控制更靈活,編譯后的程序運(yùn)行速度更快。§ 1.3 本文所做工作引言部分介紹了本系統(tǒng)的課題來源以及對(duì)數(shù)據(jù)庫開發(fā)工具的選擇。 第二章介紹了數(shù)據(jù)庫的發(fā)展,關(guān)系數(shù)據(jù)庫,數(shù)據(jù)庫體系結(jié)構(gòu),并系統(tǒng)介紹了 SQL 語言,為

14、 設(shè)計(jì)和理解應(yīng)用程序做了鋪墊。第三章系統(tǒng)介紹了 Delphi 6.0 及其部分控件, SQL 語言在 Delphi 6.0 中的應(yīng)用,以及 Access 等。第四章是本文的主體, 按照軟件工程的要求, 從需求分析開始, 經(jīng)過概要設(shè)計(jì)最后到詳細(xì)設(shè) 計(jì),完成對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)。第五章根據(jù)第四章的設(shè)計(jì)結(jié)果利用Access 2000 和 Delphi 6.0 進(jìn)行了具體的窗體和應(yīng)用程序設(shè)計(jì)??偨Y(jié)部分介紹了設(shè)計(jì)體會(huì)和編程體會(huì),并指出了系統(tǒng)設(shè)計(jì)中的不足和改進(jìn)的方向第二章 數(shù)據(jù)庫概論§ 2.1 數(shù)據(jù)庫的發(fā)展 數(shù)據(jù)庫處理在信息系統(tǒng)的研究中一直是非常重要的主題,然而,近年來,隨著 World Wide

15、Web(WWW) 的猛增及 Internet 技術(shù)的迅速發(fā)展,使得數(shù)據(jù)庫技術(shù)之時(shí)成為最熱門技術(shù)之一。 數(shù)據(jù)庫技術(shù)能使 Internet 應(yīng)用超越具有早期應(yīng)用特點(diǎn)的簡單的發(fā)布。 同時(shí), Internet 技術(shù)提供 了一種向用戶發(fā)布數(shù)據(jù)庫內(nèi)容的標(biāo)準(zhǔn)化的訪問方法。 這些技術(shù)沒有脫離經(jīng)典數(shù)據(jù)庫技術(shù)的要 求。它們只是加重了數(shù)據(jù)庫技術(shù)的重要性。數(shù)據(jù)庫的設(shè)計(jì)和開發(fā)及包括藝術(shù)有包括工程。 理解用戶的需求, 然后, 把它們轉(zhuǎn)變?yōu)橛行У?數(shù)據(jù)庫設(shè)計(jì)是一個(gè)藝術(shù)過程。把設(shè)計(jì)轉(zhuǎn)變?yōu)閷?shí)際的數(shù)據(jù)庫,并且這些數(shù)據(jù)庫帶有功能完備、 高效能的應(yīng)用,是一個(gè)工程過程。數(shù)據(jù)庫的目的是幫助人們跟蹤事務(wù)。經(jīng)典的數(shù)據(jù)庫應(yīng)用涉及諸如訂單、顧客

16、、工作、員工、 學(xué)生、 電話之類的項(xiàng), 或其它數(shù)據(jù)量較大、 需要密起關(guān)注的事務(wù)。 最近,由于數(shù)據(jù)庫的普及, 數(shù)據(jù)庫技術(shù)已經(jīng)被應(yīng)用到了新的領(lǐng)域,諸如用于 Internet 的數(shù)據(jù)庫或用于公司內(nèi)聯(lián)網(wǎng)的數(shù)據(jù) 庫。數(shù)據(jù)庫也被越來越多地應(yīng)用于生成和維護(hù)多媒體應(yīng)用程序上。計(jì)算機(jī)的數(shù)據(jù)處理應(yīng)用,首先要把大量的信息以數(shù)據(jù)形式存放在存儲(chǔ)器中。存儲(chǔ)器的容量、 存儲(chǔ)速率直接影響到數(shù)據(jù)管理技術(shù)的發(fā)展。從 1956 年生產(chǎn)出第一臺(tái)計(jì)算機(jī)到現(xiàn)在,存儲(chǔ)器 的發(fā)展,為數(shù)據(jù)庫技術(shù)提供了良好的物質(zhì)基礎(chǔ)。使用計(jì)算機(jī)以后,數(shù)據(jù)處理的速度和規(guī)模,無論是相對(duì)于手工方式,還是機(jī)械方式,都有無 可比擬的優(yōu)勢(shì)。 通常在數(shù)據(jù)處理中, 計(jì)算是比較

17、簡單的而數(shù)據(jù)的管理卻比較復(fù)雜。 數(shù)據(jù)管理 是指數(shù)據(jù)的收集、整理、組織、存儲(chǔ)、維護(hù)、檢索、傳送等操作,這部分操作是數(shù)據(jù)處理業(yè) 務(wù)的基本環(huán)節(jié), 而且是任何數(shù)據(jù)處理業(yè)務(wù)中必不可少的共有部分。 數(shù)據(jù)管理技術(shù)的優(yōu)劣, 將 直接影響數(shù)據(jù)處理的效率。2.1.1 數(shù)據(jù)庫的發(fā)展數(shù)據(jù)管理技術(shù)的發(fā)展,與硬件(主要是外存) 、軟件、計(jì)算機(jī)應(yīng)用的范圍有密切的聯(lián)系。數(shù) 據(jù)管理技術(shù)的發(fā)展經(jīng)過三個(gè)階段:人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫階段。人工管理階段和文件系統(tǒng)階段都有著相當(dāng)多的缺陷,諸如數(shù)據(jù)冗余性 ,數(shù)據(jù)不一致性以及 數(shù)據(jù)聯(lián)系弱等等。 也正是由于這些原因, 促使人們研究新的數(shù)據(jù)管理技術(shù), 從而產(chǎn)生了數(shù)據(jù) 庫技術(shù)。20 世

18、紀(jì) 60 年代末發(fā)生的三件大事,層次模型 IMS 系統(tǒng)的推出、關(guān)于網(wǎng)狀模型 DBTG 報(bào)告 的發(fā)表以及關(guān)于關(guān)系模型論文的連續(xù)發(fā)表標(biāo)志著數(shù)據(jù)管理技術(shù)進(jìn)入數(shù)據(jù)庫階段。進(jìn)入 70 年 代以后, 數(shù)據(jù)庫技術(shù)得到迅速發(fā)展, 開發(fā)了許多有效的產(chǎn)品并投入運(yùn)行。 數(shù)據(jù)庫系統(tǒng)克服了 文件系統(tǒng)的缺陷,提供了對(duì)數(shù)據(jù)更高級(jí)更有效的管理。當(dāng)進(jìn)入數(shù)據(jù)庫階段后,隨著數(shù)據(jù)管理規(guī)模一再擴(kuò)大,數(shù)據(jù)量急劇增加,為了提高效率,開始 時(shí),人們只是對(duì)文件系統(tǒng)加以擴(kuò)充, 在應(yīng)用文件中建立了許多輔助索引, 形成倒排文件系統(tǒng)。 但這并不能最終解決問題。 在 20 世紀(jì) 60 年代末, 磁盤技術(shù)取得重要進(jìn)展, 具有數(shù)百兆容量 和快速存取的磁盤陸

19、續(xù)進(jìn)入市場(chǎng), 成本也不高, 為數(shù)據(jù)庫技術(shù)的產(chǎn)生提供了良好的物質(zhì)條件。2.1.2 數(shù)據(jù)庫階段的特點(diǎn)( 1 )減少數(shù)據(jù)的重復(fù)( Redundancy can be reduced) 當(dāng)在一個(gè)非數(shù)據(jù)庫系統(tǒng)當(dāng)中, 每一個(gè)應(yīng)用程序都有屬于他們自己的文件, 由于無法有系統(tǒng)建 立的數(shù)據(jù),因此常常會(huì)造成存儲(chǔ)數(shù)據(jù)的重復(fù)與浪費(fèi)。例如:在一家公司當(dāng)中,人事管理程序 與工資管理程序或許都會(huì)使用到職員與部門的信息或文件,而我們可以運(yùn)用數(shù)據(jù)庫的方法, 把這兩個(gè)文件整理起來,以減少多余的數(shù)據(jù),過度地占用存儲(chǔ)空間。( 2 )避免數(shù)據(jù)的不一致( Inconsistency can avoid )本項(xiàng)的特色, 可以說是延伸前項(xiàng)的

20、一個(gè)特點(diǎn), 要說明這樣的一個(gè)現(xiàn)象, 我們可以從下面這個(gè) 實(shí)例來看: 若是在同一家公司當(dāng)中, 職員甲在策劃部門工作, 且職員甲的記錄同時(shí)被存放在 數(shù)據(jù)庫的兩個(gè)地方, 而數(shù)據(jù)庫管理系統(tǒng)卻沒有對(duì)這樣重要的情況加以控制, 當(dāng)其中一條數(shù)據(jù) 庫被修改時(shí),便會(huì)造成數(shù)據(jù)的不一致,但是,對(duì)于一個(gè)健全的數(shù)據(jù)庫管理系統(tǒng)而言,將會(huì)對(duì) 這樣的情況加以控制, 但有時(shí)并不需要刻意消除這種情形, 應(yīng)當(dāng)視該數(shù)據(jù)庫的需求與效率來 決定。( 3 )數(shù)據(jù)共享( Data shared) 對(duì)于數(shù)據(jù)共享的意義,并不是只有針對(duì)數(shù)據(jù)庫設(shè)計(jì)的應(yīng)用程序,可以使用數(shù)據(jù)庫中的數(shù)據(jù), 對(duì)于其他撰寫好的應(yīng)用程序, 同樣可以對(duì)相同數(shù)據(jù)庫當(dāng)中的數(shù)據(jù)進(jìn)行處理

21、, 進(jìn)而達(dá)到數(shù)據(jù)共 享的目的。( 4 )強(qiáng)化數(shù)據(jù)的標(biāo)準(zhǔn)化( Standard can be enforced) 由數(shù)據(jù)庫管理系統(tǒng), 對(duì)數(shù)據(jù)做出統(tǒng)籌性的管理, 對(duì)于數(shù)據(jù)的格式與一些存儲(chǔ)上的標(biāo)準(zhǔn)進(jìn)行控 制,如此一來,對(duì)于不同的環(huán)境的數(shù)據(jù)交換(Data Interchange )上將有很大的幫助,也能提高數(shù)據(jù)處理的效率。( 5 )實(shí)踐安全性的管理( Security restriction can be applied ) 通過對(duì)數(shù)據(jù)庫完整的權(quán)限控制, 數(shù)據(jù)庫管理者可以確認(rèn)所有可供用戶存取數(shù)據(jù)的合法途徑渠 道, 并且可以事先對(duì)一些較重要或關(guān)鍵性的數(shù)據(jù)進(jìn)行安全檢查,以確保數(shù)據(jù)存取時(shí), 能夠?qū)⑷魏尾划?dāng)損

22、毀的情形降至最低。( 6 )完整性的維護(hù)( Integrity can be maintained ) 所謂完整性的問題,就是要確認(rèn)某條數(shù)據(jù)在數(shù)據(jù)庫當(dāng)中,是正確無誤的。正如(2)所述,若是無法控制數(shù)據(jù)的不一致性,便會(huì)產(chǎn)生完整性不足的問題,所以,我們會(huì)發(fā)現(xiàn),當(dāng)數(shù)據(jù)重 復(fù)性高的時(shí)候,數(shù)據(jù)不完整的情形也會(huì)增加,當(dāng)然,若是數(shù)據(jù)庫的功能完整,將會(huì)大大地提 高數(shù)據(jù)完整性,也會(huì)增加數(shù)據(jù)庫的維護(hù)能力與維護(hù)簡便性。( 7 )需求沖突會(huì)獲得平衡( Conflicting requirements can be balance ) 在一個(gè)較大型的企業(yè)當(dāng)中, 用戶不同的需求, 往往會(huì)造成系統(tǒng)或數(shù)據(jù)庫在設(shè)計(jì)上的困擾,

23、但 是一個(gè)合適的數(shù)據(jù)庫系統(tǒng),可以通過數(shù)據(jù)庫管理員的管理,將會(huì)有效地整理各方面的信息, 對(duì)于一些較重要的應(yīng)用程序, 可以適時(shí)地提供較快速的數(shù)據(jù)存取方法與格式, 以平衡多個(gè)用 戶在需求上的沖突。上述七個(gè)方面構(gòu)成了數(shù)據(jù)庫系統(tǒng)的主要特征。這個(gè)階段的程序和數(shù)據(jù)間的聯(lián)系可用下圖表示:2.1.3 數(shù)據(jù)庫技術(shù)從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫系統(tǒng)是信息處理領(lǐng)域的一個(gè)重大變化。 在文件系統(tǒng)階段, 人們關(guān)注 的中心問題是系統(tǒng)功能的設(shè)計(jì), 因而程序設(shè)計(jì)處于主導(dǎo)地位, 數(shù)據(jù)只起著服從程序需要的作 用。在數(shù)據(jù)庫方式下,信息處理觀念已為新體系所取代,數(shù)據(jù)占據(jù)了中心位置。數(shù)據(jù)結(jié)構(gòu)的 設(shè)計(jì)成為信息系統(tǒng)首先關(guān)心的問題, 而利用這些數(shù)據(jù)的應(yīng)

24、用程序設(shè)計(jì)則退居到以既定的數(shù)據(jù) 結(jié)構(gòu)為基礎(chǔ)的外圍地位。目前世界上已有數(shù)百萬個(gè)數(shù)據(jù)庫系統(tǒng)在運(yùn)行,其應(yīng)用已經(jīng)深入到人類社會(huì)生活的各個(gè)領(lǐng)域, 從企業(yè)管理、銀行業(yè)務(wù)、資源分配、經(jīng)濟(jì)預(yù)測(cè)一直到信息檢索、檔案管理、普查統(tǒng)計(jì)等。并 在通信網(wǎng)絡(luò)基礎(chǔ)上, 建立了許多國際性的聯(lián)機(jī)檢索系統(tǒng)。 我國 20 世紀(jì) 90 年代初在全國范圍 內(nèi)裝備了 12 個(gè)以數(shù)據(jù)庫技術(shù)為基礎(chǔ)的大型計(jì)算機(jī)系統(tǒng),這些系分布在郵電、計(jì)委、銀行、 電力、鐵路、氣象、民航、情報(bào)、公安、軍事、航天和財(cái)稅等行業(yè)。數(shù)據(jù)庫技術(shù)還在不斷的發(fā)展, 并且不斷地與其它計(jì)算機(jī)技術(shù)相互滲透。 數(shù)據(jù)庫技術(shù)與網(wǎng)絡(luò)通 信技術(shù)相結(jié)合, 產(chǎn)生了分布式數(shù)據(jù)庫系統(tǒng)。 數(shù)據(jù)庫技術(shù)與

25、面向?qū)ο蠹夹g(shù)相結(jié)合, 產(chǎn)生了面向 對(duì)象數(shù)據(jù)庫系統(tǒng)。在數(shù)據(jù)庫技術(shù)中有四個(gè)名詞,其概念應(yīng)該分清。(1)數(shù)據(jù)庫( database,DB) :DB 是統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合。 DB 能為各種用戶共享, 具有最小冗余度,數(shù)據(jù)間聯(lián)系密切,而又有較高的數(shù)據(jù)獨(dú)立性。( 2 )數(shù)據(jù)庫管理系統(tǒng)( Database Management System,DBMS ): DBMS 是位于用戶與操作系 統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應(yīng)用程序提供訪問 DB 的方法,包括 DB 的建立、查 詢、更新及各種數(shù)據(jù)控制。 DBMS 總是基于某種數(shù)據(jù)模型,可以分為層次型、網(wǎng)狀型、關(guān) 系型和面向?qū)ο笮?DBMS 。(3)數(shù)據(jù)庫

26、系統(tǒng)( Database System,DBS):DBS 是實(shí)現(xiàn)有組織地、 動(dòng)態(tài)地存儲(chǔ)大量關(guān)聯(lián)數(shù)據(jù), 方便多用戶訪問的計(jì)算機(jī)軟件、 硬件和數(shù)據(jù)資源組成的系統(tǒng), 即采用了數(shù)據(jù)庫技術(shù)的計(jì)算機(jī) 系統(tǒng)。(4)數(shù)據(jù)庫技術(shù):這是一門研究數(shù)據(jù)庫的結(jié)構(gòu)、存儲(chǔ)、管理和使用的軟件學(xué)科。數(shù)據(jù)庫技 術(shù)是操作系統(tǒng)的文件系統(tǒng)基礎(chǔ)上發(fā)展起來的。而 DBMS 本身要在操作系統(tǒng)的支持下才能工 作。 數(shù)據(jù)庫不僅用到數(shù)據(jù)結(jié)構(gòu)的知識(shí), 而且豐富了數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。 在關(guān)系數(shù)據(jù)庫中要用到 集合論、數(shù)理邏輯的理論。因此,數(shù)據(jù)庫技術(shù)是一門綜合性較強(qiáng)的學(xué)科。§2.2 數(shù)據(jù)庫理論基礎(chǔ)2.2.1 數(shù)據(jù)庫模型從 20 世紀(jì) 50 年代中期

27、開始, 計(jì)算機(jī)的應(yīng)用由科學(xué)研究部門逐步擴(kuò)展到企業(yè)、 行政部門。 至 60 年代,數(shù)據(jù)處理成為計(jì)算機(jī)的主要應(yīng)用。數(shù)據(jù)庫技術(shù)作為數(shù)據(jù)管理技術(shù),是計(jì)算機(jī)軟件 領(lǐng)域的一個(gè)重要分支,產(chǎn)生于 60 年代末。現(xiàn)已形成相當(dāng)規(guī)模的理論體系和實(shí)用技術(shù)。 模型是對(duì)現(xiàn)實(shí)世界的抽象。在數(shù)據(jù)庫技術(shù)中,我們用模型的概念描述數(shù)據(jù)庫的結(jié)構(gòu)與語義, 對(duì)現(xiàn)實(shí)世界進(jìn)行抽象,表示實(shí)體類型及實(shí)體間聯(lián)系的模型稱為“數(shù)據(jù)模型” 。 目前廣泛作用的數(shù)據(jù)模型可分為兩種類型。一種是獨(dú)立于計(jì)算機(jī)系統(tǒng)的模型, 完全不涉及信息在系統(tǒng)中的表示, 只是用來描述某個(gè)特定 組織所關(guān)心的信息結(jié)構(gòu),這類模型稱為“概念數(shù)據(jù)模型” 。要領(lǐng)模型用于建立信息世界的 數(shù)據(jù)模

28、型,強(qiáng)調(diào)其語義表達(dá)功能,應(yīng)該概念簡單、清晰,易于用戶理解,它是現(xiàn)實(shí)世界的第 一層抽象, 是用戶和數(shù)據(jù)庫設(shè)計(jì)人員之間進(jìn)行交流的工具。 這一其中著名的模型是 “實(shí)體聯(lián) 系模型” 。另一種數(shù)據(jù)模型是直接面向數(shù)據(jù)庫的邏輯結(jié)構(gòu),它是現(xiàn)實(shí)世界的第二層抽象。 這類模型涉 及到計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng),又稱為“結(jié)構(gòu)數(shù)據(jù)模型” 。例如,層次、網(wǎng)狀、關(guān)系、 面向?qū)ο蟮饶P汀_@類模型有嚴(yán)格的形式化定義,以便于在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。( 1)層次模型。 用樹型結(jié)構(gòu)表示實(shí)體類型及實(shí)體間聯(lián)系的數(shù)據(jù)模型。 樹的結(jié)點(diǎn)是記錄類型, 每個(gè)非根結(jié)點(diǎn)有且只有一個(gè)父結(jié)點(diǎn)。上一層記錄類型和下一層記錄類型間聯(lián)系是1 : N聯(lián)系。層次模型的特

29、點(diǎn)是記錄之間的聯(lián)系通過指針實(shí)現(xiàn),查詢效率較高。但層次模型有兩個(gè)缺點(diǎn): 一是只能表示1 : N聯(lián)系,雖然有多種輔助手段實(shí)現(xiàn)了M : N聯(lián)系,但都較復(fù)雜,用戶不易掌握, 二是由于樹型結(jié)構(gòu)層次順序的嚴(yán)格和復(fù)雜, 引起數(shù)據(jù)的查詢和更新操作也很復(fù)雜, 因 此,編寫應(yīng)用程序也很復(fù)雜。(2)網(wǎng)狀模型。用有向圖結(jié)構(gòu)表示實(shí)體類型及實(shí)體間聯(lián)系的數(shù)據(jù)模型。 1969年 DBTG 報(bào)告提出的數(shù)據(jù)模型是網(wǎng)狀模型的主要代表。 有向圖中的結(jié)點(diǎn)是記錄類型, 有向邊表示從箭尾 一端的記錄類型到箭頭一端的記錄類型間聯(lián)系是1 : N聯(lián)系。網(wǎng)狀模型的特點(diǎn): 記錄之間聯(lián)系通過指針實(shí)現(xiàn),M : N聯(lián)系也容易實(shí)現(xiàn)(每個(gè)M : N聯(lián)系可拆成

30、兩個(gè) 1 : N 聯(lián)系),查詢效率較高。網(wǎng)狀模型的缺點(diǎn)是編寫應(yīng)用程序比較復(fù)雜,程序員 必須熟悉數(shù)據(jù)庫的邏輯結(jié)構(gòu)。 由于層次系統(tǒng)和網(wǎng)狀系統(tǒng)的應(yīng)用程序編制比較復(fù)雜, 因此, 從 20 世紀(jì) 80 年代中期起,其市場(chǎng)已被關(guān)系系統(tǒng)所取代。但是使用這兩種模型建立起的許多數(shù) 據(jù)庫仍然在正常運(yùn)轉(zhuǎn), 只是在外層加了個(gè)關(guān)系數(shù)據(jù)庫語言的接口。 網(wǎng)狀模型有許多成功的產(chǎn) 品,20世紀(jì)70年代的產(chǎn)品大部分網(wǎng)狀系統(tǒng),例如,Honeywell公司的IDS/ n、HP公司的IMAGE/3000、Burroughs 公司的 DMS n、Umivac 公司的 DMS1100、Cullinet 公司的 IDMS、 Cimcom 公

31、司的 TOTAL 等( 3)關(guān)系模型。關(guān)系模型的主要是用二維表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間聯(lián)系。 關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。 關(guān)系模式相當(dāng)于前面提到的記錄類型, 它的實(shí)例 稱為關(guān)系,每個(gè)關(guān)系實(shí)際上是一張二維表格。關(guān)系模型和層次、 網(wǎng)狀模型的最大判別是用關(guān)鍵碼而不是用指針導(dǎo)航數(shù)據(jù),表格簡單用戶易懂,編程時(shí)并不涉及存儲(chǔ)結(jié)構(gòu),訪問技術(shù)等細(xì)節(jié)。關(guān)系模型是數(shù)學(xué)化模型。SQL 語言是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)化語言,已得到了廣泛的應(yīng)用。 20世紀(jì) 70年代對(duì)關(guān)系數(shù)據(jù)庫的研究主要集 中在理論和實(shí)驗(yàn)系統(tǒng)的開發(fā)方面。 80 年代初才形成產(chǎn)品,但很快得到廣泛的應(yīng)用和普及, 并最終取代了層次、 網(wǎng)狀數(shù)據(jù)庫產(chǎn)

32、品。 現(xiàn)在市場(chǎng)上典型的關(guān)系 DBMS 產(chǎn)品有 DB2、 ORACLE 、 SYBASE 、 INFORMIX 和微機(jī)型產(chǎn)品 Foxpro、 Access 等。關(guān)系模型和網(wǎng)狀、 層次模型的最大區(qū)別是: 關(guān)系模型用表格數(shù)據(jù)而不是通過指針鏈來表示和 實(shí)現(xiàn)實(shí)體間聯(lián)系。 關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)簡單、 易懂。 只需用簡單的查詢語句就可對(duì)數(shù)據(jù)庫進(jìn) 行操作。關(guān)系模型是數(shù)學(xué)化的模型, 可把表格看成一個(gè)集合, 因此集合論、 數(shù)理邏輯等知識(shí)可引入到 關(guān)系模型中來。關(guān)系模型已是一個(gè)成熟的有前途的模型,已得到廣泛應(yīng)用。( 4)面向?qū)ο竽P?。目前,關(guān)系數(shù)據(jù)庫的使用已相當(dāng)普遍,但是,現(xiàn)實(shí)世界中仍然存在著 許多含有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的

33、應(yīng)用領(lǐng)域,例如, CAD 數(shù)據(jù)、圖形數(shù)據(jù)等,而關(guān)系模型在這方面 的處理能力就顯得力不從心。 因此, 人們需要更高級(jí)的數(shù)據(jù)庫技術(shù)來表達(dá)這類信息。 面向?qū)?象的概念最早出現(xiàn)在程序設(shè)計(jì)語言中, 隨后迅速滲透到計(jì)算機(jī)領(lǐng)域的每一個(gè)分支。面向?qū)ο髷?shù)據(jù)庫是面向?qū)ο蟾拍钆c數(shù)據(jù)庫技術(shù)相結(jié)合的產(chǎn)物。面向?qū)ο竽P湍芡暾孛枋霈F(xiàn)實(shí)世界的數(shù)據(jù)結(jié)構(gòu), 具有豐富的表達(dá)能力, 但模型相對(duì)較復(fù)雜, 涉及的知識(shí)面也廣,因此面向?qū)ο髷?shù)據(jù)庫尚未達(dá)到關(guān)系數(shù)據(jù)庫那樣的普及程度。2.2.2 數(shù)據(jù)庫體系結(jié)構(gòu)數(shù)據(jù)庫的體系結(jié)構(gòu)分三級(jí):內(nèi)部級(jí)( internal),概念級(jí)(conceptual)和外部級(jí)(external )。 這個(gè)三級(jí)結(jié)構(gòu)有時(shí)也

34、稱為“三級(jí)模式結(jié)構(gòu)” ,或“數(shù)據(jù)抽象的三個(gè)級(jí)別” ,最早是在 1971 年通過的 DBTG 報(bào)告中提出, 后來收入在 1975年的美國 ANSI/SPARC 報(bào)告中。雖然現(xiàn)在 DBMS 的產(chǎn)品多種多樣, 在不同的操作系統(tǒng)支持下工作, 但是大多數(shù)系統(tǒng)在總的體系結(jié)構(gòu)上都具有 三級(jí)模式的結(jié)構(gòu)特征。從某個(gè)角度看到的數(shù)據(jù)特性稱為“數(shù)據(jù)視圖”(data view )。外部級(jí)最接近用戶, 是單個(gè)用戶所能看到的數(shù)據(jù)特性。 單個(gè)用戶使用的數(shù)據(jù)視圖的描述稱為 “外模式”。概念級(jí)涉及到所有用戶的數(shù)據(jù)定義, 是全局的數(shù)據(jù)視圖。 全局?jǐn)?shù)據(jù)視圖的描述稱為 “概念模 式”。內(nèi)部級(jí)最接近于物理存儲(chǔ)設(shè)備, 涉及到實(shí)際數(shù)據(jù)存儲(chǔ)的

35、結(jié)構(gòu)。 物理存儲(chǔ)數(shù)據(jù)視圖的描述稱為 “內(nèi)模式”。數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)是數(shù)據(jù)的三個(gè)抽象級(jí)別。它把數(shù)據(jù)的具體組織留給 DBMS 去做,用 戶只要抽象地處理數(shù)據(jù), 而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的表示和存儲(chǔ), 這樣就減輕了用戶使用 系統(tǒng)的負(fù)擔(dān)。三級(jí)結(jié)構(gòu)之間往往差別很大,為了實(shí)現(xiàn)這三個(gè)抽象級(jí)別的聯(lián)系和轉(zhuǎn)換, DBMS 在三級(jí)結(jié)構(gòu) 之間提供兩個(gè)層次的映象(mappings) :外模式 /模式映象,模式 /內(nèi)模式映象。此處模式是概念模式的簡稱。2.2.3 數(shù)據(jù)的獨(dú)立性 由于數(shù)據(jù)庫系統(tǒng)采用三級(jí)模式結(jié)構(gòu), 因此系統(tǒng)具有數(shù)據(jù)獨(dú)立性的特點(diǎn)。 在數(shù)據(jù)庫技術(shù)中, 數(shù) 據(jù)獨(dú)立性是指應(yīng)用程序和數(shù)據(jù)之間相互獨(dú)立, 不受影響。 數(shù)

36、據(jù)獨(dú)立性分成物理數(shù)據(jù)獨(dú)立性和 邏輯數(shù)據(jù)獨(dú)立性兩級(jí)。( 1)物理數(shù)據(jù)獨(dú)立性 如果數(shù)據(jù)庫的內(nèi)模式要進(jìn)行修改,即數(shù)據(jù)庫的存儲(chǔ)設(shè)備和存儲(chǔ)方法有所變化,那么模式/內(nèi)模式映象也要進(jìn)行相當(dāng)?shù)男薷模?使概念模式盡可能保持不變。 也就是對(duì)內(nèi)模式的修改盡量不 影響概念模式,當(dāng)然,對(duì)于外模式和應(yīng)用程序的影響更小,這樣,我們稱數(shù)據(jù)庫達(dá)到了物理 數(shù)據(jù)獨(dú)立性。(2)邏輯數(shù)據(jù)獨(dú)立性 如果數(shù)據(jù)庫的概念模式要進(jìn)行修改,譬如增加記錄類型或增加數(shù)據(jù)項(xiàng),那么外模式/模式映象也要進(jìn)行相應(yīng)的修改, 使外模式盡可能保持不變。 也就是對(duì)概念模式的修改盡量不影響外 模式和應(yīng)用程序,這樣,我們稱數(shù)據(jù)庫達(dá)到了邏輯數(shù)據(jù)獨(dú)立性。現(xiàn)有關(guān)系系統(tǒng)產(chǎn)品均提供

37、了較高的物理獨(dú)立性, 而對(duì)邏輯獨(dú)立性的支持尚有欠缺, 例如, 對(duì) 外模式的數(shù)據(jù)更新受到限制等。2.2.4 范式 建立起一個(gè)良好的數(shù)據(jù)指標(biāo)體系, 是建立數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫的最重要的一環(huán)。 一個(gè)良好的數(shù) 據(jù)指標(biāo)體系是建立 DB 的必要條件, 但不是充分條件。 我們完全可以認(rèn)為所建指標(biāo)體系中的 一個(gè)指標(biāo)類就是關(guān)系數(shù)據(jù)庫中的一個(gè)基本表, 而這個(gè)指標(biāo)類下面的一個(gè)個(gè)具體指標(biāo)就是這個(gè) 基本表中的一個(gè)字段。 但如果直接按照這種方式建庫顯然還不能算最佳。 對(duì)于指標(biāo)體系中數(shù) 據(jù)的結(jié)構(gòu)在建庫前還必須進(jìn)行規(guī)范化的重新組織。 在數(shù)據(jù)的規(guī)范化表達(dá)中,一般將一組相互關(guān)聯(lián)的數(shù)據(jù)稱為一個(gè)關(guān)系 (relation) ,而在這個(gè)關(guān)系

38、 下的每個(gè)數(shù)據(jù)指標(biāo)項(xiàng)則被稱為數(shù)據(jù)元素(data element),這種關(guān)系落實(shí)到具體數(shù)據(jù)庫上就是基本表,而數(shù)據(jù)元素就是基本表中的一個(gè)字段 (field) 。規(guī)范化表達(dá)還規(guī)定在每一個(gè)基本表中必 須定義一個(gè)數(shù)據(jù)元素為關(guān)鍵字(key),它可以唯一地標(biāo)識(shí)出該表中其它相關(guān)的數(shù)據(jù)元素。在規(guī)范化理論中表是二維的,它有如下四個(gè)性質(zhì): 在表中的任意一列上,數(shù)據(jù)項(xiàng)應(yīng)屬于同一個(gè)屬性(如圖中每一列都存放著不同合同記錄的同一屬性數(shù)據(jù) )。表中所有行都是不相同的,不允許有重復(fù)組項(xiàng)出現(xiàn)(如圖中每一行都是一個(gè)不同的合同記錄)。在表中, 行的順序無關(guān)緊要 (如圖中每行存的都是合同記錄, 至于先放哪一個(gè)合同都沒關(guān)系 )。 在表中

39、,列的順序無關(guān)緊要,但不能重復(fù)(如圖中合同號(hào)和合同名誰先誰后都沒關(guān)系,但二者不可重復(fù)或同名 )。在對(duì)表的形式進(jìn)行了規(guī)范化定義后, 數(shù)據(jù)結(jié)構(gòu)還有五種規(guī)范化定義, 定名為規(guī)范化模式, 稱 為范式。 在這五種范式中, 一般只用前三種, 對(duì)于常用系統(tǒng)就足夠了。 而且這五種范式是 “向 上兼容”的,即滿足第五范式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)滿足一、二、三、四范式,滿足第四范式的數(shù) 據(jù)結(jié)構(gòu)自動(dòng)滿足第一、二、三范式,依此類推。第一范式 (first normal form ,簡稱 1st NF) 就是指在同一表中沒有重復(fù)項(xiàng)出現(xiàn),如果有則應(yīng)將 重復(fù)項(xiàng)去掉。 這個(gè)去掉重復(fù)項(xiàng)的過程就稱之為規(guī)范化處理。 在本文所討論的開發(fā)方法里

40、, 1st NF 實(shí)際上是沒有什么意義的。因?yàn)槲覀儼匆?guī)范化建立的指標(biāo)體系和表的過程都自動(dòng)保證了 所有表都滿足 1st NF。第二范式(second normal form,簡稱2nd NF)是指每個(gè)表必須有一個(gè)(而且僅一個(gè))數(shù)據(jù)元素為 主關(guān)鍵字 (primary key) ,其它數(shù)據(jù)元素與主關(guān)鍵字一一對(duì)應(yīng)。例如,在圖 l9.7 中如果我們將 合同號(hào)定義為主關(guān)鍵字 (其它數(shù)據(jù)元素中的記錄數(shù)據(jù)都有可能重名,故不能作為主關(guān)鍵字),故只要知道了一個(gè)合同記錄的合同號(hào), 就可以唯一地在同一行中找到該合同的任何一項(xiàng)具體 信息。 通常我們稱這種關(guān)系為函數(shù)依賴 (functional depEndence) 關(guān)

41、系。 即表中其它數(shù)據(jù)元素都 依賴于主關(guān)鍵字,或稱該數(shù)據(jù)元素唯一地被主關(guān)鍵字所標(biāo)識(shí)。第三范式(third normal form ,簡稱3rd NF)就是指表中的所有數(shù)據(jù)元素不但要能夠唯一地被 主關(guān)鍵字所標(biāo)識(shí), 而且它們之間還必須相互獨(dú)立, 不存在其它的函數(shù)關(guān)系。 也就是說對(duì)于一 個(gè)滿足了 2nd NF 的數(shù)據(jù)結(jié)構(gòu)來說, 表中有可能存在某些數(shù)據(jù)元素依賴于其它非關(guān)鍵宇數(shù)據(jù) 元素的現(xiàn)象,必須加以消除。為防止數(shù)據(jù)庫出現(xiàn)更新異常、插入異常、刪除異常、數(shù)據(jù)冗余太大等現(xiàn)象,關(guān)系型數(shù)據(jù)庫要 盡量按關(guān)系規(guī)范化要求進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。§ 2.3 SQL 語言基礎(chǔ)2.3.1 SQL 簡介 用戶對(duì)數(shù)據(jù)庫的使用,

42、 是通過數(shù)據(jù)庫管理系統(tǒng)提供的語言來實(shí)現(xiàn)的。 不同的數(shù)據(jù)庫管理系統(tǒng) 提供不同的數(shù)據(jù)庫語言。關(guān)系數(shù)據(jù)庫管理系統(tǒng)幾乎都提供關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL。SQL的全稱是Structured Query Language,即結(jié)構(gòu)化查詢語言。 SQL語句可以從關(guān)系數(shù)據(jù)庫 中獲得數(shù)據(jù),也可以建立數(shù)據(jù)庫、增加數(shù)據(jù)、修改數(shù)據(jù)。 1986 年 ANSI 采用 SQL 語言作為 關(guān)系數(shù)據(jù)庫系統(tǒng)的標(biāo)準(zhǔn)語言,后被國際化標(biāo)準(zhǔn)組織(ISO)采納為國際標(biāo)準(zhǔn)。SQL語言使用方便、功能豐富、簡潔易學(xué),是操作數(shù)據(jù)庫的工業(yè)標(biāo)準(zhǔn)語言,得到廣泛地應(yīng)用。例如關(guān)系數(shù) 據(jù)庫產(chǎn)品 DB2、 ORACLE 等都實(shí)現(xiàn)了 SQL 語言。同時(shí),其它數(shù)據(jù)庫產(chǎn)

43、品廠家也紛紛推出各 自的支持 SQL 的軟件或者與 SQL 的接口軟件。這樣 SQL 語言很快被整個(gè)計(jì)算機(jī)界認(rèn)可。SQL 語言是一種非過程化語言,它一次處理一個(gè)記錄集合,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL 語言允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作。SQL 語言不要求用戶指定數(shù)據(jù)的存取方法, 而是使用查詢優(yōu)化器, 由系統(tǒng)決定對(duì)指定數(shù)據(jù)存取的最快速手段。 當(dāng)設(shè) 計(jì)者在關(guān)系表上定義了索引時(shí), 系統(tǒng)會(huì)自動(dòng)利用索引進(jìn)行快速檢索, 用戶不需知道表上是否 有索引或者有什么類型的索引等細(xì)節(jié)。SQL 語言可以完成許多功能,例如: 查詢數(shù)據(jù) 在數(shù)據(jù)庫表格中插入、修改和刪除記錄 建立、修改和刪除數(shù)據(jù)對(duì)象

44、控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取 確保數(shù)據(jù)庫的一致性和完整性等2.3.2 SQL 查詢數(shù)據(jù)查詢是關(guān)系運(yùn)算理論在 SQL 語言中的主要體現(xiàn), SELECT 語句是 SQL 查詢的基本語句, 當(dāng)我們?cè)趯?duì)一個(gè)數(shù)據(jù)庫進(jìn)各種各樣的操作時(shí),使用的最多的就是數(shù)據(jù)查詢,在以 SQL 為基 礎(chǔ)的關(guān)系數(shù)據(jù)庫中,使用的最多的就是 SELECT 查詢語句。SELECT 語句的完整句法如下:SELECT 目標(biāo)表的列名或列表達(dá)式序列FROM 基本表和(或)視圖序列WHERE 行條件表達(dá)式 GROUP BY 列名序列 HA VING 組條件表達(dá)式 ORDER BY 列名ASC | DEAC我在 SELECT 語句中還使用了大量的

45、保留字和通配符以進(jìn)行各種各樣的條件查詢。在系統(tǒng) 中有大量的查詢按鈕, 其使用了大量的查詢語句, 而且這些查詢語句大部分使用的是模糊查 詢,所以大量的使用了模式匹配符 LIKE( 判斷值是否與指定的字符通配格式相符)。在包含LIKE 的查詢語句中可以使用兩個(gè)通配符:%(百分號(hào)):與零個(gè)或多個(gè)字符組成的字符串匹配; _(下劃線):與單個(gè)字符匹配。系統(tǒng)中的條件判斷往往包含多個(gè)條件,這時(shí)就需要使用 邏輯運(yùn)算符 NOT、AND、OR(用于多條件的邏輯連接),謂詞ALL以及保留字DISTINCT 等等。做為 SELECT 語句還有很多的使用方法,這里就不再敘述。2.3.3 SQL 數(shù)據(jù)更新使用數(shù)據(jù)庫的目的

46、是為了有效地管理數(shù)據(jù), 而數(shù)據(jù)的插入、 刪除和修改則是必不可少的一個(gè) 功能。在本系統(tǒng)中就大量地使用了數(shù)據(jù)插入、 刪除和修改這三種操作, 現(xiàn)做一個(gè)簡單地介紹。 數(shù)據(jù)插入往數(shù)據(jù)庫的基本表中插入數(shù)據(jù)使用的是 INSERT 語句,其方式有兩種: 一種是元組值的插入, 另一種是查詢結(jié)果的插入。在本系統(tǒng)中使用的是前一種方式,其句法如下:INSERT INTO 基本表名(列表名) VALUES (元組值)數(shù)據(jù)刪除 往數(shù)據(jù)庫的基本表中刪除數(shù)據(jù)使用的是 DELETE 語句,其句法如下:DELETE FROM 基本表名 WHERE 條件表達(dá)式 在些作一點(diǎn)說明,刪除語句實(shí)際上是“ SELECT * FROM 基本表

47、名 WHERE 條件表達(dá)式 ” 和 DELETE 操作的結(jié)合,每找到一個(gè)元組,就把它刪除。此外,DELETE 語句只能從一個(gè)基本表中刪除元組, WHERE 子句中條件可以嵌套,也可以是來自幾個(gè)基本表的復(fù)合條件。 數(shù)據(jù)修改當(dāng)需要修改基本表中元組的某些列值時(shí),可以用 UPDATE 語句實(shí)現(xiàn),其句法如下:UPDATE 基本表名SET列名=值表達(dá)式,列名=值表達(dá)式WHERE 條件表達(dá)式 在 Delphi 中使用 SQL 語句是很方便的,一般來說,都是通過 TQuery 組件來使用 SQL 語言 的。有一點(diǎn)要進(jìn)行說明, 雖然通過 TQuery 組件來使用 SQL 語言很方便, 但考慮到自己對(duì)不 同組件的

48、理解程度、個(gè)人習(xí)慣以及其它各個(gè)方面,在本系統(tǒng)中我采用的是ADO 組件來對(duì)數(shù)據(jù)庫進(jìn)行操作。 最簡單的方法比如在 TADOQuery 組件的 SQL 屬性中就可以鍵入 SQL 語句, 至于詳細(xì)的使用方法在后面進(jìn)行介紹。第三章 數(shù)據(jù)庫開發(fā)工具§3.1 Delphi 6.0 簡介Delphi 類可以粗略地分成兩部分: 一部分是組件類, 這些組件類通常以某種方式出現(xiàn)在組件 面板上, 當(dāng)用戶從組件面板上點(diǎn)取一個(gè)類的圖標(biāo)后, 在程序中就自動(dòng)生成了該類的對(duì)象 (非 可視組件除外) ;另一部分是功能類,這此功能類的對(duì)象通常出現(xiàn)在程序代碼中,起著不可 代替的作用,但是這些功能類在組件面板上是找不到的。在

49、 Delphi 中,每一個(gè)類的祖先都 是 Tobject 類 ,整個(gè)類的層次結(jié)構(gòu)就像一棵倒掛的樹,在最頂層的樹根即為Tobject 類。這樣,按照面向?qū)ο缶幊痰幕舅枷耄褪沟糜脩艨捎?Tobject 類這個(gè)類型代替任何其它類的數(shù)據(jù) 類型。實(shí)際上在 Delphi 的類庫中, Tobject 類派生出了為數(shù)相當(dāng)眾多的子類,它們形成了一 個(gè)龐大的體系,通常情況下,如果不自行開發(fā)組件,就不必了解整個(gè)類的體系結(jié)構(gòu),只用到 類層次樹的葉結(jié)點(diǎn)就足夠了。凡是做過程序開發(fā)的人都知道從來沒有單純的數(shù)據(jù) 應(yīng)用程序,也就是說, 數(shù)據(jù)庫應(yīng)用程序必 須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結(jié)合,只講界面或

50、只講數(shù)據(jù)庫 本身都構(gòu)不成數(shù)據(jù)庫應(yīng)用程序,因而用 Delphi 6.0 開發(fā)數(shù)據(jù)庫應(yīng)用程序就隱含著界面開發(fā)。 Delphi6 中的 VCL 組件可用圖 3-1 來說明。 組件在 Delphi 程序的開發(fā)中是最顯眼的角色。 大 家知道, 在編寫程序時(shí)一般都開始于在組件面板上選擇組件并定義組件間的相互作用。 但也 有一些組件不在組件面板上,例如 Tform 和 Tapplication (典型的非可視組件) 。組件是 Tcomponents 派生出來的子類, 可以流的形式存放在 DFM 文件中, 具有事件和 Publish 屬性。 窗口組件類是窗口化的可視化組件類,在 Delphi 的類庫中占有最大

51、的份額。在實(shí)際編程中, 窗口組件類的對(duì)象都有句柄,可以接受輸入焦點(diǎn)和包含其它組件。圖形組件與窗口組件并列, 是另一大類組件。 圖形組件不是基于窗口的, 因而不能有窗口句 柄,不能接受輸入焦點(diǎn)和包含其它組件。從圖 8-43 中可以看出,圖形組件的基類是 TgraphicControl, 在實(shí)際編程中, 它們必須寄生于它們的宿主 窗口組件類的對(duì)象, 由它們 的擁有者負(fù)責(zé)其顯示, 而且它們還能觸發(fā)一些和鼠標(biāo)活動(dòng)相關(guān)的事件。 圖形控件最典型的例 子是Tlabel和TspeedButton。由此可以看出圖形組件的功能很弱,有讀者會(huì)問圖形組件的用處何在呢?其實(shí)使用圖形組件的最大好處在于節(jié)省資源,正是因?yàn)樗?/p>

52、們的功能較弱, 所以使用的系統(tǒng)資源就要少。 在一個(gè)應(yīng)用程序中, 如果能在不 影響 其功能的前提下合理大量地使用 圖形組件,將會(huì)大減少程序?qū)ο到y(tǒng)資源的消耗。非可視組件是與可視組件相并列的另一類組件, 非可視組件在程序運(yùn)行中是不可見的 (除各 種對(duì)話框組件之外, 事實(shí)上有人認(rèn)為對(duì)話框組件不能歸入非可視組件, 應(yīng)該是另一種介于可 視與非可視之間的組件) 。§3.2 Delphi 6.0 控件用 Delphi6 開發(fā)數(shù)據(jù)庫應(yīng)用,重點(diǎn)是和各種數(shù)據(jù)庫組件打交道,當(dāng)然也要使用其它的一些組 件,現(xiàn)在就我在系統(tǒng)設(shè)計(jì)中所使用的重要組件給與簡單介紹。3.2.1 ADO 數(shù)據(jù)訪問組件ADO 數(shù)據(jù)對(duì)象 (Ac

53、tive Data Objects) 實(shí)際是一種提供訪問各種數(shù)據(jù)類型的鏈接機(jī)制。 ADO 設(shè) 計(jì)為一種極簡單的格式,通過 ODBC 的方法同數(shù)據(jù)庫接口中,可以使用任何一種 ODBC 數(shù) 據(jù)源,即不止適合于 SQL Server、Oracle、Access等數(shù)據(jù)庫應(yīng)用程序,也適合于Excel表格、文本文件、圖形文件和無格式的數(shù)據(jù)文件。 ADO 是基于 OLE-DB 之上的技術(shù),因此 ADO 通過其內(nèi)部的屬性和方法提供統(tǒng)一的數(shù)據(jù)訪問接口方法。ADO 使您的客戶端應(yīng)用程序能夠通過OLE DB提供訪問和操作在數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)。ADO支持用于建立 C/S和Web的應(yīng)用程序的主要功能。其主要優(yōu)點(diǎn)是易于

54、使用、高速度、低內(nèi)存支出和占用磁盤空間較少。ADO同時(shí)具有遠(yuǎn)程數(shù)據(jù)服務(wù)(RDS)功能,通過RDS可以在一次往返過程中實(shí)現(xiàn)將數(shù)據(jù)從服 務(wù)器移動(dòng)到客戶端應(yīng)用程序和 Web 頁、在客戶端對(duì)數(shù)據(jù)進(jìn)行處然后將更新結(jié)果返回服務(wù)器的操作。Delphi 6.0 繼續(xù)對(duì) Microsoft 的 ADO 訪問能力的支持。這種能力是通過一組新組件實(shí)現(xiàn)的, 這些組件是在 企業(yè) 版的 ADO 組件頁中,在組件面版的 ADO 頁上可以找到這些組件。利用 在前面章節(jié)提到的 TdataSet 抽象類, ADO 組件可以不通過 BDE 而直接實(shí)現(xiàn) ADO 連接。這 意味著只需要很少的代碼就可以實(shí)現(xiàn)該連接并且性能得到提高。利用

55、ADO 數(shù)據(jù)訪問組件,可以只使用 ADO 結(jié)構(gòu)與數(shù)據(jù)庫取得聯(lián)系并對(duì)其中的數(shù)據(jù)進(jìn)行操 作,而在這些過程中完全不需要使用 BDE 。大多數(shù)的 ADO 連接和數(shù)據(jù)集組件都是與基于 BDE 的連接和數(shù)據(jù)集組件相類似的。 TADOConnection 組件與基于 BDE 的應(yīng)用程序中的Tdatabase 組件類似。TADOTable 與 Ttable, TADOQuery 與 Tquery,以及 TADOStoreProc 和 TstoredProc 之間都具有這種類似的對(duì)應(yīng)關(guān)系。使用這些 ADO 組件的方式與我們常使用的數(shù)據(jù)訪問組件 (基于 BDE )都有許多相同之處。 TTADODataSet 沒有

56、直接的 BDE 對(duì)應(yīng)組件, 但它提供了許多與 Ttable 和 Tquery 相同的功能。 同樣, TADOCommand 也沒有相對(duì)應(yīng)的 BDE 組件, 它是在 Delphi/ADO 環(huán)境中完成特定功能的組件。 Delphi 6.0 通過 ADO 數(shù)據(jù)集訪問組 件,可以不借助 BDE 數(shù)據(jù)引擎而是通過微軟的 OLEDB 來訪問更為廣泛的數(shù)據(jù)庫中的數(shù)據(jù)。 ADO 數(shù)據(jù)集訪問組件與常用的數(shù)據(jù)訪問組件是并列的關(guān)系。在系統(tǒng)中我主要使用的是 ADOTablet 和 ADOQuery 兩個(gè)組件。3.2.2 數(shù)據(jù)控制類 DataControl數(shù)據(jù)控制類負(fù)責(zé)數(shù)據(jù)庫數(shù)據(jù)的顯示, 并把用戶對(duì)數(shù)據(jù)的修改傳回。 這

57、里的絕大多數(shù)組件, 如 DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid 的功能和對(duì)應(yīng)的非數(shù)據(jù)感 知組件相同, 如 TEdit 框, TRadioGroups 單選按鈕組等, 只不過在顯示數(shù)據(jù)庫數(shù)據(jù)時(shí)要用而 已。在系統(tǒng)中主要使用數(shù)據(jù)網(wǎng)格控件 DBGrid 和數(shù)據(jù)庫導(dǎo)航器控件 DBNavigator 。3.2.3 數(shù)據(jù)訪問類 DataAccess數(shù)據(jù)庫應(yīng)用系統(tǒng)中數(shù)據(jù)訪問是一個(gè)首要 問題 ,包括單用戶

58、和 C/S 系統(tǒng),都必須聯(lián)系一些數(shù) 據(jù)庫和數(shù)據(jù)表文件。 Delphi 6 提供了專門用于數(shù)據(jù)訪問的基類控件。主要包括數(shù)據(jù)源控件DataSource、客戶數(shù)據(jù)集控件 ClientDataSet、數(shù)據(jù)集提供器控件 DataSetProvider等等。Tdatabase:當(dāng)一個(gè)基于BDE的數(shù)據(jù)庫應(yīng)用程序需要一個(gè)永久數(shù)據(jù)庫連接時(shí),需要定制向一 個(gè)數(shù)據(jù)庫服務(wù)器的連接時(shí),需要事務(wù)控制和特殊的數(shù)據(jù)庫別名時(shí)就得用到Tdatabase對(duì)象。特別是當(dāng)連接到一個(gè)遠(yuǎn)程的SQL數(shù)據(jù)庫服務(wù)器時(shí),如果要利用BDE進(jìn)行數(shù)據(jù)庫事務(wù)處理,那么, TDatabase 對(duì)象的威力就體現(xiàn)出來了。在一個(gè)應(yīng)用程序中為每一個(gè)數(shù)據(jù)庫連接顯示的 聲明Tdatabase對(duì)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論