


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)庫基本概念3-1數(shù)據(jù)庫系統(tǒng)3-2數(shù)據(jù)庫管理系統(tǒng)(DBMS)3-3關(guān)系型數(shù)據(jù)庫3-4數(shù)據(jù)下設(shè)計3-5SQL語句MSSQLServer2000是微軟公司所推出的一套在Windows平臺上執(zhí)行的數(shù)據(jù)庫管理系統(tǒng),用以提供作為應(yīng)用程序的數(shù)據(jù)來源,存放各種數(shù)據(jù),并可以讓用戶很容易地達成所要進行的數(shù)據(jù)存取操作。同時它也提供了一些可視化的管理工具,協(xié)助數(shù)據(jù)庫系統(tǒng)管理者可以更方便快速地管理及設(shè)計庫數(shù)據(jù)內(nèi)的內(nèi)容,以及對數(shù)據(jù)庫進行維護。在開始介紹SQLServer2000數(shù)據(jù)庫管理系統(tǒng)的各項管理、維護操作之前,先來談?wù)勔恍┯嘘P(guān)數(shù)據(jù)庫的概念,讓讀者對數(shù)據(jù)庫系統(tǒng)能先有一些基本的認識。3-1數(shù)據(jù)庫系統(tǒng)什么是數(shù)據(jù)庫系統(tǒng)
2、?簡單地說,數(shù)據(jù)庫系統(tǒng)是一種計算機化的數(shù)據(jù)保存系統(tǒng),它以特有的數(shù)據(jù)存儲方式將相關(guān)的數(shù)據(jù)內(nèi)容整合在一起。我們可以將數(shù)據(jù)庫本身想成是一個電子檔案柜,在這個電子檔案柜內(nèi),存放著一些電子數(shù)據(jù)文件。數(shù)據(jù)庫系統(tǒng)主要的目的在于維護信息,并在必要時提供協(xié)助取得這些信息。3-1-1數(shù)據(jù)庫系統(tǒng)的類型數(shù)據(jù)庫系統(tǒng)被使用的范圍非常廣泛,從一般的微電腦到大型主機都可以使用。一般來說,大型主機多傾向于使用多用戶的數(shù)據(jù)庫系統(tǒng),而一般的微電腦、個人計算機則傾向于使用單用戶數(shù)據(jù)庫系統(tǒng)。這里所謂的單用戶數(shù)據(jù)個系統(tǒng),是指同時最多只能有一個用戶存取數(shù)據(jù)庫的內(nèi)容,而多用戶數(shù)據(jù)庫系統(tǒng),則允許多個用戶同時存取數(shù)據(jù)庫的內(nèi)容。數(shù)據(jù)庫系統(tǒng)的種類非
3、常多,目前以關(guān)系型(Relational)數(shù)據(jù)庫系統(tǒng)最為常見,所謂的關(guān)系型數(shù)據(jù)庫系統(tǒng)是以表(Table)的類型將數(shù)據(jù)提供給用戶,而所有的數(shù)據(jù)庫操作都是利用舊的表來產(chǎn)生新的表。除了關(guān)系型數(shù)據(jù)庫系統(tǒng)外,其他常見的數(shù)據(jù)庫系統(tǒng)類型還有InvertedList,Hierarchic,Network等數(shù)據(jù)庫系統(tǒng)。3-1-2數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)不同的數(shù)據(jù)庫系統(tǒng)有著不同的系統(tǒng)結(jié)構(gòu),毫無疑問,一個數(shù)據(jù)庫結(jié)構(gòu)并不能完全用于所有的數(shù)據(jù)庫系統(tǒng),在這里我們以最被廣泛認同的數(shù)據(jù)庫結(jié)構(gòu)ANSI/SPARC結(jié)構(gòu)來進行說明。1. ANSI/SPARC結(jié)構(gòu)(ConceptualLevel)以及外部層(在ANSI/SPARC結(jié)構(gòu)中將數(shù)
4、據(jù)庫分為內(nèi)部層(InternalLevel)、概念層ExternalLevel)等三層,如圖3-1所示。內(nèi)部層(Internallevel)數(shù)據(jù)存儲視域圖3-1數(shù)據(jù)庫結(jié)構(gòu)圖內(nèi)部層是最接近數(shù)據(jù)庫實體存儲位置的一層,與數(shù)據(jù)庫數(shù)據(jù)實際存儲方式有關(guān),在內(nèi)部層中以具體的方式來表示整個數(shù)據(jù)庫。外部層是最接近用戶的部分,與用戶對數(shù)據(jù)的查看方式有關(guān),在外部層中以用戶看得懂的方式來表示部分?jǐn)?shù)據(jù)庫的內(nèi)容,每個用戶所查看的數(shù)據(jù)內(nèi)容不同。概念層位于內(nèi)部層與外部層之間,以用戶看得懂的方式來表示整個數(shù)據(jù)個,提供每個用戶一致的數(shù)據(jù)查看內(nèi)容。不管是使用哪一種數(shù)據(jù)庫系統(tǒng),都只會影響到ANSI/SPARC結(jié)構(gòu)的外部層以及概念層內(nèi)
5、容,而與內(nèi)部層無關(guān)。例如,對于關(guān)系型數(shù)據(jù)庫系統(tǒng)而言,在概念層中所看到的數(shù)據(jù)一定是以關(guān)系型的形式存在,在外部視域中所看的數(shù)據(jù)有可能會以關(guān)系型的形式存在,至于在內(nèi)部層中的數(shù)據(jù)則一定不會是以關(guān)系型的形式存在。2. Mapping對應(yīng)在圖3-2的詳細結(jié)構(gòu)圖中,可以發(fā)現(xiàn)在內(nèi)部層與概念層之間以及概念層與外部層之間各有一個對應(yīng)(Mapping)存在,分別對應(yīng)著上下兩層的內(nèi)容。概念SfConceplualView)ConceptualiInternalMappingOi存儲的數(shù)據(jù)庫Qi(怕mal阪明L'1士-HJ圖3-2數(shù)據(jù)庫詳細結(jié)構(gòu)圖概念/內(nèi)部對應(yīng)(Conceptual/InternalMappin
6、g)位于概念層與內(nèi)部層之間,定義數(shù)據(jù)庫的概念視域內(nèi)容與實際存儲內(nèi)容之間的對應(yīng)關(guān)系。如果改變了數(shù)儲庫的存儲結(jié)構(gòu),只要在這個對應(yīng)中修改對應(yīng)的內(nèi)容就可以了,而不需要改變概念視域與外部視域的內(nèi)容。外部/概念對應(yīng)(external/conceptualmapping)位于外部層與概念層之間,定義特定外部視域與概念視域的對應(yīng)關(guān)系,也就是定義外部視域所查看的部分?jǐn)?shù)據(jù)庫內(nèi)容與整個數(shù)據(jù)庫之間的關(guān)系。3-1-3數(shù)據(jù)庫系統(tǒng)的主要組件基本上,在數(shù)據(jù)庫系統(tǒng)中包含了數(shù)據(jù)、軟件、硬件以及用戶等四個主要組件。1. 數(shù)據(jù)這里的數(shù)據(jù)是指實際存放在數(shù)據(jù)庫中的數(shù)據(jù),通常也就是在企業(yè)應(yīng)用系統(tǒng)中會使用到的永久性數(shù)據(jù)。這里所謂的永久性數(shù)據(jù)
7、并不是真的指該數(shù)據(jù)一定會存在一段很長的時間,而是用來與其他的暫時性數(shù)據(jù)(如,輸入數(shù)據(jù)、輸出數(shù)據(jù)、控制語句等)作為區(qū)分。雖然說不同的數(shù)據(jù)庫系統(tǒng),其存儲數(shù)據(jù)的方式或功能特性可能會有所不同,但一般說來,數(shù)據(jù)庫內(nèi)的數(shù)據(jù)通常是整合與共享的。所謂“數(shù)據(jù)整合”是指數(shù)據(jù)庫為存放多個數(shù)據(jù)文件集合的個體,而非僅能存放單一數(shù)據(jù)文件的個體,這些數(shù)據(jù)文件間若有重復(fù)的信息存在,則這些重復(fù)的數(shù)據(jù)可以被清除。例如,在數(shù)據(jù)庫中包含記錄員工基本數(shù)據(jù)的Employe以及記錄參加訓(xùn)練課程的員工數(shù)據(jù)Enrollment兩個數(shù)據(jù)文件,假設(shè)我們要知道所有參加訓(xùn)練課程員工的部門數(shù)據(jù),可以直接從Employe文件中取得,而不需將部門數(shù)據(jù)重復(fù)記
8、錄于Enrollment文件中。所謂的“數(shù)據(jù)共享”,是指數(shù)據(jù)庫內(nèi)的數(shù)據(jù)可以被多個不同的應(yīng)用程序或用戶共享。也就是說,我們只要在數(shù)據(jù)庫中存儲一份數(shù)據(jù),不同的用戶就可以為了相同或不同的目的來使用這個數(shù)據(jù)。例如,在人事管理系統(tǒng)中以及在會計薪金系統(tǒng)中都會使用到員工基本數(shù)據(jù)文件,在數(shù)據(jù)庫內(nèi)僅需存儲一份員工數(shù)據(jù)文件提供這兩個系統(tǒng)共同使用即可,而不需要分別為不同的系統(tǒng)各自存儲一份。2. 軟件軟件是指實體數(shù)據(jù)庫與用戶之間的接口,通常被稱為數(shù)據(jù)庫管理系統(tǒng)(DBMS),主要是被用來協(xié)助用戶存取數(shù)據(jù)庫的內(nèi)容。數(shù)據(jù)與實體數(shù)據(jù)庫中以特定的方式存儲,用戶若要直接存取實體數(shù)據(jù),就必須知道數(shù)據(jù)存放的格式以及數(shù)據(jù)存放的實體位置
9、。數(shù)據(jù)庫管理系統(tǒng)提供用戶一個數(shù)據(jù)存取的接口,將數(shù)據(jù)存儲的格式與位置交由DBMS來管理,所有的存取動作都交由DBMS來處理。換句話說,DBMS將數(shù)據(jù)庫由實體的硬件層提升成虛擬的視域,讓用戶的數(shù)據(jù)庫存取操作更為簡單,用戶不再需要知道實際上數(shù)據(jù)庫數(shù)據(jù)的存儲方式或存儲位置,只要知道數(shù)據(jù)庫在數(shù)據(jù)庫管理系統(tǒng)中的結(jié)構(gòu)定義,就可以通過DBMS順利存取數(shù)據(jù)庫的內(nèi)容。所以說,數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫系統(tǒng)中最重要的一項。3. 硬件要讓數(shù)據(jù)庫系統(tǒng)能夠順利地執(zhí)行,就必須提供適當(dāng)、足夠的硬件設(shè)備。數(shù)據(jù)庫系統(tǒng)可運行的硬件種類范圍非常廣泛,從一般的微電腦到大型主機都有。當(dāng)然,在不同的硬件設(shè)備上,使用的數(shù)據(jù)庫系統(tǒng)可能不同,其所提
10、供的功能特性也可能不同。例如,大系統(tǒng)通常使用多用戶數(shù)據(jù)庫系統(tǒng),允許多個用戶同時存取數(shù)據(jù)庫內(nèi)容;而一般的PC使用同時只能有一個用戶存取的單一用戶數(shù)據(jù)庫系統(tǒng)。與數(shù)據(jù)庫系統(tǒng)運行有關(guān)的硬件設(shè)備可分為以下兩類:存儲設(shè)備與I/O裝置:傳遞信息、存儲數(shù)據(jù)庫數(shù)據(jù)的設(shè)備。與數(shù)據(jù)庫數(shù)據(jù)量的大小有關(guān),數(shù)據(jù)量越多,需要的存儲空間也就越大。CPU處理器與內(nèi)存:執(zhí)行數(shù)據(jù)庫系統(tǒng)軟件所占用的系統(tǒng)資源。系統(tǒng)的處理器速度及內(nèi)存空間至少要能符合執(zhí)行操作系統(tǒng)與數(shù)據(jù)庫軟件的最小需求。理論上來說,CPU越快、內(nèi)存越大,則執(zhí)行效率就越高。數(shù)據(jù)庫的數(shù)據(jù)量除了會影響存儲空間外,也會影響數(shù)據(jù)庫的執(zhí)行效率,當(dāng)我們在規(guī)劃數(shù)據(jù)庫系統(tǒng)的硬件設(shè)備時,應(yīng)該
11、要以未來的數(shù)據(jù)量作為考慮的標(biāo)準(zhǔn),以減少日后升級或更換硬件設(shè)備的狀況。4. 用戶當(dāng)然必須要有用戶,數(shù)據(jù)庫系統(tǒng)才會有意義,基本上我們可以將數(shù)據(jù)庫系統(tǒng)的用戶分為:程序設(shè)計人員、終端用戶以及數(shù)據(jù)庫管理員等三類。數(shù)據(jù)庫管理員(DBA)是一個整合技術(shù)的專業(yè)人員,他主要的工作是建個一個數(shù)據(jù)庫,并將企業(yè)環(huán)境的決策內(nèi)容付諸于實踐,同時他也必須確保數(shù)據(jù)庫的執(zhí)行效率以及提供其他相關(guān)的技術(shù)服務(wù)。通常他是直接通過數(shù)據(jù)庫管理系統(tǒng)存取、維護數(shù)據(jù)庫的內(nèi)容。程序設(shè)計人員利用程序語言編寫數(shù)據(jù)庫應(yīng)用程序,在數(shù)據(jù)庫程序中可以利用DBMS所提供的功能指令,對數(shù)據(jù)庫的內(nèi)容進行存取。終端用戶(EndUser)通過數(shù)據(jù)庫應(yīng)用程序的操作,利用
12、工作站或終端機與數(shù)據(jù)庫系統(tǒng)建立交互,進而存取數(shù)據(jù)庫的數(shù)據(jù)。大部分的數(shù)據(jù)庫系統(tǒng)內(nèi)至少都會提供一個稱為查詢語言處理器(QueryLanguageProcessor)的內(nèi)建應(yīng)用程序,提供用戶以高級的指令或語句將命令傳遞給DBMS。3-1-4數(shù)據(jù)集中化管理在多用戶的環(huán)境下,使用數(shù)據(jù)庫系統(tǒng)維護數(shù)據(jù)將具有數(shù)據(jù)集中化管理的優(yōu)勢。所謂數(shù)據(jù)集中化管理的概念是指,由數(shù)據(jù)管理者(DA)負責(zé),就整個應(yīng)用環(huán)境需求作一個通盤的了解后,對數(shù)據(jù)加以整合分析,定義出數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容以及數(shù)據(jù)的管理、處理政策。接著,由數(shù)據(jù)庫管理者(DBA)將這些政策付諸于實踐并負責(zé)維護管理。數(shù)據(jù)集中化管理具有以下優(yōu)點:1. 減少重復(fù)的數(shù)據(jù)在非數(shù)據(jù)
13、庫系統(tǒng)中,每個應(yīng)用程序有各自的數(shù)據(jù)文件,這樣通常會造成數(shù)據(jù)重復(fù)存儲,浪費硬盤的空間。然而,這并不表示,一定要將數(shù)據(jù)庫內(nèi)所有的重復(fù)數(shù)據(jù)都刪除。有時候,由于技術(shù)上或?qū)嶋H應(yīng)用上的考慮,我們必須將相同的數(shù)據(jù)重復(fù)存儲成多份,并加強數(shù)據(jù)的維護。2. 避免數(shù)據(jù)不一致若在數(shù)據(jù)庫中有重復(fù)的數(shù)據(jù)存在,可以將具有重復(fù)性的部分定義在數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,交由DBMS來管理控制,以維護數(shù)據(jù)的一致性。也就是說,若在數(shù)據(jù)庫中修改一個重復(fù)性的數(shù)據(jù)內(nèi)容,則DBMS會自動維護數(shù)據(jù)庫內(nèi)容的一致性,根據(jù)用戶定義的維護內(nèi)容,同時將重復(fù)的地方全部修改,或取消修改數(shù)據(jù)的動作。3. 數(shù)據(jù)可共享數(shù)據(jù)庫內(nèi)的數(shù)據(jù)除了能夠提供多個應(yīng)用程序,
14、多個用戶共同使用外,也可以直接利用現(xiàn)有數(shù)據(jù)庫的內(nèi)容,建立一個新的數(shù)據(jù)庫應(yīng)用程序。4. 建立標(biāo)準(zhǔn)這里的標(biāo)準(zhǔn)是指數(shù)據(jù)存儲的表示格式,對于集中化的數(shù)據(jù)庫,DBA可以確保所有數(shù)據(jù)都是應(yīng)用設(shè)置的標(biāo)準(zhǔn)顯示。數(shù)據(jù)庫的數(shù)據(jù)標(biāo)準(zhǔn)化可以協(xié)助數(shù)據(jù)的交換動作,同時也能夠?qū)?shù)據(jù)庫移轉(zhuǎn)到其他系統(tǒng)上。5. 應(yīng)用安全設(shè)置將數(shù)據(jù)集中管理后,可以在數(shù)據(jù)庫系統(tǒng)中,利用用戶帳號的設(shè)置,來設(shè)置用戶的存取權(quán)限并維護數(shù)據(jù)的安全性。6. 維護數(shù)據(jù)的正確在數(shù)據(jù)庫系統(tǒng)中,對于有規(guī)則可循的數(shù)據(jù),我們可以依據(jù)數(shù)據(jù)的特性設(shè)置數(shù)據(jù)的準(zhǔn)則條件,這樣可以避免用戶輸入不合理的數(shù)據(jù)或是從數(shù)據(jù)庫中快速找出違背規(guī)則的數(shù)據(jù)。7. 平衡沖突性的需求在知道整個企業(yè)環(huán)境的
15、需求后,DBA就可以將系統(tǒng)加以結(jié)構(gòu)化,提供對企業(yè)環(huán)境的完整服務(wù)。對于有沖突的部分,根據(jù)企業(yè)需求的優(yōu)先等級設(shè)置,建立一個對企業(yè)而言最好的數(shù)據(jù)庫。3-1-5數(shù)據(jù)獨立在早期系統(tǒng)中的應(yīng)用程序通常是與數(shù)據(jù)相關(guān)的,也就是說,數(shù)據(jù)的存儲方式與數(shù)據(jù)的存取技術(shù)都是根據(jù)應(yīng)用程序的需要進行考慮,甚至將這些數(shù)據(jù)的存儲方式與數(shù)據(jù)的存取技術(shù)建立于程序代碼內(nèi)。因此,當(dāng)我們修改了數(shù)據(jù)的存儲方式或是數(shù)據(jù)的存取技術(shù)后,就勢必會影響到應(yīng)用程序。然而,在數(shù)據(jù)庫系統(tǒng)中,基于下列兩個理由,我們應(yīng)該避免應(yīng)用程序與數(shù)據(jù)產(chǎn)生相關(guān)性,也就是說應(yīng)用程序具有數(shù)據(jù)獨立性。在不同的應(yīng)用程序中,可能會需要對數(shù)據(jù)庫中相同的數(shù)據(jù)作不同的檢查。例如,在將數(shù)據(jù)整
16、合前,兩個應(yīng)用程序使用各自的數(shù)據(jù)文件,當(dāng)我們要將兩個數(shù)據(jù)文件整合成數(shù)據(jù)庫時,若發(fā)現(xiàn)共同的屬性在兩個數(shù)據(jù)文件中定義的數(shù)據(jù)類型不同,這時,我們?nèi)匀豢梢酝ㄟ^DBMS所提供的類型轉(zhuǎn)換功能來整合數(shù)據(jù)。因此,應(yīng)用程序若與數(shù)據(jù)獨立,則不需修改應(yīng)用程序的內(nèi)容。數(shù)據(jù)庫管理員可以在數(shù)據(jù)庫中任意修改數(shù)據(jù)的存儲結(jié)構(gòu)或是存取技術(shù),而不需去修改現(xiàn)有的應(yīng)用程序內(nèi)容。例如,當(dāng)我們要在數(shù)據(jù)庫中增加新的數(shù)據(jù)或修改應(yīng)用程序的修先等級,若應(yīng)用程序與數(shù)據(jù)獨立,則只需修改數(shù)據(jù)庫的內(nèi)容,而不需修改應(yīng)用程序的內(nèi)容。所以我們可以說,數(shù)據(jù)獨立是將應(yīng)用程序從數(shù)據(jù)的存儲結(jié)構(gòu)及存取技術(shù)分離開來,在應(yīng)用程序中不需以特定的存儲結(jié)構(gòu)或存取技術(shù)作為考慮。不過
17、值得注意的是,數(shù)據(jù)獨立并非DBMS與生俱有的,而是需要數(shù)據(jù)庫管理員自行在程序設(shè)計上加入,所以說數(shù)據(jù)獨立是使用數(shù)據(jù)庫的優(yōu)點,到不如說是使用數(shù)據(jù)庫的目標(biāo)。3-2數(shù)據(jù)庫管理系統(tǒng)(DBMS)前面曾經(jīng)說過,數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫系統(tǒng)中最重要的部分,用戶對數(shù)據(jù)庫的所有存取動作都是通過數(shù)據(jù)管理系統(tǒng)來執(zhí)行的,而許多的數(shù)據(jù)管理、維護也都交由DBMS來完成,因此,在數(shù)據(jù)庫管理系統(tǒng)中至少要提供下列功1. 數(shù)據(jù)定義數(shù)據(jù)定義是指定義數(shù)據(jù)庫內(nèi)數(shù)據(jù)的類型、數(shù)據(jù)的長度等,例如,在數(shù)據(jù)庫內(nèi)增加一個數(shù)據(jù)文件時,必須對數(shù)據(jù)文件內(nèi)的各個屬性進行數(shù)據(jù)定義。因此,DBMS必須能夠接受原有的數(shù)據(jù)定義格式,并且轉(zhuǎn)換成適當(dāng)?shù)臄?shù)據(jù)格式存儲。換句
18、話說,在DBMS中必須包含每一種數(shù)據(jù)定義語言(DDLs)的語言處理組件。2. 數(shù)據(jù)處理DBMS必須能夠?qū)?shù)據(jù)庫內(nèi)現(xiàn)存的數(shù)據(jù)做查詢、修改、刪除等動作,或是在數(shù)據(jù)庫中增加數(shù)據(jù)。因此,在DBMS中必須包含數(shù)據(jù)處理語言(DML)的處理組件。3. 數(shù)據(jù)安全及正確DBMS必須能監(jiān)視用戶存取數(shù)據(jù)庫的需求,對于每一個數(shù)據(jù)存取需求在執(zhí)行前都會與設(shè)置的準(zhǔn)則條件加以驗證,并且拒絕所有違反安全設(shè)置或驗證規(guī)則的存取需求。4. 數(shù)據(jù)實時復(fù)原數(shù)據(jù)庫的數(shù)據(jù)可能會因為操作的錯誤或設(shè)備的損耗而損壞,這時DBMS(或是其他相關(guān)的軟件組件,稱為轉(zhuǎn)換管理員)必須提供數(shù)據(jù)實時復(fù)原控制能力,讓數(shù)據(jù)庫能夠在最短的時間內(nèi)恢復(fù)正確的數(shù)據(jù)。最常見
19、的方法是將以前備份的數(shù)據(jù)重新加載。5. 數(shù)據(jù)目錄DBMS必須提供數(shù)據(jù)目錄功能,存儲數(shù)據(jù)庫中所定義的信息,數(shù)據(jù)目錄是數(shù)據(jù)庫內(nèi)所有不同于Schema及對應(yīng)存儲的地方。換句話說,數(shù)據(jù)目錄內(nèi)包含詳細的表示數(shù)據(jù)庫系統(tǒng)本身所關(guān)切的各種對象。所以,我們也可以將數(shù)據(jù)目錄視為是數(shù)據(jù)庫的數(shù)據(jù)庫。6. 效率在數(shù)據(jù)庫中可以使用不同的存取程序來執(zhí)行相同的存取動作,而不同的存取程序會有不同的執(zhí)行效率。DBMS必須提供效率最佳化功能,使所有的數(shù)據(jù)存取需求能夠以最佳化的效率來執(zhí)行。這個最佳化的程序是由DBMS中的重要組件Optimizer來決定的。因此,當(dāng)用戶在存取數(shù)據(jù)庫的內(nèi)容時,只要設(shè)置他們想要取得什么數(shù)據(jù),而不需要指定如
20、何去取得這些數(shù)據(jù)的程序,數(shù)據(jù)庫系統(tǒng)將會自動以最佳化的程序來執(zhí)行數(shù)據(jù)存取動作。3-3關(guān)系型數(shù)據(jù)庫關(guān)系型數(shù)據(jù)庫開始于1970末期至1980初,截至目前為止市面上已有數(shù)百種的關(guān)系型系統(tǒng),已成為最通用的數(shù)據(jù)庫系統(tǒng)。到底什么是關(guān)系型系統(tǒng)呢?簡單地說,關(guān)系型數(shù)據(jù)庫是以表(Table)的類型將數(shù)據(jù)提供給用戶,而用戶的數(shù)據(jù)存取動作都可以說是利用舊的表來產(chǎn)生新的表。3-3-1數(shù)據(jù)的表示方法關(guān)系型系統(tǒng)必須符合數(shù)據(jù)庫以表類型提供用戶的需求,這里的表是關(guān)系型系統(tǒng)的邏輯結(jié)構(gòu),而非實體結(jié)構(gòu)。實際上在實體層中,系統(tǒng)可以使用任何的一般存儲結(jié)構(gòu),如循序文件、索引、鏈接等。而在邏輯層中,則是將這些實體層結(jié)構(gòu)進行對應(yīng),并建立成表。
21、前面所說的邏輯結(jié)構(gòu),只對ANSI/SPARC結(jié)構(gòu)中的概念層與外部層有作用,對于內(nèi)部層而言邏輯結(jié)構(gòu)不具有任何意義。所以,在概念層與外部層中數(shù)據(jù)庫可能是關(guān)系型的,而在內(nèi)部層則絕對不是關(guān)系型的。在關(guān)系型數(shù)據(jù)庫中,整個信息內(nèi)容只有一個表示方式,那就是明確的數(shù)據(jù)值。也就是說,數(shù)據(jù)庫內(nèi)所有的數(shù)據(jù)都是Atomic,這里的Atomic是指具有意義的數(shù)據(jù)的最小單位,因此,表中單一字段對應(yīng)位置內(nèi)存儲的一定是單一的數(shù)據(jù)值,而不會是一群數(shù)據(jù)。比較特別的是,在關(guān)系型數(shù)據(jù)庫中,是以表間相同的字段值來表示表的關(guān)聯(lián)性,而不是在表中存儲指針數(shù)據(jù),將一個表連接到另一個表。如圖3-3所示,廠商數(shù)據(jù)與供應(yīng)數(shù)據(jù)利用廠商數(shù)據(jù)字段進行關(guān)聯(lián)
22、,將兩個表中存儲相同廠商代號的數(shù)據(jù)連接在一起。廠肉代號POOOIFOODSP0DO3STKCO01444111CCE08010250DBGCD02050111廠商代號I產(chǎn)品代號P0001C001F0001COOZFOODSC001I廠超名禰|貌一編號|產(chǎn)昌代號|KJ001P0001rooozSTK.COSTK.COUCCE口14440H44II1106010250COOLC002C001圖3-3廠商數(shù)據(jù)與供應(yīng)數(shù)據(jù)兩個表做美聯(lián)3-3-2表一般來說,我們可以將數(shù)據(jù)庫的結(jié)構(gòu)分為數(shù)據(jù)庫DataBase、表Table以及記錄Record三層。在一個數(shù)據(jù)庫內(nèi)可包含多個表,而每個表內(nèi)則存儲著數(shù)條記錄。當(dāng)我們
23、設(shè)計一個數(shù)據(jù)庫程序時,通常會將所有在程序使用到的表存放在同一個數(shù)據(jù)庫內(nèi),如圖3-4所示。JPOOQlOOQ1F0001UJ02FOODScomII廠甫常號I產(chǎn)品代號I圖3-4數(shù)據(jù)庫結(jié)構(gòu)圖所謂的表是指直接由一個數(shù)據(jù)文件讀出的完整數(shù)據(jù),也就是代表實際存常的表本身,它通常被視為是一個特定信息內(nèi)容的數(shù)據(jù)集合,如下圖為“廠商數(shù)據(jù)”表畫面,在這個表中存儲了廠商數(shù)據(jù)有關(guān)的信息,如圖3-5所示。T:FD002ETECDrJCCEDL郴TTlECLD2SDFOOQ3DKG.DO(9061111*圖3-5表畫面基本上,我們可以將表想成一個二維數(shù)組,表中的每一行代表一條記錄,而每一列則代表一個字段,例如在上圖的“廠
24、商數(shù)據(jù)”表中存儲了3條記錄,而每一條記錄都是由3個字段所構(gòu)成的,這3個字段分別代表廠商代號、廠商名稱、統(tǒng)一編號信息。當(dāng)我們在創(chuàng)建一個表時,必須先考慮這個表的主要用途以及它所必須包含的信息,然后再將這些信息分別定義成不同的字段。不同的數(shù)據(jù)庫系統(tǒng)所提供的字段設(shè)置項目不同,基本上字段的設(shè)置內(nèi)容包括有字段名稱、數(shù)據(jù)類型、長度、允許空等項目。根據(jù)不同的字段特性,可以為字段指定適當(dāng)?shù)臄?shù)據(jù)類型,對于需存儲文字?jǐn)?shù)據(jù)的字段應(yīng)定義為文字類型,而對于內(nèi)容只有數(shù)字或數(shù)據(jù)內(nèi)容,需做數(shù)值運算的字段則應(yīng)定義為數(shù)值類型。3-3-3鍵在關(guān)系型數(shù)據(jù)庫中,表間具有數(shù)據(jù)相關(guān)性,為維護數(shù)據(jù)的完整性,避免與表數(shù)據(jù)修改后喪失其關(guān)聯(lián)性,在表
25、中定義適當(dāng)?shù)闹麈I(PrimaryKey)與外鍵(ForeignKey),通過定義鍵維護表間的關(guān)聯(lián)性。主鍵(PrimaryKey)是能辨識記錄的最小字段組,換句話說就是表的最小IdentifyKey。例如在客戶表中,每一條客戶數(shù)據(jù)有其個別的客戶代號,通過客戶代號的內(nèi)容,就可以直接找到唯一的一條客戶記錄,故客戶代號可以是客戶表的主鍵。被設(shè)為PrimaryKey的字段,其內(nèi)容值必須具有唯一性且不能是空白。外鍵(ForeignKey)是指表中指向于其他表PrimaryKey的字段,若被參考的PrimaryKey包含有多個數(shù)據(jù)行,則ForeignKey也必須包含有同樣個數(shù)的數(shù)據(jù)行,與PrimaryKey
26、字段一一對應(yīng)。3-3-4表索引在表中可以為某些字段定義索引,這個索引文件內(nèi)存儲著排序匯整后的字段數(shù)據(jù)內(nèi)容與對應(yīng)在表中的位置。當(dāng)我們要對某一字段執(zhí)行數(shù)據(jù)查詢操作時,可以通過該字段的索引文件找到數(shù)據(jù)在表中的位置,再取得查詢的結(jié)果。圖3-6字段索引由于通常表的索引文件會比表本身小,所以一般來說通過索引搜尋數(shù)據(jù)的速度會比直接在表上查詢的速度快,不過相對的建立索引文件會占用磁盤空間,且數(shù)據(jù)更新的速度可能會較慢。在表中為常用來查詢的字段做索引文件,可以加速查詢的動作,這對于包含有大量數(shù)據(jù)的表而言非常重要。不過若是經(jīng)常同時對兩個字段的內(nèi)容進個搜尋,則必須將兩個字段的內(nèi)容制作成一個索引,而不是分別各自制作各自
27、的索引。3-3-5視圖當(dāng)我們編寫數(shù)據(jù)庫程序時,經(jīng)常會利用Select語句將一個或數(shù)個表的內(nèi)容篩選列示出來,例如在成績管理系統(tǒng)中需要列出所有總平均不及格的學(xué)生,這種通過數(shù)據(jù)選取或篩選動作而產(chǎn)生的虛擬表就稱為視圖View。View可以由多個數(shù)據(jù)文件合并出來,或是從一個數(shù)據(jù)文件取出部分?jǐn)?shù)據(jù)或部分字段所構(gòu)成的虛擬表。由于View并不像Table在數(shù)據(jù)庫中是獨立存在View可執(zhí)行的動作會的,而且View的內(nèi)容很可能會與多個表有關(guān),因此,受到限制,用戶只能對View執(zhí)行數(shù)據(jù)查詢的操作。廠商代號廠商名稱藐一端號FD001STK.CO01444111PQC02UCCE0301020P0003DRG.CO020
28、50111圖3-7廠商數(shù)據(jù)表及View廠而代號藐1編號P0001D1444111PC002DB01U2JOP0003D2DJDH1View只是在數(shù)據(jù)庫管理系統(tǒng)中存儲定義內(nèi)容,并不是真的以表存在,因此,當(dāng)我們對View執(zhí)行數(shù)據(jù)查詢時,并無法直接操作,而必須先將查詢指令進行轉(zhuǎn)換。我們可以將常用的窗體查詢定義成View存儲于數(shù)據(jù)庫內(nèi),在程序中需要列出定義為View的數(shù)據(jù)時,只需在程序中調(diào)用執(zhí)行該View的名稱,即可得到所需要的數(shù)據(jù)內(nèi)容。下圖為SQLServer的視圖屬性窗口畫面,在文本框中用戶可以在CreateView語句后設(shè)置View名稱,在AS語句后設(shè)置視圖的內(nèi)容(Select語句)。圖3-8視
29、圖屬性畫面3-3-6存儲過程當(dāng)我們開發(fā)數(shù)據(jù)庫程序時,經(jīng)常會應(yīng)用到SQL語法對數(shù)據(jù)庫的內(nèi)容進行存取,一般都會將這些存取數(shù)據(jù)庫的動作直接寫在程序中。如果數(shù)據(jù)庫的內(nèi)容是提供給多個程序使用或是需要以不同的程序開發(fā)相同的軟件時,就必須在每一個程序中重復(fù)編寫SQL語句,而且一但要修改,也必須到每一個程序中修改。因此在數(shù)據(jù)庫中允許我們將執(zhí)行的操作直接定義在數(shù)據(jù)庫中,編寫程序時只要調(diào)用該數(shù)據(jù)庫程序即可執(zhí)行程序的內(nèi)容,感覺上與程序模塊化相似。這樣將數(shù)據(jù)庫的處理動作定義在數(shù)據(jù)庫服務(wù)器端不但能夠?qū)?shù)據(jù)存取的動作集中化處理維護方便外,更能加速數(shù)據(jù)庫存取動作的執(zhí)行效率,因為數(shù)據(jù)庫服務(wù)器會對這些服務(wù)器端的程序先進行編譯。
30、所有執(zhí)行于數(shù)據(jù)庫的動作都可以定義存儲為存儲過程(StoredProcedure),而且在一個存儲過程中可以包含多個SQL指令,也可以定義多個變量來連接多個處理動作。我們可以將數(shù)據(jù)庫中通常執(zhí)行的數(shù)據(jù)處理動作定義為存儲過程,以提供應(yīng)用系統(tǒng)的調(diào)用,同時也可通過參數(shù)的設(shè)置使程序的執(zhí)行更加具有彈性。圖3-9存儲過程畫面上圖為SQLServer"存儲過程的屬性”窗口,在文本框中用戶可以在CreateProcedure語句后設(shè)置存儲過程的名稱,在CreateProcedure與AS關(guān)鍵詞間可以聲明此存儲過程的參數(shù),參數(shù)可以是傳入?yún)?shù)也可以是傳出參數(shù),若為傳出參數(shù)則需在參數(shù)聲明時加上OUTPUT字樣
31、,而在AS關(guān)鍵詞后則是設(shè)置該存儲過程所有執(zhí)行的數(shù)據(jù)庫存取動作。3-3-7觸發(fā)器觸發(fā)器(Trigger)觸發(fā)程序也是一種存儲過程,只不過它會在數(shù)據(jù)庫被修改時自動執(zhí)行,這與對象的事件有點相似。在一個表中只能有一個Insert、一個Delete及一個Update觸發(fā)器,這三種觸發(fā)器分別在新增數(shù)據(jù)、刪除數(shù)據(jù)及改變數(shù)據(jù)后觸發(fā)運行,可以將這三種觸發(fā)過程定義在同一個Trigger中,也可以各自獨立。下圖為SQLServer的觸發(fā)器屬性窗口畫面,用戶可以在CREATETRIGGER關(guān)鍵詞后設(shè)置觸發(fā)程序的名稱,在ON關(guān)鍵詞后設(shè)置引用這個觸發(fā)程序的表名稱,在FOR關(guān)鍵詞后設(shè)置引用這個觸發(fā)程序的事件(Insert,
32、Delete或Update),若同時引用于一個以上的事件需用逗號做分隔,而在AS關(guān)鍵詞后則是設(shè)置該存儲過程所有執(zhí)行的數(shù)據(jù)庫存取動作。圖3-10Trigger畫面3-3-8數(shù)據(jù)目錄數(shù)據(jù)目錄(Catalog)是指存儲數(shù)據(jù)庫所有Schema以及所有對應(yīng)的地方,它包含各種與數(shù)據(jù)庫系統(tǒng)本身有關(guān)的數(shù)據(jù)。在關(guān)系型數(shù)據(jù)庫中,Catalog也是以表的形式存在,這種表稱為系統(tǒng)表?;旧?,在Catalog內(nèi)會包含Tables及Columns兩個表,其中Tables表存儲數(shù)據(jù)庫中每一個表的摘要信息,如表名、表字段數(shù)、行數(shù)等。而Columns表則存儲每個表字段的摘要信息,如表名稱、字段名稱等。表的內(nèi)容如圖3-11所示。
33、*字段敏廣鹿詼料35產(chǎn)品姿制24廠商姿制廠商代號廠商詼料廠商名釉廠商澆料統(tǒng)一墉號f-產(chǎn)品注制產(chǎn)晶代號81碰皿圖3-11產(chǎn)品供應(yīng)數(shù)據(jù)庫的Catalog內(nèi)容3-4數(shù)據(jù)庫設(shè)計在創(chuàng)建數(shù)據(jù)庫前,首先我們要決定這個數(shù)據(jù)庫需要提供哪些信息(數(shù)據(jù)項),然后再根據(jù)這些數(shù)據(jù)項的特點來組織表的結(jié)構(gòu)。3-4-1Entities&RelationshipEntities被廣泛地使用在數(shù)據(jù)庫環(huán)境中,用來代表可被區(qū)分的對象。在數(shù)據(jù)庫中,除了有Entities夕卜,還有Relationship將數(shù)據(jù)庫內(nèi)Entities連接在一起。當(dāng)然也可以將Relationship視為是Entities的一種。例如,在產(chǎn)品供應(yīng)數(shù)據(jù)庫
34、中,廠商數(shù)據(jù)以及產(chǎn)品數(shù)據(jù)是可被區(qū)分的對象,所以在數(shù)據(jù)庫中以Entities對象存在,而在這兩個Entities對象之間有一個Relationship存儲廠商數(shù)據(jù)以及產(chǎn)品數(shù)據(jù)的對應(yīng)關(guān)系,也就是存儲廠商供應(yīng)哪些產(chǎn)品。下圖為產(chǎn)品供應(yīng)數(shù)據(jù)庫的Entities/RelationshipDiagram,簡稱ERDiagram,在圖中以四方形表示Entities,以菱形來表示Relationship。圖3-12ERDiagram前面說過,Entities是用來表示對象,存儲任何我們想要記錄的對象信息,換句話說,Entities(及Relationship)必須具有屬性,這些屬性也必須被定義在數(shù)據(jù)庫內(nèi)。例如,
35、在廠商數(shù)據(jù)中,我們要記錄廠商代號、廠商名稱、統(tǒng)一編號等信息,因此,數(shù)據(jù)庫中的廠商Entities具有廠商代號、廠商名稱、統(tǒng)一編號等屬性。3-4-2數(shù)據(jù)正規(guī)化在設(shè)計數(shù)據(jù)庫時,應(yīng)該盡量以"一個數(shù)據(jù)只出現(xiàn)在一個地方(onefactinoneplace)”設(shè)計規(guī)則為準(zhǔn),盡量避免數(shù)據(jù)重復(fù)。而數(shù)據(jù)正規(guī)化的概念也就是為了達成這個設(shè)計規(guī)則所衍生出來的,將一個表分割成多個表存在數(shù)據(jù)庫中。Coddy將整個數(shù)據(jù)正規(guī)化的動作分為多個層次,如圖3-13所示,在每一個層次中定準(zhǔn)則條件,只要表能夠符合前幾層設(shè)置的正規(guī)化條件,我們就可以稱這個表為第幾個正規(guī)表。例如,關(guān)聯(lián)是數(shù)據(jù)庫內(nèi)的表符合低一層的正規(guī)化條件,表內(nèi)都是
36、存儲Scalar,因此,我們說該表1NF(firstNormalForm)。所以,我們可以說數(shù)據(jù)正規(guī)化的過程就是在建立正規(guī)表(NormalForms)。金郵表1NF圖3-13正規(guī)化在設(shè)計數(shù)據(jù)庫時,雖然我們可以將數(shù)據(jù)做多層的正規(guī)化,然而實際上,我們往往只會做三層正規(guī)化。一般表只要能符合3NF或BCNF,在執(zhí)行數(shù)據(jù)存取上就不會有問題了,只有少數(shù)的特殊狀況要繼續(xù)往下正規(guī)化。所以一般聽到的數(shù)據(jù)正規(guī)化都是指3NF。現(xiàn)在,我們就直接以下圖的產(chǎn)品供應(yīng)表為例,來說明如何將表正規(guī)化。首先,我們先從1NF開始,1NF的正規(guī)化條件為:在表內(nèi)只包含有意義數(shù)據(jù)的最小單位。我們可以發(fā)現(xiàn)在下面的表中所有存儲的數(shù)據(jù)都是實際的
37、值,因此表符合1NF。號產(chǎn)昌代號CS名ft區(qū)導(dǎo)POOOLC001STK.CODD2FOOD!0002STK.CONYDD2POO02COOIUCCESCDD3FOOD3CU03STT.CX)NYDD2圖3-14產(chǎn)品供應(yīng)數(shù)據(jù)表接下來,繼續(xù)往下一層正規(guī)化,往2NF邁進,2NF的正規(guī)化條件為:表符合NF,且所有非鍵值的數(shù)據(jù)與主鍵值之間無對應(yīng)關(guān)系存在。由上圖的表中,可以發(fā)現(xiàn)主鍵值廠商代號與非主鍵值廠商名稱、地區(qū)、區(qū)碼等字段有對應(yīng)關(guān)系,只要表內(nèi)存儲的廠商代碼相同,則其他字段(廠商名稱、地區(qū)、區(qū)碼)內(nèi)存儲的數(shù)據(jù)也就一定相同。因此,產(chǎn)品供應(yīng)表不符合2NF。這時,只要在表中,將與主鍵值具有對應(yīng)關(guān)系的字段數(shù)據(jù),
38、連同對應(yīng)的主鍵值刪除,并另外建立成一個表(主鍵值仍然會存在于原來的表中)。最后,別忘了要在新建立的表中將重復(fù)的數(shù)據(jù)刪除,如圖3-15所示。廠商代號產(chǎn)品代號F0001C001P0001CO02F0002C001P0003C003廠商代號廠商名稱地區(qū)區(qū)號P0001STKCONY002FOOQ2UCCESC003PD003STTCONY002-圖3-15產(chǎn)品供應(yīng)表與廠商數(shù)據(jù)表經(jīng)過第二層正規(guī)化后,表的主鍵值與非主鍵值之間就不再具有任何的相關(guān)性存在。3NF的正規(guī)化條件為:符合2NF,且所有非鍵值的數(shù)據(jù)之間無相互依賴關(guān)系存在。在上圖的廠商表中,地區(qū)以及區(qū)號這兩個非主鍵值的字段具有對應(yīng)關(guān)系存在,只要地區(qū)名稱
39、相同,則區(qū)號數(shù)據(jù)就一定相同,因此廠商表不符合3NF。這時,只要在表中將具有對應(yīng)關(guān)系的字段數(shù)據(jù)刪除,另外建立成一個表,并將表中重復(fù)的數(shù)據(jù)刪除即可,如圖3-16所示。廠商代號產(chǎn)品代號P00Q1C001P0001CD02F血3C001P。叩3C003-E代號廠商名稱F00018TKCOPOC02UCCEP0003STTCO圖3-16產(chǎn)品供應(yīng)表再次,檢查表的內(nèi)容,發(fā)現(xiàn)所有的表內(nèi)已經(jīng)不存在任何具有對應(yīng)關(guān)系的字段,完成數(shù)據(jù)正規(guī)化的動作。3-5SQL語句SQL是StructureQueryLanguage的縮寫,它是一種標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫查詢語言,通過SQL語句的執(zhí)行可以對數(shù)據(jù)庫內(nèi)容(表及記錄)進行定義、修改或查詢。由于在許多的數(shù)據(jù)庫管理系統(tǒng)(如Access,SQL等)以及數(shù)據(jù)庫程序語言(如VisualBas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學(xué)設(shè)計課件效果
- 農(nóng)場英語教學(xué)課件
- 教育說課課件下載
- 旅行雜志特色活動方案
- 星球促銷活動方案
- 春節(jié)化妝品銷售活動方案
- 春游歌唱比賽活動方案
- 春分教育活動方案
- 旅游文化節(jié)線下活動方案
- 早餐回饋活動方案
- 江蘇省南京市六校聯(lián)合體2024-2025學(xué)年高一下學(xué)期期末調(diào)研測試歷史試題(含答案)
- 2025年法律職業(yè)資格考試民法專項練習(xí)卷:合同法真題解析及試題
- 玻尿酸介紹課件
- 2025至2030年中國電子束曝光系統(tǒng)行業(yè)市場研究分析及發(fā)展前景研判報告
- 2025中國心肌病綜合管理指南要點解讀課件
- 技術(shù)中心人員管理制度
- 2025年形勢與政策課程期末考試復(fù)習(xí)試卷及答案
- 財產(chǎn)獨立性專項審計報告模板3(清算審計報告模板)
- 2025年中考英語答題技巧與模式專題11閱讀七選五(學(xué)生版+解析)
- 高一生物遺傳測試卷及答案
- 成本削減方案
評論
0/150
提交評論