asp與sql網(wǎng)頁(yè)數(shù)據(jù)庫(kù)程序設(shè)計(jì)03_第1頁(yè)
asp與sql網(wǎng)頁(yè)數(shù)據(jù)庫(kù)程序設(shè)計(jì)03_第2頁(yè)
asp與sql網(wǎng)頁(yè)數(shù)據(jù)庫(kù)程序設(shè)計(jì)03_第3頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)基本概念3-1數(shù)據(jù)庫(kù)系統(tǒng)3-2數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)3-3關(guān)系型數(shù)據(jù)庫(kù)3-4數(shù)據(jù)下設(shè)計(jì)3-5SQL語(yǔ)句MSSQLServer2000是微軟公司所推出的一套在Windows平臺(tái)上執(zhí)行的數(shù)據(jù)庫(kù)管理系統(tǒng),用以提供作為應(yīng)用程序的數(shù)據(jù)來(lái)源,存放各種數(shù)據(jù),并可以讓用戶很容易地達(dá)成所要進(jìn)行的數(shù)據(jù)存取操作。同時(shí)它也提供了一些可視化的管理工具,協(xié)助數(shù)據(jù)庫(kù)系統(tǒng)管理者可以更方便快速地管理及設(shè)計(jì)庫(kù)數(shù)據(jù)內(nèi)的內(nèi)容,以及對(duì)數(shù)據(jù)庫(kù)進(jìn)行維護(hù)。在開(kāi)始介紹SQLServer2000數(shù)據(jù)庫(kù)管理系統(tǒng)的各項(xiàng)管理、維護(hù)操作之前,先來(lái)談?wù)勔恍┯嘘P(guān)數(shù)據(jù)庫(kù)的概念,讓讀者對(duì)數(shù)據(jù)庫(kù)系統(tǒng)能先有一些基本的認(rèn)識(shí)。3-1數(shù)據(jù)庫(kù)系統(tǒng)什么是數(shù)據(jù)庫(kù)系統(tǒng)

2、?簡(jiǎn)單地說(shuō),數(shù)據(jù)庫(kù)系統(tǒng)是一種計(jì)算機(jī)化的數(shù)據(jù)保存系統(tǒng),它以特有的數(shù)據(jù)存儲(chǔ)方式將相關(guān)的數(shù)據(jù)內(nèi)容整合在一起。我們可以將數(shù)據(jù)庫(kù)本身想成是一個(gè)電子檔案柜,在這個(gè)電子檔案柜內(nèi),存放著一些電子數(shù)據(jù)文件。數(shù)據(jù)庫(kù)系統(tǒng)主要的目的在于維護(hù)信息,并在必要時(shí)提供協(xié)助取得這些信息。3-1-1數(shù)據(jù)庫(kù)系統(tǒng)的類(lèi)型數(shù)據(jù)庫(kù)系統(tǒng)被使用的范圍非常廣泛,從一般的微電腦到大型主機(jī)都可以使用。一般來(lái)說(shuō),大型主機(jī)多傾向于使用多用戶的數(shù)據(jù)庫(kù)系統(tǒng),而一般的微電腦、個(gè)人計(jì)算機(jī)則傾向于使用單用戶數(shù)據(jù)庫(kù)系統(tǒng)。這里所謂的單用戶數(shù)據(jù)個(gè)系統(tǒng),是指同時(shí)最多只能有一個(gè)用戶存取數(shù)據(jù)庫(kù)的內(nèi)容,而多用戶數(shù)據(jù)庫(kù)系統(tǒng),則允許多個(gè)用戶同時(shí)存取數(shù)據(jù)庫(kù)的內(nèi)容。數(shù)據(jù)庫(kù)系統(tǒng)的種類(lèi)非

3、常多,目前以關(guān)系型(Relational)數(shù)據(jù)庫(kù)系統(tǒng)最為常見(jiàn),所謂的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)是以表(Table)的類(lèi)型將數(shù)據(jù)提供給用戶,而所有的數(shù)據(jù)庫(kù)操作都是利用舊的表來(lái)產(chǎn)生新的表。除了關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)外,其他常見(jiàn)的數(shù)據(jù)庫(kù)系統(tǒng)類(lèi)型還有InvertedList,Hierarchic,Network等數(shù)據(jù)庫(kù)系統(tǒng)。3-1-2數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)不同的數(shù)據(jù)庫(kù)系統(tǒng)有著不同的系統(tǒng)結(jié)構(gòu),毫無(wú)疑問(wèn),一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)并不能完全用于所有的數(shù)據(jù)庫(kù)系統(tǒng),在這里我們以最被廣泛認(rèn)同的數(shù)據(jù)庫(kù)結(jié)構(gòu)ANSI/SPARC結(jié)構(gòu)來(lái)進(jìn)行說(shuō)明。1. ANSI/SPARC結(jié)構(gòu)(ConceptualLevel)以及外部層(在ANSI/SPARC結(jié)構(gòu)中將數(shù)

4、據(jù)庫(kù)分為內(nèi)部層(InternalLevel)、概念層ExternalLevel)等三層,如圖3-1所示。內(nèi)部層(Internallevel)數(shù)據(jù)存儲(chǔ)視域圖3-1數(shù)據(jù)庫(kù)結(jié)構(gòu)圖內(nèi)部層是最接近數(shù)據(jù)庫(kù)實(shí)體存儲(chǔ)位置的一層,與數(shù)據(jù)庫(kù)數(shù)據(jù)實(shí)際存儲(chǔ)方式有關(guān),在內(nèi)部層中以具體的方式來(lái)表示整個(gè)數(shù)據(jù)庫(kù)。外部層是最接近用戶的部分,與用戶對(duì)數(shù)據(jù)的查看方式有關(guān),在外部層中以用戶看得懂的方式來(lái)表示部分?jǐn)?shù)據(jù)庫(kù)的內(nèi)容,每個(gè)用戶所查看的數(shù)據(jù)內(nèi)容不同。概念層位于內(nèi)部層與外部層之間,以用戶看得懂的方式來(lái)表示整個(gè)數(shù)據(jù)個(gè),提供每個(gè)用戶一致的數(shù)據(jù)查看內(nèi)容。不管是使用哪一種數(shù)據(jù)庫(kù)系統(tǒng),都只會(huì)影響到ANSI/SPARC結(jié)構(gòu)的外部層以及概念層內(nèi)

5、容,而與內(nèi)部層無(wú)關(guān)。例如,對(duì)于關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)而言,在概念層中所看到的數(shù)據(jù)一定是以關(guān)系型的形式存在,在外部視域中所看的數(shù)據(jù)有可能會(huì)以關(guān)系型的形式存在,至于在內(nèi)部層中的數(shù)據(jù)則一定不會(huì)是以關(guān)系型的形式存在。2. Mapping對(duì)應(yīng)在圖3-2的詳細(xì)結(jié)構(gòu)圖中,可以發(fā)現(xiàn)在內(nèi)部層與概念層之間以及概念層與外部層之間各有一個(gè)對(duì)應(yīng)(Mapping)存在,分別對(duì)應(yīng)著上下兩層的內(nèi)容。概念SfConceplualView)ConceptualiInternalMappingOi存儲(chǔ)的數(shù)據(jù)庫(kù)Qi(怕mal阪明L'1士-HJ圖3-2數(shù)據(jù)庫(kù)詳細(xì)結(jié)構(gòu)圖概念/內(nèi)部對(duì)應(yīng)(Conceptual/InternalMappin

6、g)位于概念層與內(nèi)部層之間,定義數(shù)據(jù)庫(kù)的概念視域內(nèi)容與實(shí)際存儲(chǔ)內(nèi)容之間的對(duì)應(yīng)關(guān)系。如果改變了數(shù)儲(chǔ)庫(kù)的存儲(chǔ)結(jié)構(gòu),只要在這個(gè)對(duì)應(yīng)中修改對(duì)應(yīng)的內(nèi)容就可以了,而不需要改變概念視域與外部視域的內(nèi)容。外部/概念對(duì)應(yīng)(external/conceptualmapping)位于外部層與概念層之間,定義特定外部視域與概念視域的對(duì)應(yīng)關(guān)系,也就是定義外部視域所查看的部分?jǐn)?shù)據(jù)庫(kù)內(nèi)容與整個(gè)數(shù)據(jù)庫(kù)之間的關(guān)系。3-1-3數(shù)據(jù)庫(kù)系統(tǒng)的主要組件基本上,在數(shù)據(jù)庫(kù)系統(tǒng)中包含了數(shù)據(jù)、軟件、硬件以及用戶等四個(gè)主要組件。1. 數(shù)據(jù)這里的數(shù)據(jù)是指實(shí)際存放在數(shù)據(jù)庫(kù)中的數(shù)據(jù),通常也就是在企業(yè)應(yīng)用系統(tǒng)中會(huì)使用到的永久性數(shù)據(jù)。這里所謂的永久性數(shù)據(jù)

7、并不是真的指該數(shù)據(jù)一定會(huì)存在一段很長(zhǎng)的時(shí)間,而是用來(lái)與其他的暫時(shí)性數(shù)據(jù)(如,輸入數(shù)據(jù)、輸出數(shù)據(jù)、控制語(yǔ)句等)作為區(qū)分。雖然說(shuō)不同的數(shù)據(jù)庫(kù)系統(tǒng),其存儲(chǔ)數(shù)據(jù)的方式或功能特性可能會(huì)有所不同,但一般說(shuō)來(lái),數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)通常是整合與共享的。所謂“數(shù)據(jù)整合”是指數(shù)據(jù)庫(kù)為存放多個(gè)數(shù)據(jù)文件集合的個(gè)體,而非僅能存放單一數(shù)據(jù)文件的個(gè)體,這些數(shù)據(jù)文件間若有重復(fù)的信息存在,則這些重復(fù)的數(shù)據(jù)可以被清除。例如,在數(shù)據(jù)庫(kù)中包含記錄員工基本數(shù)據(jù)的Employe以及記錄參加訓(xùn)練課程的員工數(shù)據(jù)Enrollment兩個(gè)數(shù)據(jù)文件,假設(shè)我們要知道所有參加訓(xùn)練課程員工的部門(mén)數(shù)據(jù),可以直接從Employe文件中取得,而不需將部門(mén)數(shù)據(jù)重復(fù)記

8、錄于Enrollment文件中。所謂的“數(shù)據(jù)共享”,是指數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)可以被多個(gè)不同的應(yīng)用程序或用戶共享。也就是說(shuō),我們只要在數(shù)據(jù)庫(kù)中存儲(chǔ)一份數(shù)據(jù),不同的用戶就可以為了相同或不同的目的來(lái)使用這個(gè)數(shù)據(jù)。例如,在人事管理系統(tǒng)中以及在會(huì)計(jì)薪金系統(tǒng)中都會(huì)使用到員工基本數(shù)據(jù)文件,在數(shù)據(jù)庫(kù)內(nèi)僅需存儲(chǔ)一份員工數(shù)據(jù)文件提供這兩個(gè)系統(tǒng)共同使用即可,而不需要分別為不同的系統(tǒng)各自存儲(chǔ)一份。2. 軟件軟件是指實(shí)體數(shù)據(jù)庫(kù)與用戶之間的接口,通常被稱為數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),主要是被用來(lái)協(xié)助用戶存取數(shù)據(jù)庫(kù)的內(nèi)容。數(shù)據(jù)與實(shí)體數(shù)據(jù)庫(kù)中以特定的方式存儲(chǔ),用戶若要直接存取實(shí)體數(shù)據(jù),就必須知道數(shù)據(jù)存放的格式以及數(shù)據(jù)存放的實(shí)體位置

9、。數(shù)據(jù)庫(kù)管理系統(tǒng)提供用戶一個(gè)數(shù)據(jù)存取的接口,將數(shù)據(jù)存儲(chǔ)的格式與位置交由DBMS來(lái)管理,所有的存取動(dòng)作都交由DBMS來(lái)處理。換句話說(shuō),DBMS將數(shù)據(jù)庫(kù)由實(shí)體的硬件層提升成虛擬的視域,讓用戶的數(shù)據(jù)庫(kù)存取操作更為簡(jiǎn)單,用戶不再需要知道實(shí)際上數(shù)據(jù)庫(kù)數(shù)據(jù)的存儲(chǔ)方式或存儲(chǔ)位置,只要知道數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)管理系統(tǒng)中的結(jié)構(gòu)定義,就可以通過(guò)DBMS順利存取數(shù)據(jù)庫(kù)的內(nèi)容。所以說(shuō),數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)中最重要的一項(xiàng)。3. 硬件要讓數(shù)據(jù)庫(kù)系統(tǒng)能夠順利地執(zhí)行,就必須提供適當(dāng)、足夠的硬件設(shè)備。數(shù)據(jù)庫(kù)系統(tǒng)可運(yùn)行的硬件種類(lèi)范圍非常廣泛,從一般的微電腦到大型主機(jī)都有。當(dāng)然,在不同的硬件設(shè)備上,使用的數(shù)據(jù)庫(kù)系統(tǒng)可能不同,其所提

10、供的功能特性也可能不同。例如,大系統(tǒng)通常使用多用戶數(shù)據(jù)庫(kù)系統(tǒng),允許多個(gè)用戶同時(shí)存取數(shù)據(jù)庫(kù)內(nèi)容;而一般的PC使用同時(shí)只能有一個(gè)用戶存取的單一用戶數(shù)據(jù)庫(kù)系統(tǒng)。與數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行有關(guān)的硬件設(shè)備可分為以下兩類(lèi):存儲(chǔ)設(shè)備與I/O裝置:傳遞信息、存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù)的設(shè)備。與數(shù)據(jù)庫(kù)數(shù)據(jù)量的大小有關(guān),數(shù)據(jù)量越多,需要的存儲(chǔ)空間也就越大。CPU處理器與內(nèi)存:執(zhí)行數(shù)據(jù)庫(kù)系統(tǒng)軟件所占用的系統(tǒng)資源。系統(tǒng)的處理器速度及內(nèi)存空間至少要能符合執(zhí)行操作系統(tǒng)與數(shù)據(jù)庫(kù)軟件的最小需求。理論上來(lái)說(shuō),CPU越快、內(nèi)存越大,則執(zhí)行效率就越高。數(shù)據(jù)庫(kù)的數(shù)據(jù)量除了會(huì)影響存儲(chǔ)空間外,也會(huì)影響數(shù)據(jù)庫(kù)的執(zhí)行效率,當(dāng)我們?cè)谝?guī)劃數(shù)據(jù)庫(kù)系統(tǒng)的硬件設(shè)備時(shí),應(yīng)該

11、要以未來(lái)的數(shù)據(jù)量作為考慮的標(biāo)準(zhǔn),以減少日后升級(jí)或更換硬件設(shè)備的狀況。4. 用戶當(dāng)然必須要有用戶,數(shù)據(jù)庫(kù)系統(tǒng)才會(huì)有意義,基本上我們可以將數(shù)據(jù)庫(kù)系統(tǒng)的用戶分為:程序設(shè)計(jì)人員、終端用戶以及數(shù)據(jù)庫(kù)管理員等三類(lèi)。數(shù)據(jù)庫(kù)管理員(DBA)是一個(gè)整合技術(shù)的專業(yè)人員,他主要的工作是建個(gè)一個(gè)數(shù)據(jù)庫(kù),并將企業(yè)環(huán)境的決策內(nèi)容付諸于實(shí)踐,同時(shí)他也必須確保數(shù)據(jù)庫(kù)的執(zhí)行效率以及提供其他相關(guān)的技術(shù)服務(wù)。通常他是直接通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)存取、維護(hù)數(shù)據(jù)庫(kù)的內(nèi)容。程序設(shè)計(jì)人員利用程序語(yǔ)言編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,在數(shù)據(jù)庫(kù)程序中可以利用DBMS所提供的功能指令,對(duì)數(shù)據(jù)庫(kù)的內(nèi)容進(jìn)行存取。終端用戶(EndUser)通過(guò)數(shù)據(jù)庫(kù)應(yīng)用程序的操作,利用

12、工作站或終端機(jī)與數(shù)據(jù)庫(kù)系統(tǒng)建立交互,進(jìn)而存取數(shù)據(jù)庫(kù)的數(shù)據(jù)。大部分的數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)至少都會(huì)提供一個(gè)稱為查詢語(yǔ)言處理器(QueryLanguageProcessor)的內(nèi)建應(yīng)用程序,提供用戶以高級(jí)的指令或語(yǔ)句將命令傳遞給DBMS。3-1-4數(shù)據(jù)集中化管理在多用戶的環(huán)境下,使用數(shù)據(jù)庫(kù)系統(tǒng)維護(hù)數(shù)據(jù)將具有數(shù)據(jù)集中化管理的優(yōu)勢(shì)。所謂數(shù)據(jù)集中化管理的概念是指,由數(shù)據(jù)管理者(DA)負(fù)責(zé),就整個(gè)應(yīng)用環(huán)境需求作一個(gè)通盤(pán)的了解后,對(duì)數(shù)據(jù)加以整合分析,定義出數(shù)據(jù)庫(kù)的數(shù)據(jù)內(nèi)容以及數(shù)據(jù)的管理、處理政策。接著,由數(shù)據(jù)庫(kù)管理者(DBA)將這些政策付諸于實(shí)踐并負(fù)責(zé)維護(hù)管理。數(shù)據(jù)集中化管理具有以下優(yōu)點(diǎn):1. 減少重復(fù)的數(shù)據(jù)在非數(shù)據(jù)

13、庫(kù)系統(tǒng)中,每個(gè)應(yīng)用程序有各自的數(shù)據(jù)文件,這樣通常會(huì)造成數(shù)據(jù)重復(fù)存儲(chǔ),浪費(fèi)硬盤(pán)的空間。然而,這并不表示,一定要將數(shù)據(jù)庫(kù)內(nèi)所有的重復(fù)數(shù)據(jù)都刪除。有時(shí)候,由于技術(shù)上或?qū)嶋H應(yīng)用上的考慮,我們必須將相同的數(shù)據(jù)重復(fù)存儲(chǔ)成多份,并加強(qiáng)數(shù)據(jù)的維護(hù)。2. 避免數(shù)據(jù)不一致若在數(shù)據(jù)庫(kù)中有重復(fù)的數(shù)據(jù)存在,可以將具有重復(fù)性的部分定義在數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中,交由DBMS來(lái)管理控制,以維護(hù)數(shù)據(jù)的一致性。也就是說(shuō),若在數(shù)據(jù)庫(kù)中修改一個(gè)重復(fù)性的數(shù)據(jù)內(nèi)容,則DBMS會(huì)自動(dòng)維護(hù)數(shù)據(jù)庫(kù)內(nèi)容的一致性,根據(jù)用戶定義的維護(hù)內(nèi)容,同時(shí)將重復(fù)的地方全部修改,或取消修改數(shù)據(jù)的動(dòng)作。3. 數(shù)據(jù)可共享數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)除了能夠提供多個(gè)應(yīng)用程序,

14、多個(gè)用戶共同使用外,也可以直接利用現(xiàn)有數(shù)據(jù)庫(kù)的內(nèi)容,建立一個(gè)新的數(shù)據(jù)庫(kù)應(yīng)用程序。4. 建立標(biāo)準(zhǔn)這里的標(biāo)準(zhǔn)是指數(shù)據(jù)存儲(chǔ)的表示格式,對(duì)于集中化的數(shù)據(jù)庫(kù),DBA可以確保所有數(shù)據(jù)都是應(yīng)用設(shè)置的標(biāo)準(zhǔn)顯示。數(shù)據(jù)庫(kù)的數(shù)據(jù)標(biāo)準(zhǔn)化可以協(xié)助數(shù)據(jù)的交換動(dòng)作,同時(shí)也能夠?qū)?shù)據(jù)庫(kù)移轉(zhuǎn)到其他系統(tǒng)上。5. 應(yīng)用安全設(shè)置將數(shù)據(jù)集中管理后,可以在數(shù)據(jù)庫(kù)系統(tǒng)中,利用用戶帳號(hào)的設(shè)置,來(lái)設(shè)置用戶的存取權(quán)限并維護(hù)數(shù)據(jù)的安全性。6. 維護(hù)數(shù)據(jù)的正確在數(shù)據(jù)庫(kù)系統(tǒng)中,對(duì)于有規(guī)則可循的數(shù)據(jù),我們可以依據(jù)數(shù)據(jù)的特性設(shè)置數(shù)據(jù)的準(zhǔn)則條件,這樣可以避免用戶輸入不合理的數(shù)據(jù)或是從數(shù)據(jù)庫(kù)中快速找出違背規(guī)則的數(shù)據(jù)。7. 平衡沖突性的需求在知道整個(gè)企業(yè)環(huán)境的

15、需求后,DBA就可以將系統(tǒng)加以結(jié)構(gòu)化,提供對(duì)企業(yè)環(huán)境的完整服務(wù)。對(duì)于有沖突的部分,根據(jù)企業(yè)需求的優(yōu)先等級(jí)設(shè)置,建立一個(gè)對(duì)企業(yè)而言最好的數(shù)據(jù)庫(kù)。3-1-5數(shù)據(jù)獨(dú)立在早期系統(tǒng)中的應(yīng)用程序通常是與數(shù)據(jù)相關(guān)的,也就是說(shuō),數(shù)據(jù)的存儲(chǔ)方式與數(shù)據(jù)的存取技術(shù)都是根據(jù)應(yīng)用程序的需要進(jìn)行考慮,甚至將這些數(shù)據(jù)的存儲(chǔ)方式與數(shù)據(jù)的存取技術(shù)建立于程序代碼內(nèi)。因此,當(dāng)我們修改了數(shù)據(jù)的存儲(chǔ)方式或是數(shù)據(jù)的存取技術(shù)后,就勢(shì)必會(huì)影響到應(yīng)用程序。然而,在數(shù)據(jù)庫(kù)系統(tǒng)中,基于下列兩個(gè)理由,我們應(yīng)該避免應(yīng)用程序與數(shù)據(jù)產(chǎn)生相關(guān)性,也就是說(shuō)應(yīng)用程序具有數(shù)據(jù)獨(dú)立性。在不同的應(yīng)用程序中,可能會(huì)需要對(duì)數(shù)據(jù)庫(kù)中相同的數(shù)據(jù)作不同的檢查。例如,在將數(shù)據(jù)整

16、合前,兩個(gè)應(yīng)用程序使用各自的數(shù)據(jù)文件,當(dāng)我們要將兩個(gè)數(shù)據(jù)文件整合成數(shù)據(jù)庫(kù)時(shí),若發(fā)現(xiàn)共同的屬性在兩個(gè)數(shù)據(jù)文件中定義的數(shù)據(jù)類(lèi)型不同,這時(shí),我們?nèi)匀豢梢酝ㄟ^(guò)DBMS所提供的類(lèi)型轉(zhuǎn)換功能來(lái)整合數(shù)據(jù)。因此,應(yīng)用程序若與數(shù)據(jù)獨(dú)立,則不需修改應(yīng)用程序的內(nèi)容。數(shù)據(jù)庫(kù)管理員可以在數(shù)據(jù)庫(kù)中任意修改數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)或是存取技術(shù),而不需去修改現(xiàn)有的應(yīng)用程序內(nèi)容。例如,當(dāng)我們要在數(shù)據(jù)庫(kù)中增加新的數(shù)據(jù)或修改應(yīng)用程序的修先等級(jí),若應(yīng)用程序與數(shù)據(jù)獨(dú)立,則只需修改數(shù)據(jù)庫(kù)的內(nèi)容,而不需修改應(yīng)用程序的內(nèi)容。所以我們可以說(shuō),數(shù)據(jù)獨(dú)立是將應(yīng)用程序從數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)及存取技術(shù)分離開(kāi)來(lái),在應(yīng)用程序中不需以特定的存儲(chǔ)結(jié)構(gòu)或存取技術(shù)作為考慮。不過(guò)

17、值得注意的是,數(shù)據(jù)獨(dú)立并非DBMS與生俱有的,而是需要數(shù)據(jù)庫(kù)管理員自行在程序設(shè)計(jì)上加入,所以說(shuō)數(shù)據(jù)獨(dú)立是使用數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),到不如說(shuō)是使用數(shù)據(jù)庫(kù)的目標(biāo)。3-2數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)前面曾經(jīng)說(shuō)過(guò),數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)中最重要的部分,用戶對(duì)數(shù)據(jù)庫(kù)的所有存取動(dòng)作都是通過(guò)數(shù)據(jù)管理系統(tǒng)來(lái)執(zhí)行的,而許多的數(shù)據(jù)管理、維護(hù)也都交由DBMS來(lái)完成,因此,在數(shù)據(jù)庫(kù)管理系統(tǒng)中至少要提供下列功1. 數(shù)據(jù)定義數(shù)據(jù)定義是指定義數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的類(lèi)型、數(shù)據(jù)的長(zhǎng)度等,例如,在數(shù)據(jù)庫(kù)內(nèi)增加一個(gè)數(shù)據(jù)文件時(shí),必須對(duì)數(shù)據(jù)文件內(nèi)的各個(gè)屬性進(jìn)行數(shù)據(jù)定義。因此,DBMS必須能夠接受原有的數(shù)據(jù)定義格式,并且轉(zhuǎn)換成適當(dāng)?shù)臄?shù)據(jù)格式存儲(chǔ)。換句

18、話說(shuō),在DBMS中必須包含每一種數(shù)據(jù)定義語(yǔ)言(DDLs)的語(yǔ)言處理組件。2. 數(shù)據(jù)處理DBMS必須能夠?qū)?shù)據(jù)庫(kù)內(nèi)現(xiàn)存的數(shù)據(jù)做查詢、修改、刪除等動(dòng)作,或是在數(shù)據(jù)庫(kù)中增加數(shù)據(jù)。因此,在DBMS中必須包含數(shù)據(jù)處理語(yǔ)言(DML)的處理組件。3. 數(shù)據(jù)安全及正確DBMS必須能監(jiān)視用戶存取數(shù)據(jù)庫(kù)的需求,對(duì)于每一個(gè)數(shù)據(jù)存取需求在執(zhí)行前都會(huì)與設(shè)置的準(zhǔn)則條件加以驗(yàn)證,并且拒絕所有違反安全設(shè)置或驗(yàn)證規(guī)則的存取需求。4. 數(shù)據(jù)實(shí)時(shí)復(fù)原數(shù)據(jù)庫(kù)的數(shù)據(jù)可能會(huì)因?yàn)椴僮鞯腻e(cuò)誤或設(shè)備的損耗而損壞,這時(shí)DBMS(或是其他相關(guān)的軟件組件,稱為轉(zhuǎn)換管理員)必須提供數(shù)據(jù)實(shí)時(shí)復(fù)原控制能力,讓數(shù)據(jù)庫(kù)能夠在最短的時(shí)間內(nèi)恢復(fù)正確的數(shù)據(jù)。最常見(jiàn)

19、的方法是將以前備份的數(shù)據(jù)重新加載。5. 數(shù)據(jù)目錄DBMS必須提供數(shù)據(jù)目錄功能,存儲(chǔ)數(shù)據(jù)庫(kù)中所定義的信息,數(shù)據(jù)目錄是數(shù)據(jù)庫(kù)內(nèi)所有不同于Schema及對(duì)應(yīng)存儲(chǔ)的地方。換句話說(shuō),數(shù)據(jù)目錄內(nèi)包含詳細(xì)的表示數(shù)據(jù)庫(kù)系統(tǒng)本身所關(guān)切的各種對(duì)象。所以,我們也可以將數(shù)據(jù)目錄視為是數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)。6. 效率在數(shù)據(jù)庫(kù)中可以使用不同的存取程序來(lái)執(zhí)行相同的存取動(dòng)作,而不同的存取程序會(huì)有不同的執(zhí)行效率。DBMS必須提供效率最佳化功能,使所有的數(shù)據(jù)存取需求能夠以最佳化的效率來(lái)執(zhí)行。這個(gè)最佳化的程序是由DBMS中的重要組件Optimizer來(lái)決定的。因此,當(dāng)用戶在存取數(shù)據(jù)庫(kù)的內(nèi)容時(shí),只要設(shè)置他們想要取得什么數(shù)據(jù),而不需要指定如

20、何去取得這些數(shù)據(jù)的程序,數(shù)據(jù)庫(kù)系統(tǒng)將會(huì)自動(dòng)以最佳化的程序來(lái)執(zhí)行數(shù)據(jù)存取動(dòng)作。3-3關(guān)系型數(shù)據(jù)庫(kù)關(guān)系型數(shù)據(jù)庫(kù)開(kāi)始于1970末期至1980初,截至目前為止市面上已有數(shù)百種的關(guān)系型系統(tǒng),已成為最通用的數(shù)據(jù)庫(kù)系統(tǒng)。到底什么是關(guān)系型系統(tǒng)呢?簡(jiǎn)單地說(shuō),關(guān)系型數(shù)據(jù)庫(kù)是以表(Table)的類(lèi)型將數(shù)據(jù)提供給用戶,而用戶的數(shù)據(jù)存取動(dòng)作都可以說(shuō)是利用舊的表來(lái)產(chǎn)生新的表。3-3-1數(shù)據(jù)的表示方法關(guān)系型系統(tǒng)必須符合數(shù)據(jù)庫(kù)以表類(lèi)型提供用戶的需求,這里的表是關(guān)系型系統(tǒng)的邏輯結(jié)構(gòu),而非實(shí)體結(jié)構(gòu)。實(shí)際上在實(shí)體層中,系統(tǒng)可以使用任何的一般存儲(chǔ)結(jié)構(gòu),如循序文件、索引、鏈接等。而在邏輯層中,則是將這些實(shí)體層結(jié)構(gòu)進(jìn)行對(duì)應(yīng),并建立成表。

21、前面所說(shuō)的邏輯結(jié)構(gòu),只對(duì)ANSI/SPARC結(jié)構(gòu)中的概念層與外部層有作用,對(duì)于內(nèi)部層而言邏輯結(jié)構(gòu)不具有任何意義。所以,在概念層與外部層中數(shù)據(jù)庫(kù)可能是關(guān)系型的,而在內(nèi)部層則絕對(duì)不是關(guān)系型的。在關(guān)系型數(shù)據(jù)庫(kù)中,整個(gè)信息內(nèi)容只有一個(gè)表示方式,那就是明確的數(shù)據(jù)值。也就是說(shuō),數(shù)據(jù)庫(kù)內(nèi)所有的數(shù)據(jù)都是Atomic,這里的Atomic是指具有意義的數(shù)據(jù)的最小單位,因此,表中單一字段對(duì)應(yīng)位置內(nèi)存儲(chǔ)的一定是單一的數(shù)據(jù)值,而不會(huì)是一群數(shù)據(jù)。比較特別的是,在關(guān)系型數(shù)據(jù)庫(kù)中,是以表間相同的字段值來(lái)表示表的關(guān)聯(lián)性,而不是在表中存儲(chǔ)指針數(shù)據(jù),將一個(gè)表連接到另一個(gè)表。如圖3-3所示,廠商數(shù)據(jù)與供應(yīng)數(shù)據(jù)利用廠商數(shù)據(jù)字段進(jìn)行關(guān)聯(lián)

22、,將兩個(gè)表中存儲(chǔ)相同廠商代號(hào)的數(shù)據(jù)連接在一起。廠肉代號(hào)POOOIFOODSP0DO3STKCO01444111CCE08010250DBGCD02050111廠商代號(hào)I產(chǎn)品代號(hào)P0001C001F0001COOZFOODSC001I廠超名禰|貌一編號(hào)|產(chǎn)昌代號(hào)|KJ001P0001rooozSTK.COSTK.COUCCE口14440H44II1106010250COOLC002C001圖3-3廠商數(shù)據(jù)與供應(yīng)數(shù)據(jù)兩個(gè)表做美聯(lián)3-3-2表一般來(lái)說(shuō),我們可以將數(shù)據(jù)庫(kù)的結(jié)構(gòu)分為數(shù)據(jù)庫(kù)DataBase、表Table以及記錄Record三層。在一個(gè)數(shù)據(jù)庫(kù)內(nèi)可包含多個(gè)表,而每個(gè)表內(nèi)則存儲(chǔ)著數(shù)條記錄。當(dāng)我們

23、設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)程序時(shí),通常會(huì)將所有在程序使用到的表存放在同一個(gè)數(shù)據(jù)庫(kù)內(nèi),如圖3-4所示。JPOOQlOOQ1F0001UJ02FOODScomII廠甫常號(hào)I產(chǎn)品代號(hào)I圖3-4數(shù)據(jù)庫(kù)結(jié)構(gòu)圖所謂的表是指直接由一個(gè)數(shù)據(jù)文件讀出的完整數(shù)據(jù),也就是代表實(shí)際存常的表本身,它通常被視為是一個(gè)特定信息內(nèi)容的數(shù)據(jù)集合,如下圖為“廠商數(shù)據(jù)”表畫(huà)面,在這個(gè)表中存儲(chǔ)了廠商數(shù)據(jù)有關(guān)的信息,如圖3-5所示。T:FD002ETECDrJCCEDL郴TTlECLD2SDFOOQ3DKG.DO(9061111*圖3-5表畫(huà)面基本上,我們可以將表想成一個(gè)二維數(shù)組,表中的每一行代表一條記錄,而每一列則代表一個(gè)字段,例如在上圖的“廠

24、商數(shù)據(jù)”表中存儲(chǔ)了3條記錄,而每一條記錄都是由3個(gè)字段所構(gòu)成的,這3個(gè)字段分別代表廠商代號(hào)、廠商名稱、統(tǒng)一編號(hào)信息。當(dāng)我們?cè)趧?chuàng)建一個(gè)表時(shí),必須先考慮這個(gè)表的主要用途以及它所必須包含的信息,然后再將這些信息分別定義成不同的字段。不同的數(shù)據(jù)庫(kù)系統(tǒng)所提供的字段設(shè)置項(xiàng)目不同,基本上字段的設(shè)置內(nèi)容包括有字段名稱、數(shù)據(jù)類(lèi)型、長(zhǎng)度、允許空等項(xiàng)目。根據(jù)不同的字段特性,可以為字段指定適當(dāng)?shù)臄?shù)據(jù)類(lèi)型,對(duì)于需存儲(chǔ)文字?jǐn)?shù)據(jù)的字段應(yīng)定義為文字類(lèi)型,而對(duì)于內(nèi)容只有數(shù)字或數(shù)據(jù)內(nèi)容,需做數(shù)值運(yùn)算的字段則應(yīng)定義為數(shù)值類(lèi)型。3-3-3鍵在關(guān)系型數(shù)據(jù)庫(kù)中,表間具有數(shù)據(jù)相關(guān)性,為維護(hù)數(shù)據(jù)的完整性,避免與表數(shù)據(jù)修改后喪失其關(guān)聯(lián)性,在表

25、中定義適當(dāng)?shù)闹麈I(PrimaryKey)與外鍵(ForeignKey),通過(guò)定義鍵維護(hù)表間的關(guān)聯(lián)性。主鍵(PrimaryKey)是能辨識(shí)記錄的最小字段組,換句話說(shuō)就是表的最小IdentifyKey。例如在客戶表中,每一條客戶數(shù)據(jù)有其個(gè)別的客戶代號(hào),通過(guò)客戶代號(hào)的內(nèi)容,就可以直接找到唯一的一條客戶記錄,故客戶代號(hào)可以是客戶表的主鍵。被設(shè)為PrimaryKey的字段,其內(nèi)容值必須具有唯一性且不能是空白。外鍵(ForeignKey)是指表中指向于其他表PrimaryKey的字段,若被參考的PrimaryKey包含有多個(gè)數(shù)據(jù)行,則ForeignKey也必須包含有同樣個(gè)數(shù)的數(shù)據(jù)行,與PrimaryKey

26、字段一一對(duì)應(yīng)。3-3-4表索引在表中可以為某些字段定義索引,這個(gè)索引文件內(nèi)存儲(chǔ)著排序匯整后的字段數(shù)據(jù)內(nèi)容與對(duì)應(yīng)在表中的位置。當(dāng)我們要對(duì)某一字段執(zhí)行數(shù)據(jù)查詢操作時(shí),可以通過(guò)該字段的索引文件找到數(shù)據(jù)在表中的位置,再取得查詢的結(jié)果。圖3-6字段索引由于通常表的索引文件會(huì)比表本身小,所以一般來(lái)說(shuō)通過(guò)索引搜尋數(shù)據(jù)的速度會(huì)比直接在表上查詢的速度快,不過(guò)相對(duì)的建立索引文件會(huì)占用磁盤(pán)空間,且數(shù)據(jù)更新的速度可能會(huì)較慢。在表中為常用來(lái)查詢的字段做索引文件,可以加速查詢的動(dòng)作,這對(duì)于包含有大量數(shù)據(jù)的表而言非常重要。不過(guò)若是經(jīng)常同時(shí)對(duì)兩個(gè)字段的內(nèi)容進(jìn)個(gè)搜尋,則必須將兩個(gè)字段的內(nèi)容制作成一個(gè)索引,而不是分別各自制作各自

27、的索引。3-3-5視圖當(dāng)我們編寫(xiě)數(shù)據(jù)庫(kù)程序時(shí),經(jīng)常會(huì)利用Select語(yǔ)句將一個(gè)或數(shù)個(gè)表的內(nèi)容篩選列示出來(lái),例如在成績(jī)管理系統(tǒng)中需要列出所有總平均不及格的學(xué)生,這種通過(guò)數(shù)據(jù)選取或篩選動(dòng)作而產(chǎn)生的虛擬表就稱為視圖View。View可以由多個(gè)數(shù)據(jù)文件合并出來(lái),或是從一個(gè)數(shù)據(jù)文件取出部分?jǐn)?shù)據(jù)或部分字段所構(gòu)成的虛擬表。由于View并不像Table在數(shù)據(jù)庫(kù)中是獨(dú)立存在View可執(zhí)行的動(dòng)作會(huì)的,而且View的內(nèi)容很可能會(huì)與多個(gè)表有關(guān),因此,受到限制,用戶只能對(duì)View執(zhí)行數(shù)據(jù)查詢的操作。廠商代號(hào)廠商名稱藐一端號(hào)FD001STK.CO01444111PQC02UCCE0301020P0003DRG.CO020

28、50111圖3-7廠商數(shù)據(jù)表及View廠而代號(hào)藐1編號(hào)P0001D1444111PC002DB01U2JOP0003D2DJDH1View只是在數(shù)據(jù)庫(kù)管理系統(tǒng)中存儲(chǔ)定義內(nèi)容,并不是真的以表存在,因此,當(dāng)我們對(duì)View執(zhí)行數(shù)據(jù)查詢時(shí),并無(wú)法直接操作,而必須先將查詢指令進(jìn)行轉(zhuǎn)換。我們可以將常用的窗體查詢定義成View存儲(chǔ)于數(shù)據(jù)庫(kù)內(nèi),在程序中需要列出定義為View的數(shù)據(jù)時(shí),只需在程序中調(diào)用執(zhí)行該View的名稱,即可得到所需要的數(shù)據(jù)內(nèi)容。下圖為SQLServer的視圖屬性窗口畫(huà)面,在文本框中用戶可以在CreateView語(yǔ)句后設(shè)置View名稱,在AS語(yǔ)句后設(shè)置視圖的內(nèi)容(Select語(yǔ)句)。圖3-8視

29、圖屬性畫(huà)面3-3-6存儲(chǔ)過(guò)程當(dāng)我們開(kāi)發(fā)數(shù)據(jù)庫(kù)程序時(shí),經(jīng)常會(huì)應(yīng)用到SQL語(yǔ)法對(duì)數(shù)據(jù)庫(kù)的內(nèi)容進(jìn)行存取,一般都會(huì)將這些存取數(shù)據(jù)庫(kù)的動(dòng)作直接寫(xiě)在程序中。如果數(shù)據(jù)庫(kù)的內(nèi)容是提供給多個(gè)程序使用或是需要以不同的程序開(kāi)發(fā)相同的軟件時(shí),就必須在每一個(gè)程序中重復(fù)編寫(xiě)SQL語(yǔ)句,而且一但要修改,也必須到每一個(gè)程序中修改。因此在數(shù)據(jù)庫(kù)中允許我們將執(zhí)行的操作直接定義在數(shù)據(jù)庫(kù)中,編寫(xiě)程序時(shí)只要調(diào)用該數(shù)據(jù)庫(kù)程序即可執(zhí)行程序的內(nèi)容,感覺(jué)上與程序模塊化相似。這樣將數(shù)據(jù)庫(kù)的處理動(dòng)作定義在數(shù)據(jù)庫(kù)服務(wù)器端不但能夠?qū)?shù)據(jù)存取的動(dòng)作集中化處理維護(hù)方便外,更能加速數(shù)據(jù)庫(kù)存取動(dòng)作的執(zhí)行效率,因?yàn)閿?shù)據(jù)庫(kù)服務(wù)器會(huì)對(duì)這些服務(wù)器端的程序先進(jìn)行編譯。

30、所有執(zhí)行于數(shù)據(jù)庫(kù)的動(dòng)作都可以定義存儲(chǔ)為存儲(chǔ)過(guò)程(StoredProcedure),而且在一個(gè)存儲(chǔ)過(guò)程中可以包含多個(gè)SQL指令,也可以定義多個(gè)變量來(lái)連接多個(gè)處理動(dòng)作。我們可以將數(shù)據(jù)庫(kù)中通常執(zhí)行的數(shù)據(jù)處理動(dòng)作定義為存儲(chǔ)過(guò)程,以提供應(yīng)用系統(tǒng)的調(diào)用,同時(shí)也可通過(guò)參數(shù)的設(shè)置使程序的執(zhí)行更加具有彈性。圖3-9存儲(chǔ)過(guò)程畫(huà)面上圖為SQLServer"存儲(chǔ)過(guò)程的屬性”窗口,在文本框中用戶可以在CreateProcedure語(yǔ)句后設(shè)置存儲(chǔ)過(guò)程的名稱,在CreateProcedure與AS關(guān)鍵詞間可以聲明此存儲(chǔ)過(guò)程的參數(shù),參數(shù)可以是傳入?yún)?shù)也可以是傳出參數(shù),若為傳出參數(shù)則需在參數(shù)聲明時(shí)加上OUTPUT字樣

31、,而在AS關(guān)鍵詞后則是設(shè)置該存儲(chǔ)過(guò)程所有執(zhí)行的數(shù)據(jù)庫(kù)存取動(dòng)作。3-3-7觸發(fā)器觸發(fā)器(Trigger)觸發(fā)程序也是一種存儲(chǔ)過(guò)程,只不過(guò)它會(huì)在數(shù)據(jù)庫(kù)被修改時(shí)自動(dòng)執(zhí)行,這與對(duì)象的事件有點(diǎn)相似。在一個(gè)表中只能有一個(gè)Insert、一個(gè)Delete及一個(gè)Update觸發(fā)器,這三種觸發(fā)器分別在新增數(shù)據(jù)、刪除數(shù)據(jù)及改變數(shù)據(jù)后觸發(fā)運(yùn)行,可以將這三種觸發(fā)過(guò)程定義在同一個(gè)Trigger中,也可以各自獨(dú)立。下圖為SQLServer的觸發(fā)器屬性窗口畫(huà)面,用戶可以在CREATETRIGGER關(guān)鍵詞后設(shè)置觸發(fā)程序的名稱,在ON關(guān)鍵詞后設(shè)置引用這個(gè)觸發(fā)程序的表名稱,在FOR關(guān)鍵詞后設(shè)置引用這個(gè)觸發(fā)程序的事件(Insert,

32、Delete或Update),若同時(shí)引用于一個(gè)以上的事件需用逗號(hào)做分隔,而在AS關(guān)鍵詞后則是設(shè)置該存儲(chǔ)過(guò)程所有執(zhí)行的數(shù)據(jù)庫(kù)存取動(dòng)作。圖3-10Trigger畫(huà)面3-3-8數(shù)據(jù)目錄數(shù)據(jù)目錄(Catalog)是指存儲(chǔ)數(shù)據(jù)庫(kù)所有Schema以及所有對(duì)應(yīng)的地方,它包含各種與數(shù)據(jù)庫(kù)系統(tǒng)本身有關(guān)的數(shù)據(jù)。在關(guān)系型數(shù)據(jù)庫(kù)中,Catalog也是以表的形式存在,這種表稱為系統(tǒng)表?;旧希贑atalog內(nèi)會(huì)包含Tables及Columns兩個(gè)表,其中Tables表存儲(chǔ)數(shù)據(jù)庫(kù)中每一個(gè)表的摘要信息,如表名、表字段數(shù)、行數(shù)等。而Columns表則存儲(chǔ)每個(gè)表字段的摘要信息,如表名稱、字段名稱等。表的內(nèi)容如圖3-11所示。

33、*字段敏廣鹿詼料35產(chǎn)品姿制24廠商姿制廠商代號(hào)廠商詼料廠商名釉廠商澆料統(tǒng)一墉號(hào)f-產(chǎn)品注制產(chǎn)晶代號(hào)81碰皿圖3-11產(chǎn)品供應(yīng)數(shù)據(jù)庫(kù)的Catalog內(nèi)容3-4數(shù)據(jù)庫(kù)設(shè)計(jì)在創(chuàng)建數(shù)據(jù)庫(kù)前,首先我們要決定這個(gè)數(shù)據(jù)庫(kù)需要提供哪些信息(數(shù)據(jù)項(xiàng)),然后再根據(jù)這些數(shù)據(jù)項(xiàng)的特點(diǎn)來(lái)組織表的結(jié)構(gòu)。3-4-1Entities&RelationshipEntities被廣泛地使用在數(shù)據(jù)庫(kù)環(huán)境中,用來(lái)代表可被區(qū)分的對(duì)象。在數(shù)據(jù)庫(kù)中,除了有Entities夕卜,還有Relationship將數(shù)據(jù)庫(kù)內(nèi)Entities連接在一起。當(dāng)然也可以將Relationship視為是Entities的一種。例如,在產(chǎn)品供應(yīng)數(shù)據(jù)庫(kù)

34、中,廠商數(shù)據(jù)以及產(chǎn)品數(shù)據(jù)是可被區(qū)分的對(duì)象,所以在數(shù)據(jù)庫(kù)中以Entities對(duì)象存在,而在這兩個(gè)Entities對(duì)象之間有一個(gè)Relationship存儲(chǔ)廠商數(shù)據(jù)以及產(chǎn)品數(shù)據(jù)的對(duì)應(yīng)關(guān)系,也就是存儲(chǔ)廠商供應(yīng)哪些產(chǎn)品。下圖為產(chǎn)品供應(yīng)數(shù)據(jù)庫(kù)的Entities/RelationshipDiagram,簡(jiǎn)稱ERDiagram,在圖中以四方形表示Entities,以菱形來(lái)表示Relationship。圖3-12ERDiagram前面說(shuō)過(guò),Entities是用來(lái)表示對(duì)象,存儲(chǔ)任何我們想要記錄的對(duì)象信息,換句話說(shuō),Entities(及Relationship)必須具有屬性,這些屬性也必須被定義在數(shù)據(jù)庫(kù)內(nèi)。例如,

35、在廠商數(shù)據(jù)中,我們要記錄廠商代號(hào)、廠商名稱、統(tǒng)一編號(hào)等信息,因此,數(shù)據(jù)庫(kù)中的廠商Entities具有廠商代號(hào)、廠商名稱、統(tǒng)一編號(hào)等屬性。3-4-2數(shù)據(jù)正規(guī)化在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),應(yīng)該盡量以"一個(gè)數(shù)據(jù)只出現(xiàn)在一個(gè)地方(onefactinoneplace)”設(shè)計(jì)規(guī)則為準(zhǔn),盡量避免數(shù)據(jù)重復(fù)。而數(shù)據(jù)正規(guī)化的概念也就是為了達(dá)成這個(gè)設(shè)計(jì)規(guī)則所衍生出來(lái)的,將一個(gè)表分割成多個(gè)表存在數(shù)據(jù)庫(kù)中。Coddy將整個(gè)數(shù)據(jù)正規(guī)化的動(dòng)作分為多個(gè)層次,如圖3-13所示,在每一個(gè)層次中定準(zhǔn)則條件,只要表能夠符合前幾層設(shè)置的正規(guī)化條件,我們就可以稱這個(gè)表為第幾個(gè)正規(guī)表。例如,關(guān)聯(lián)是數(shù)據(jù)庫(kù)內(nèi)的表符合低一層的正規(guī)化條件,表內(nèi)都是

36、存儲(chǔ)Scalar,因此,我們說(shuō)該表1NF(firstNormalForm)。所以,我們可以說(shuō)數(shù)據(jù)正規(guī)化的過(guò)程就是在建立正規(guī)表(NormalForms)。金郵表1NF圖3-13正規(guī)化在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),雖然我們可以將數(shù)據(jù)做多層的正規(guī)化,然而實(shí)際上,我們往往只會(huì)做三層正規(guī)化。一般表只要能符合3NF或BCNF,在執(zhí)行數(shù)據(jù)存取上就不會(huì)有問(wèn)題了,只有少數(shù)的特殊狀況要繼續(xù)往下正規(guī)化。所以一般聽(tīng)到的數(shù)據(jù)正規(guī)化都是指3NF。現(xiàn)在,我們就直接以下圖的產(chǎn)品供應(yīng)表為例,來(lái)說(shuō)明如何將表正規(guī)化。首先,我們先從1NF開(kāi)始,1NF的正規(guī)化條件為:在表內(nèi)只包含有意義數(shù)據(jù)的最小單位。我們可以發(fā)現(xiàn)在下面的表中所有存儲(chǔ)的數(shù)據(jù)都是實(shí)際的

37、值,因此表符合1NF。號(hào)產(chǎn)昌代號(hào)CS名ft區(qū)導(dǎo)POOOLC001STK.CODD2FOOD!0002STK.CONYDD2POO02COOIUCCESCDD3FOOD3CU03STT.CX)NYDD2圖3-14產(chǎn)品供應(yīng)數(shù)據(jù)表接下來(lái),繼續(xù)往下一層正規(guī)化,往2NF邁進(jìn),2NF的正規(guī)化條件為:表符合NF,且所有非鍵值的數(shù)據(jù)與主鍵值之間無(wú)對(duì)應(yīng)關(guān)系存在。由上圖的表中,可以發(fā)現(xiàn)主鍵值廠商代號(hào)與非主鍵值廠商名稱、地區(qū)、區(qū)碼等字段有對(duì)應(yīng)關(guān)系,只要表內(nèi)存儲(chǔ)的廠商代碼相同,則其他字段(廠商名稱、地區(qū)、區(qū)碼)內(nèi)存儲(chǔ)的數(shù)據(jù)也就一定相同。因此,產(chǎn)品供應(yīng)表不符合2NF。這時(shí),只要在表中,將與主鍵值具有對(duì)應(yīng)關(guān)系的字段數(shù)據(jù),

38、連同對(duì)應(yīng)的主鍵值刪除,并另外建立成一個(gè)表(主鍵值仍然會(huì)存在于原來(lái)的表中)。最后,別忘了要在新建立的表中將重復(fù)的數(shù)據(jù)刪除,如圖3-15所示。廠商代號(hào)產(chǎn)品代號(hào)F0001C001P0001CO02F0002C001P0003C003廠商代號(hào)廠商名稱地區(qū)區(qū)號(hào)P0001STKCONY002FOOQ2UCCESC003PD003STTCONY002-圖3-15產(chǎn)品供應(yīng)表與廠商數(shù)據(jù)表經(jīng)過(guò)第二層正規(guī)化后,表的主鍵值與非主鍵值之間就不再具有任何的相關(guān)性存在。3NF的正規(guī)化條件為:符合2NF,且所有非鍵值的數(shù)據(jù)之間無(wú)相互依賴關(guān)系存在。在上圖的廠商表中,地區(qū)以及區(qū)號(hào)這兩個(gè)非主鍵值的字段具有對(duì)應(yīng)關(guān)系存在,只要地區(qū)名稱

39、相同,則區(qū)號(hào)數(shù)據(jù)就一定相同,因此廠商表不符合3NF。這時(shí),只要在表中將具有對(duì)應(yīng)關(guān)系的字段數(shù)據(jù)刪除,另外建立成一個(gè)表,并將表中重復(fù)的數(shù)據(jù)刪除即可,如圖3-16所示。廠商代號(hào)產(chǎn)品代號(hào)P00Q1C001P0001CD02F血3C001P。叩3C003-E代號(hào)廠商名稱F00018TKCOPOC02UCCEP0003STTCO圖3-16產(chǎn)品供應(yīng)表再次,檢查表的內(nèi)容,發(fā)現(xiàn)所有的表內(nèi)已經(jīng)不存在任何具有對(duì)應(yīng)關(guān)系的字段,完成數(shù)據(jù)正規(guī)化的動(dòng)作。3-5SQL語(yǔ)句SQL是StructureQueryLanguage的縮寫(xiě),它是一種標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫(kù)查詢語(yǔ)言,通過(guò)SQL語(yǔ)句的執(zhí)行可以對(duì)數(shù)據(jù)庫(kù)內(nèi)容(表及記錄)進(jìn)行定義、修改或查詢。由于在許多的數(shù)據(jù)庫(kù)管理系統(tǒng)(如Access,SQL等)以及數(shù)據(jù)庫(kù)程序語(yǔ)言(如VisualBas

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論