版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《數(shù)據(jù)庫原理與應(yīng)用》第7章數(shù)據(jù)庫設(shè)計1第七章內(nèi)容提要邏輯結(jié)構(gòu)設(shè)計4物理結(jié)構(gòu)設(shè)計5
數(shù)據(jù)庫的實施與維護(hù)62數(shù)據(jù)庫設(shè)計概述1需求分析2
概念結(jié)構(gòu)設(shè)計3內(nèi)容導(dǎo)學(xué)3學(xué)習(xí)目標(biāo)理解數(shù)據(jù)庫設(shè)計的基本任務(wù)與目標(biāo)理解數(shù)據(jù)庫設(shè)計過程中常見問題并能夠加以解決學(xué)會需求分析的基本方法學(xué)會數(shù)據(jù)字典的創(chuàng)建方法學(xué)習(xí)重點(diǎn)掌握數(shù)據(jù)流圖的設(shè)計方法能夠根據(jù)需求說明書按照工程化的方法和步驟建立正確的E-R模型掌握數(shù)據(jù)庫邏輯設(shè)計E-R模型向關(guān)系模型轉(zhuǎn)化方法與過程掌握數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計的方法思政導(dǎo)學(xué)4關(guān)鍵詞:數(shù)據(jù)庫設(shè)計步驟,E-R圖的設(shè)計。內(nèi)容要意:數(shù)據(jù)庫設(shè)計的步驟是創(chuàng)建數(shù)據(jù)庫的工程化方法的總結(jié),可以迅速準(zhǔn)確的建立應(yīng)用系統(tǒng)需要的數(shù)據(jù)庫。其中數(shù)據(jù)流圖、數(shù)據(jù)字典、E-R圖等都是進(jìn)行數(shù)據(jù)庫設(shè)計過程中主要的設(shè)計方法。思政點(diǎn)播:通過設(shè)計步驟,融入求真務(wù)實的敬業(yè)精神;通過規(guī)范化理論,樹立正確規(guī)范的思維方法和嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和邏輯思維。思政目標(biāo):培養(yǎng)學(xué)生“求真務(wù)實、精益求精”的工匠精神,提升學(xué)生的邏輯推理能力,敬業(yè)、精益的職業(yè)能力和職業(yè)品質(zhì)。7.1數(shù)據(jù)庫設(shè)計概述
數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造(設(shè)計)優(yōu)化的數(shù)據(jù)庫邏輯模式和物理結(jié)構(gòu),并據(jù)此建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲和管理數(shù)據(jù),滿足各種用戶的應(yīng)用需求,包括信息管理要求和數(shù)據(jù)操作要求。信息管理要求:在數(shù)據(jù)庫中應(yīng)該存儲和管理哪些數(shù)據(jù)對象。數(shù)據(jù)操作要求:對數(shù)據(jù)對象需要進(jìn)行哪些操作,如查詢、增、刪、改、統(tǒng)計等操作。數(shù)據(jù)庫設(shè)計概述(續(xù))
數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計的目標(biāo)是為用戶和各種應(yīng)用系統(tǒng)提供一個信息基礎(chǔ)設(shè)施和高效率的運(yùn)行環(huán)境。高效率的運(yùn)行環(huán)境數(shù)據(jù)庫數(shù)據(jù)的存取效率高數(shù)據(jù)庫存儲空間的利用率高數(shù)據(jù)庫系統(tǒng)運(yùn)行管理的效率高7.1數(shù)據(jù)庫設(shè)計概述7.1.1數(shù)據(jù)庫設(shè)計的特點(diǎn)7.1.2數(shù)據(jù)庫設(shè)計方法7.1.3數(shù)據(jù)庫設(shè)計的基本步驟7.1.4數(shù)據(jù)庫設(shè)計過程中的各級模式7.1.1數(shù)據(jù)庫設(shè)計的特點(diǎn)1.數(shù)據(jù)庫建設(shè)的基本規(guī)律三分技術(shù),七分管理,十二分基礎(chǔ)數(shù)據(jù)管理數(shù)據(jù)庫建設(shè)項目管理企業(yè)(即應(yīng)用部門)的業(yè)務(wù)管理基礎(chǔ)數(shù)據(jù)數(shù)據(jù)的收集、整理、組織和不斷更新數(shù)據(jù)庫設(shè)計的特點(diǎn)(續(xù))2.結(jié)構(gòu)(數(shù)據(jù))設(shè)計和行為(處理)設(shè)計相結(jié)合將數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和數(shù)據(jù)處理設(shè)計密切結(jié)合結(jié)構(gòu)和行為分離的設(shè)計傳統(tǒng)的軟件工程:重行為設(shè)計忽視對應(yīng)用中數(shù)據(jù)語義的分析和抽象,只要有可能就盡量推遲數(shù)據(jù)結(jié)構(gòu)設(shè)計的決策早期的數(shù)據(jù)庫設(shè)計:重結(jié)構(gòu)設(shè)計致力于數(shù)據(jù)模型和數(shù)據(jù)庫建模方法研究,忽視了行為設(shè)計對結(jié)構(gòu)設(shè)計的影響數(shù)據(jù)庫設(shè)計的特點(diǎn)(續(xù))現(xiàn)實世界概念模型設(shè)計子模式設(shè)計物理數(shù)據(jù)庫設(shè)計邏輯數(shù)據(jù)庫設(shè)計建立數(shù)據(jù)庫數(shù)據(jù)分析功能分析功能模型功能說明事務(wù)設(shè)計應(yīng)用設(shè)計應(yīng)用開發(fā)系統(tǒng)調(diào)試數(shù)據(jù)庫設(shè)計應(yīng)用系統(tǒng)設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.1.1數(shù)據(jù)庫設(shè)計的特點(diǎn)7.1.2數(shù)據(jù)庫設(shè)計方法7.1.3數(shù)據(jù)庫設(shè)計的基本步驟7.1.4數(shù)據(jù)庫設(shè)計過程中的各級模式7.1.2數(shù)據(jù)庫設(shè)計方法大型數(shù)據(jù)庫設(shè)計是涉及多學(xué)科的綜合性技術(shù),又是一項龐大的工程項目。它要求多方面的知識和技術(shù)。主要包括:計算機(jī)的基礎(chǔ)知識軟件工程的原理和方法程序設(shè)計的方法和技巧數(shù)據(jù)庫的基本知識數(shù)據(jù)庫設(shè)計技術(shù)應(yīng)用領(lǐng)域的知識數(shù)據(jù)庫設(shè)計方法(續(xù))手工試湊法設(shè)計質(zhì)量與設(shè)計人員的經(jīng)驗和水平有直接關(guān)系缺乏科學(xué)理論和工程方法的支持,工程的質(zhì)量難以保證數(shù)據(jù)庫運(yùn)行一段時間后常常又不同程度地發(fā)現(xiàn)各種問題,增加了維護(hù)代價數(shù)據(jù)庫設(shè)計方法(續(xù))規(guī)范設(shè)計法基本思想過程迭代和逐步求精典型方法新奧爾良(NewOrleans)方法基于E-R模型的數(shù)據(jù)庫設(shè)計方法3NF(第三范式)的設(shè)計方法面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計方法統(tǒng)一建模語言(UML)方法7.1數(shù)據(jù)庫設(shè)計概述7.1.1數(shù)據(jù)庫設(shè)計的特點(diǎn)7.1.2數(shù)據(jù)庫設(shè)計方法7.1.3數(shù)據(jù)庫設(shè)計的基本步驟7.1.4數(shù)據(jù)庫設(shè)計過程中的各級模式7.1.3數(shù)據(jù)庫設(shè)計的基本步驟數(shù)據(jù)庫設(shè)計分6個階段需求分析概念結(jié)構(gòu)設(shè)計邏輯結(jié)構(gòu)設(shè)計物理結(jié)構(gòu)設(shè)計數(shù)據(jù)庫實施數(shù)據(jù)庫運(yùn)行和維護(hù)需求分析和概念設(shè)計獨(dú)立于任何數(shù)據(jù)庫管理系統(tǒng)邏輯設(shè)計和物理設(shè)計與選用的數(shù)據(jù)庫管理系統(tǒng)密切相關(guān)數(shù)據(jù)庫設(shè)計的基本步驟(續(xù))參加數(shù)據(jù)庫設(shè)計的人員系統(tǒng)分析人員和數(shù)據(jù)庫設(shè)計人員自始至終參與數(shù)據(jù)庫設(shè)計,其水平?jīng)Q定了數(shù)據(jù)庫系統(tǒng)的質(zhì)量數(shù)據(jù)庫管理員和用戶代表主要參加需求分析與數(shù)據(jù)庫的運(yùn)行和維護(hù)應(yīng)用開發(fā)人員包括程序員和操作員在實施階段參與進(jìn)來,分別負(fù)責(zé)編制程序和準(zhǔn)備軟硬件環(huán)境數(shù)據(jù)庫設(shè)計的基本步驟(續(xù))1.需求分析階段是否做得充分與準(zhǔn)確,決定了構(gòu)建數(shù)據(jù)庫的速度和質(zhì)量2.概念結(jié)構(gòu)設(shè)計階段通過對用戶需求進(jìn)行綜合、歸納與抽象,形成一個獨(dú)立于具體數(shù)據(jù)庫管理系統(tǒng)的概念模型3.邏輯結(jié)構(gòu)設(shè)計階段將概念結(jié)構(gòu)轉(zhuǎn)換為某個數(shù)據(jù)庫管理系統(tǒng)所支持的數(shù)據(jù)模型,并對其進(jìn)行優(yōu)化數(shù)據(jù)庫設(shè)計的基本步驟(續(xù))4.物理結(jié)構(gòu)設(shè)計階段為邏輯數(shù)據(jù)結(jié)構(gòu)選取一個最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)包括存儲結(jié)構(gòu)和存取方法5.數(shù)據(jù)庫實施階段根據(jù)邏輯設(shè)計和物理設(shè)計的結(jié)果構(gòu)建數(shù)據(jù)庫編寫與調(diào)試應(yīng)用程序組織數(shù)據(jù)入庫并進(jìn)行試運(yùn)行6.數(shù)據(jù)庫運(yùn)行和維護(hù)階段經(jīng)過試運(yùn)行后即可投入正式運(yùn)行在運(yùn)行過程中必須不斷對其進(jìn)行評估、調(diào)整與修改數(shù)據(jù)庫設(shè)計的基本步驟(續(xù))設(shè)計一個完善的數(shù)據(jù)庫應(yīng)用系統(tǒng)
往往是上述6個階段的不斷反復(fù)這個設(shè)計步驟既是數(shù)據(jù)庫設(shè)計的過程,也包括了數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計過程把數(shù)據(jù)庫的設(shè)計和對數(shù)據(jù)庫中數(shù)據(jù)處理的設(shè)計緊密結(jié)合起來,將這兩個方面的需求分析、抽象、設(shè)計、實現(xiàn)在各個階段同時進(jìn)行,相互參照,相互補(bǔ)充,以完善兩方面的設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.1.1數(shù)據(jù)庫設(shè)計的特點(diǎn)7.1.2數(shù)據(jù)庫設(shè)計方法7.1.3數(shù)據(jù)庫設(shè)計的基本步驟7.1.4數(shù)據(jù)庫設(shè)計過程中的各級模式7.1.4數(shù)據(jù)庫設(shè)計過程中的各級模式數(shù)據(jù)庫設(shè)計不同階段形成的數(shù)據(jù)庫各級模式數(shù)據(jù)庫的各級模式
第七章數(shù)據(jù)庫設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.2需求分析7.3概念結(jié)構(gòu)設(shè)計7.4邏輯結(jié)構(gòu)設(shè)計7.5物理結(jié)構(gòu)設(shè)計7.6數(shù)據(jù)庫的實施和維護(hù)7.2需求分析7.2.1需求分析的任務(wù)7.2.2需求分析的方法7.2.3數(shù)據(jù)字典需求分析(續(xù))需求分析就是分析用戶的要求是設(shè)計數(shù)據(jù)庫的起點(diǎn)結(jié)果是否準(zhǔn)確地反映了用戶的實際要求,將直接影響到后面各個階段的設(shè)計,并影響到設(shè)計結(jié)果是否合理和實用7.2.1需求分析的任務(wù)詳細(xì)調(diào)查現(xiàn)實世界要處理的對象(組織、部門、企業(yè)等)充分了解原系統(tǒng)(手工系統(tǒng)或計算機(jī)系統(tǒng))工作概況明確用戶的各種需求在此基礎(chǔ)上確定新系統(tǒng)的功能新系統(tǒng)必須充分考慮今后可能的擴(kuò)充和改變需求分析的任務(wù)(續(xù))調(diào)查的重點(diǎn)是“數(shù)據(jù)”和“處理”,獲得用戶對數(shù)據(jù)庫的要求(1)信息要求用戶需要從數(shù)據(jù)庫中獲得信息的內(nèi)容與性質(zhì)由信息要求可以導(dǎo)出數(shù)據(jù)要求,即在數(shù)據(jù)庫中需要存儲哪些數(shù)據(jù)(2)處理要求用戶要完成的處理功能對處理性能的要求(3)安全性與完整性要求需求分析的任務(wù)(續(xù))確定用戶最終需求的難點(diǎn)用戶缺少計算機(jī)知識,不能準(zhǔn)確地表達(dá)自己的需求,他們所提出的需求往往不斷地變化。設(shè)計人員缺少用戶的專業(yè)知識,不易理解用戶的真正需求,甚至誤解用戶的需求解決方法設(shè)計人員必須不斷深入地與用戶進(jìn)行交流,才能逐步確定用戶的實際需求7.2需求分析7.2.1需求分析的任務(wù)7.2.2需求分析的方法7.2.3數(shù)據(jù)字典7.2.2需求分析的方法調(diào)查清楚用戶的實際需求并進(jìn)行初步分析與用戶達(dá)成共識分析與表達(dá)這些需求調(diào)查用戶需求的步驟(1)調(diào)查組織機(jī)構(gòu)情況(2)調(diào)查各部門的業(yè)務(wù)活動情況(3)協(xié)助用戶明確對新系統(tǒng)的各種要求,包括信
息要求、處理要求、完全性與完整性要求(4)確定新系統(tǒng)的邊界常用調(diào)查方法(1)跟班作業(yè)通過親身參加業(yè)務(wù)工作了解業(yè)務(wù)活動的情況(2)開調(diào)查會通過與用戶座談來了解業(yè)務(wù)活動情況及用戶需求(3)請專人介紹(4)詢問對某些調(diào)查中的問題,可以找專人詢問(5)設(shè)計調(diào)查表請用戶填寫調(diào)查表設(shè)計合理,則很有效(6)查閱記錄查閱與原系統(tǒng)有關(guān)的數(shù)據(jù)記錄進(jìn)一步分析和表達(dá)用戶需求分析方法結(jié)構(gòu)化分析方法(StructuredAnalysis,簡稱SA方法)SA方法從最上層的系統(tǒng)組織機(jī)構(gòu)入手采用自頂向下、逐層分解的方式分析系統(tǒng)對用戶需求進(jìn)行分析與表達(dá)后,需求分析報告必須提交給用戶,征得用戶的認(rèn)可需求分析過程需求分析過程7.2.3數(shù)據(jù)字典
數(shù)據(jù)字典的作用數(shù)據(jù)字典最重要的用途是作為分析階段的工具。在結(jié)構(gòu)化分析中,數(shù)據(jù)詞典的作用是給數(shù)據(jù)流圖上每個成分給以定義和說明。換句話說,數(shù)據(jù)流圖上所有成分的定義和解釋的文字集合就是數(shù)據(jù)詞典,而且在數(shù)據(jù)字典中建立的一組嚴(yán)密一致的定義很有助于改進(jìn)分析員和用戶之間的通信。如果要求所有開發(fā)人員都根據(jù)公共的數(shù)據(jù)字典描述數(shù)據(jù)和設(shè)計模塊,則能避免很多麻煩的接口問題;數(shù)據(jù)字典中包含的每個數(shù)據(jù)元素的控制信息是有價值的,因為列出了使用一個給定的數(shù)據(jù)元素的所有程序(或模塊),所以很容易估計改變一個數(shù)據(jù)將產(chǎn)生的影響,并且能對所有受影響的程序或模塊做出相應(yīng)的改變;最后,數(shù)據(jù)字典是開發(fā)數(shù)據(jù)庫的第一步,而且是非常有價值的一步。7.2.3數(shù)據(jù)字典數(shù)據(jù)字典是關(guān)于數(shù)據(jù)庫中數(shù)據(jù)的描述,即元數(shù)據(jù),不是數(shù)據(jù)本身數(shù)據(jù)字典在需求分析階段建立,在數(shù)據(jù)庫設(shè)計過程中不斷修改、充實、完善數(shù)據(jù)字典是進(jìn)行詳細(xì)的數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的主要結(jié)果注意:和關(guān)系數(shù)據(jù)庫管理系統(tǒng)中數(shù)據(jù)字典的區(qū)別和聯(lián)系數(shù)據(jù)字典(續(xù))數(shù)據(jù)字典的內(nèi)容數(shù)據(jù)項數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)流數(shù)據(jù)存儲處理過程數(shù)據(jù)項是數(shù)據(jù)的最小組成單位若干個數(shù)據(jù)項可以組成一個數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)字典通過對數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)的定義來描述數(shù)據(jù)流、數(shù)據(jù)存儲的邏輯內(nèi)容需求分析小結(jié)把需求收集和分析作為數(shù)據(jù)庫設(shè)計的第一階段是十分重要的。第一階段收集的基礎(chǔ)數(shù)據(jù)(用數(shù)據(jù)字典來表達(dá))是下一步進(jìn)行概念設(shè)計的基礎(chǔ)。強(qiáng)調(diào)兩點(diǎn)(1)設(shè)計人員應(yīng)充分考慮到可能的擴(kuò)充和改變,使設(shè)計易于更改,系統(tǒng)易于擴(kuò)充(2)必須強(qiáng)調(diào)用戶的參與第七章數(shù)據(jù)庫設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.2需求分析7.3概念結(jié)構(gòu)設(shè)計7.4邏輯結(jié)構(gòu)設(shè)計7.5物理結(jié)構(gòu)設(shè)計7.6數(shù)據(jù)庫的實施和維護(hù)7.3概念結(jié)構(gòu)設(shè)計7.3.1概念模型7.3.2E-R模型7.3.3概念結(jié)構(gòu)設(shè)計7.3.1概念模型將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)(即概念模型)的過程就是概念結(jié)構(gòu)設(shè)計概念模型的特點(diǎn)(1)能真實、充分地反映現(xiàn)實世界,是現(xiàn)實世界的一個真
實模型。(2)易于理解,從而可以用它和不熟悉計算機(jī)的用戶交換
意見。(3)易于更改,當(dāng)應(yīng)用環(huán)境和應(yīng)用要求改變時,容易對概
念模型修改和擴(kuò)充。(4)易于向關(guān)系、網(wǎng)狀、層次等各種數(shù)據(jù)模型轉(zhuǎn)換描述概念模型的工具E-R模型7.3概念結(jié)構(gòu)設(shè)計7.3.1概念結(jié)構(gòu)7.3.2E-R模型7.3.3概念結(jié)構(gòu)設(shè)計7.3.2E-R模型1.實體之間的聯(lián)系(1)兩個實體型之間的聯(lián)系:①一對一聯(lián)系(1∶1)②一對多聯(lián)系(1∶n)③多對多聯(lián)系(m∶n)E-R模型(續(xù))①一對一聯(lián)系(1∶1)如果對于實體集A中的每一個實體,實體集B中至多有一個(也可以沒有)實體與之聯(lián)系,反之亦然,則稱實體集A與實體集B具有一對一聯(lián)系,記為1∶1。例如,學(xué)校里一個班級只有一個正班長,而一個班長只在一個班中任職,則班級與班長之間具有一對一聯(lián)系。E-R模型(續(xù))②一對多聯(lián)系(1∶n)如果對于實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯(lián)系,反之,對于實體集B中的每一個實體,實體集A中至多只有一個實體與之聯(lián)系,則稱實體集A與實體集B有一對多聯(lián)系,記為1∶n。例如,一個班級中有若干名學(xué)生,而每個學(xué)生只在一個班級中學(xué)習(xí),則班級與學(xué)生之間具有一對多聯(lián)系。③多對多聯(lián)系(m∶n)如果對于實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯(lián)系,反之,對于實體集B中的每一個實體,實體集A中也有m個實體(m≥0)與之聯(lián)系,則稱實體集A與實體集B具有多對多聯(lián)系,記為m∶n。例如,一門課程同時有若干個學(xué)生選修,而一個學(xué)生可以同時選修多門課程,則課程與學(xué)生之間具有多對多聯(lián)系。E-R模型(續(xù))E-R模型(續(xù))圖7.6兩個實體型之間的三類聯(lián)系E-R模型(續(xù))(2)兩個以上的實體型之間的聯(lián)系一般地,兩個以上的實體型之間也存在著一對一、一對多、多對多聯(lián)系。對于課程、教師與參考書3個實體型,如果一門課程可以有若干個教師講授,使用若干本參考書,而每一個教師只講授一門課程,每一本參考書只供一門課程使用,則課程與教師、參考書之間的聯(lián)系是一對多的,如圖7.7(a)所示。E-R模型(續(xù))圖7.7
三個實體型之間的聯(lián)系示例E-R模型(續(xù))(3)單個實體型內(nèi)的聯(lián)系同一個實體集內(nèi)的各實體之間也可以存在一對一、一對多、多對多的聯(lián)系。例如,職工實體型內(nèi)部具有領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的聯(lián)系,即某一職工(干部)“領(lǐng)導(dǎo)”若干名職工,而一個職工僅被另外一個職工直接領(lǐng)導(dǎo),因此這是一對多的聯(lián)系,如圖7.8所示。E-R模型(續(xù))圖7.8
單個實體型內(nèi)的一對多聯(lián)系示例聯(lián)系的度:參與聯(lián)系的實體型的數(shù)目2個實體型之間的聯(lián)系度為2,也稱為二元聯(lián)系;3個實體型之間的聯(lián)系度為3,稱為三元聯(lián)系;N個實體型之間的聯(lián)系度為N,也稱為N元聯(lián)系E-R模型(續(xù))2.E-R圖E-R圖提供了表示實體型、屬性和聯(lián)系的方法:實體型:用矩形表示,矩形框內(nèi)寫明實體名。屬性:用橢圓形表示,并用無向邊將其與相應(yīng)的實體型連接起來。例如,學(xué)生實體具有學(xué)號、姓名、性別、出生年份、系、入學(xué)時間等屬性,用E-R圖表示如圖7.9所示圖7.9
學(xué)生實體及屬性E-R模型(續(xù))聯(lián)系:用菱形表示,菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實體型連接起來,同時在無向邊旁標(biāo)上聯(lián)系的類型(1∶1,1∶n或m∶n)。聯(lián)系可以具有屬性圖7.10聯(lián)系的屬性E-R模型(續(xù))3.一個實例某個工廠物資管理的概念模型。物資管理涉及的實體有:倉庫:屬性有倉庫號、面積、電話號碼零件:屬性有零件號、名稱、規(guī)格、單價、描述供應(yīng)商:屬性有供應(yīng)商號、姓名、地址、電話號碼、賬號項目:屬性有項目號、預(yù)算、開工日期職工:屬性有職工號、姓名、年齡、職稱E-R模型(續(xù))這些實體之間的聯(lián)系如下:
(1)一個倉庫可以存放多種零件,一種零件可以存放在多個倉庫中,因此倉庫和零件具有多對多的聯(lián)系。用庫存量來表示某種零件在某個倉庫中的數(shù)量。(2)一個倉庫有多個職工當(dāng)倉庫保管員,一個職工只能在一個倉庫工作,因此倉庫和職工之間是一對多的聯(lián)系。E-R模型(續(xù))這些實體之間的聯(lián)系如下(續(xù)):(3)職工之間具有領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)關(guān)系。即倉庫主任領(lǐng)導(dǎo)若干保管員,因此職工實體型中具有一對多的聯(lián)系。(4)供應(yīng)商、項目和零件三者之間具有多對多的聯(lián)系。即一個供應(yīng)商可以供給若干項目多種零件,每個項目可以使用不同供應(yīng)商供應(yīng)的零件,每種零件可由不同供應(yīng)商供給。E-R模型(續(xù))E-R模型(續(xù))E-R模型(續(xù))7.3概念結(jié)構(gòu)設(shè)計7.3.1概念結(jié)構(gòu)7.3.2E-R模型7.3.3概念結(jié)構(gòu)設(shè)計7.3.3概念結(jié)構(gòu)設(shè)計1.實體與屬性的劃分原則為了簡化E-R圖的處置,現(xiàn)實世界的事物能作為屬性對待的,盡量作為屬性對待。兩條準(zhǔn)則:(1)作為屬性,不能再具有需要描述的性質(zhì)。屬性必須是不可分的數(shù)據(jù)項,不能包含其他屬性。(2)屬性不能與其他實體具有聯(lián)系,即E-R圖中所表示的聯(lián)系是實體之間的聯(lián)系。概念結(jié)構(gòu)設(shè)計(續(xù))例如:職工是一個實體,職工號、姓名、年齡是職工的屬性。職稱如果沒有與工資、福利掛鉤,根據(jù)準(zhǔn)則(1)可以作為職工實體的屬性如果不同的職稱有不同的工資、住房標(biāo)準(zhǔn)和不同的附加福利,則職稱作為一個實體更恰當(dāng)?shù)谄哒聰?shù)據(jù)庫設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.2需求分析7.3概念結(jié)構(gòu)設(shè)計7.4邏輯結(jié)構(gòu)設(shè)計7.5物理結(jié)構(gòu)設(shè)計7.6數(shù)據(jù)庫的實施和維護(hù)7.4邏輯結(jié)構(gòu)設(shè)計邏輯結(jié)構(gòu)設(shè)計的任務(wù)把概念結(jié)構(gòu)設(shè)計階段設(shè)計好的基本E-R圖轉(zhuǎn)換為與選用數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)7.4邏輯結(jié)構(gòu)設(shè)計7.4.1E-R圖向關(guān)系模型的轉(zhuǎn)換7.4.2數(shù)據(jù)模型的優(yōu)化7.4.3設(shè)計用戶子模式E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))轉(zhuǎn)換內(nèi)容E-R圖由實體型、實體的屬性和實體型之間的聯(lián)系三個要素組成關(guān)系模型的邏輯結(jié)構(gòu)是一組關(guān)系模式的集合將E-R圖轉(zhuǎn)換為關(guān)系模型:將實體型、實體的屬性和實體型之間的聯(lián)系轉(zhuǎn)化為關(guān)系模式E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))轉(zhuǎn)換原則1.一個實體型轉(zhuǎn)換為一個關(guān)系模式。關(guān)系的屬性:實體的屬性關(guān)系的碼:實體的碼E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))2.實體型間的聯(lián)系有以下不同情況(1)一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與任意一端對應(yīng)的關(guān)系模式合并。①轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式關(guān)系的屬性:與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性關(guān)系的候選碼:每個實體的碼均是該關(guān)系的候選碼E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))(1)一個1:1聯(lián)系的轉(zhuǎn)換(續(xù))②與某一端實體對應(yīng)的關(guān)系模式合并合并后關(guān)系的屬性:加入對應(yīng)關(guān)系的碼和聯(lián)系本身的屬性合并后關(guān)系的碼:不變E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))(2)一個1:n聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與n端對應(yīng)的關(guān)系模式合并。①轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式關(guān)系的屬性:與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性關(guān)系的碼:n端實體的碼E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))(2)一個1:n聯(lián)系的轉(zhuǎn)換(續(xù))②與n端對應(yīng)的關(guān)系模式合并合并后關(guān)系的屬性:在n端關(guān)系中加入1端關(guān)系的碼和聯(lián)系本身的屬性合并后關(guān)系的碼:不變可以減少系統(tǒng)中的關(guān)系個數(shù),一般情況下更傾向于采用這種方法E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))(3)一個m:n聯(lián)系轉(zhuǎn)換為一個關(guān)系模式關(guān)系的屬性:與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性關(guān)系的碼:各實體碼的組合[例]“選修”聯(lián)系是一個m:n聯(lián)系,可以將它轉(zhuǎn)換為如下關(guān)系模式,其中學(xué)號與課程號為關(guān)系的組合碼:選修(學(xué)號,課程號,成績)E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))(4)三個或三個以上實體間的一個多元聯(lián)系轉(zhuǎn)換為一個關(guān)系模式。關(guān)系的屬性:與該多元聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性關(guān)系的碼:各實體碼的組合E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))(5)具有相同碼的關(guān)系模式可合并目的:減少系統(tǒng)中的關(guān)系個數(shù)合并方法:將其中一個關(guān)系模式的全部屬性加入到另一個關(guān)系模式中然后去掉其中的同義屬性(可能同名也可能不同名)適當(dāng)調(diào)整屬性的次序E-R圖向關(guān)系模型的轉(zhuǎn)換(續(xù))部門(部門號,部門名,經(jīng)理的職工號,…)職工(職工號、部門號,職工名,職務(wù),…)產(chǎn)品(產(chǎn)品號,產(chǎn)品名,產(chǎn)品組長的職工號,…)供應(yīng)商(供應(yīng)商號,姓名,…)零件(零件號,零件名,…)職工工作(職工號,產(chǎn)品號,工作天數(shù),…)供應(yīng)(產(chǎn)品號,供應(yīng)商號,零件號,供應(yīng)量)7.4邏輯結(jié)構(gòu)設(shè)計7.4.1E-R圖向關(guān)系模型的轉(zhuǎn)換7.4.2數(shù)據(jù)模型的優(yōu)化7.4.3設(shè)計用戶子模式7.4.2數(shù)據(jù)模型的優(yōu)化一般的數(shù)據(jù)模型還需要向特定數(shù)據(jù)庫管理系統(tǒng)規(guī)定的模型進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換的主要依據(jù)是所選用的數(shù)據(jù)庫管理系統(tǒng)的功能及限制。沒有通用規(guī)則。對于關(guān)系模型來說,這種轉(zhuǎn)換通常都比較簡單。數(shù)據(jù)模型的優(yōu)化(續(xù))數(shù)據(jù)庫邏輯設(shè)計的結(jié)果不是唯一的。得到初步數(shù)據(jù)模型后,還應(yīng)該適當(dāng)?shù)匦薷摹⒄{(diào)整數(shù)據(jù)模型的結(jié)構(gòu),以進(jìn)一步提高數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能,這就是數(shù)據(jù)模型的優(yōu)化。關(guān)系數(shù)據(jù)模型的優(yōu)化通常以規(guī)范化理論為指導(dǎo)。數(shù)據(jù)模型的優(yōu)化(續(xù))優(yōu)化數(shù)據(jù)模型的方法:(1)確定數(shù)據(jù)依賴按需求分析階段所得到的語義,分別寫出每個關(guān)系模式內(nèi)部各屬性之間的數(shù)據(jù)依賴以及不同關(guān)系模式屬性之間數(shù)據(jù)依賴。(2)對于各個關(guān)系模式之間的數(shù)據(jù)依賴進(jìn)行極小化處理,消除冗余的聯(lián)系。
數(shù)據(jù)模型的優(yōu)化(續(xù))(3)按照數(shù)據(jù)依賴的理論對關(guān)系模式進(jìn)行分析,考察是否存在部分函數(shù)依賴、傳遞函數(shù)依賴、多值依賴等,確定各關(guān)系模式分別屬于第幾范式。(4)按照需求分析階段得到的各種應(yīng)用對數(shù)據(jù)處理的要求,分析對于這樣的應(yīng)用環(huán)境這些模式是否合適,確定是否要對它們進(jìn)行合并或分解。數(shù)據(jù)模型的優(yōu)化(續(xù))并不是規(guī)范化程度越高的關(guān)系就越優(yōu)當(dāng)查詢經(jīng)常涉及兩個或多個關(guān)系模式的屬性時,系統(tǒng)必須經(jīng)常地進(jìn)行連接運(yùn)算連接運(yùn)算的代價是相當(dāng)高的因此在這種情況下,第二范式甚至第一范式也許是適合的。數(shù)據(jù)模型的優(yōu)化(續(xù))非BCNF的關(guān)系模式雖然會存在不同程度的更新異常,但如果在實際應(yīng)用中對此關(guān)系模式只是查詢,并不執(zhí)行更新操作,就不會產(chǎn)生實際影響。對于一個具體應(yīng)用來說,到底規(guī)范化進(jìn)行到什么程度,需要權(quán)衡響應(yīng)時間和潛在問題兩者的利弊才能決定數(shù)據(jù)模型的優(yōu)化(續(xù))(5)對關(guān)系模式進(jìn)行必要分解,提高數(shù)據(jù)操作效率和存儲空間的利用率。第七章數(shù)據(jù)庫設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.2需求分析7.3概念結(jié)構(gòu)設(shè)計7.4邏輯結(jié)構(gòu)設(shè)計7.5物理結(jié)構(gòu)設(shè)計7.6數(shù)據(jù)庫的實施和維護(hù)7.5數(shù)據(jù)庫的物理設(shè)計什么是數(shù)據(jù)庫的物理設(shè)計數(shù)據(jù)庫在物理設(shè)備上的存儲結(jié)構(gòu)與存取方法稱為數(shù)據(jù)庫的物理結(jié)構(gòu),它依賴于選定的數(shù)據(jù)庫管理系統(tǒng)。為一個給定的邏輯數(shù)據(jù)模型選取一個最適合應(yīng)用要求的物理結(jié)構(gòu)的過程,就是數(shù)據(jù)庫的物理設(shè)計。數(shù)據(jù)庫的物理設(shè)計(續(xù))數(shù)據(jù)庫物理設(shè)計的步驟確定數(shù)據(jù)庫的物理結(jié)構(gòu)在關(guān)系數(shù)據(jù)庫中主要指存取方法和存儲結(jié)構(gòu);對物理結(jié)構(gòu)進(jìn)行評價評價的重點(diǎn)是時間和空間效率若評價結(jié)果滿足原設(shè)計要求,則可進(jìn)入到物理實施
階段。否則,就需要重新設(shè)計或修改物理結(jié)構(gòu),有時
甚至要返回邏輯設(shè)計階段修改數(shù)據(jù)模型。7.5數(shù)據(jù)庫的物理設(shè)計7.5.1數(shù)據(jù)庫物理設(shè)計的內(nèi)容和方法7.5.2關(guān)系模式存取方法選擇7.5.3確定數(shù)據(jù)庫的存儲結(jié)構(gòu)7.5.4評價物理結(jié)構(gòu)數(shù)據(jù)庫物理設(shè)計的內(nèi)容和方法(續(xù))關(guān)系數(shù)據(jù)庫物理設(shè)計的內(nèi)容為關(guān)系模式選擇存取方法(建立存取路徑)設(shè)計關(guān)系、索引等數(shù)據(jù)庫文件的物理存儲結(jié)構(gòu)7.5數(shù)據(jù)庫的物理設(shè)計7.5.1數(shù)據(jù)庫物理設(shè)計的內(nèi)容和方法7.5.2關(guān)系模式存取方法選擇7.5.3確定數(shù)據(jù)庫的存儲結(jié)構(gòu)7.5.4評價物理結(jié)構(gòu)7.5.2關(guān)系模式存取方法選擇數(shù)據(jù)庫系統(tǒng)是多用戶共享的系統(tǒng),對同一個關(guān)系要建立多條存取路徑才能滿足多用戶的多種應(yīng)用要求。物理結(jié)構(gòu)設(shè)計的任務(wù)之一是根據(jù)關(guān)系數(shù)據(jù)庫管理系統(tǒng)支持的存取方法確定選擇哪些存取方法。關(guān)系模式存取方法選擇(續(xù))數(shù)據(jù)庫管理系統(tǒng)常用存取方法1.B+樹索引存取方法2.Hash索引存取方法3.聚簇存取方法1.B+樹索引存取方法的選擇選擇索引存取方法的主要內(nèi)容 根據(jù)應(yīng)用要求確定對哪些屬性列建立索引對哪些屬性列建立組合索引對哪些索引要設(shè)計為唯一索引B+樹索引存取方法的選擇(續(xù))選擇索引存取方法的一般規(guī)則如果一個(或一組)屬性經(jīng)常在查詢條件中出現(xiàn),則考慮在這個(或這組)屬性上建立索引(或組合索引)如果一個屬性經(jīng)常作為最大值和最小值等聚集函數(shù)的參數(shù),則考慮在這個屬性上建立索引如果一個(或一組)屬性經(jīng)常在連接操作的連接條件中出現(xiàn),則考慮在這個(或這組)屬性上建立索引B+樹索引存取方法的選擇(續(xù))關(guān)系上定義的索引數(shù)過多會帶來較多的額外開銷維護(hù)索引的開銷查找索引的開銷2.HASH存取方法的選擇選擇Hash存取方法的規(guī)則如果一個關(guān)系的屬性主要出現(xiàn)在等值連接條件中或主要出現(xiàn)在等值比較選擇條件中,而且滿足下列兩個條件之一該關(guān)系的大小可預(yù)知,而且不變;該關(guān)系的大小動態(tài)改變,但所選用的數(shù)據(jù)庫管理系統(tǒng)提供了動態(tài)Hash存取方法。3.聚簇存取方法的選擇什么是聚簇為了提高某個屬性(或?qū)傩越M)的查詢速度,把這個或這些屬性(稱為聚簇碼)上具有相同值的元組集中存放在連續(xù)的物理塊中稱為聚簇。該屬性(或?qū)傩越M)稱為聚簇碼(clusterkey)許多關(guān)系型數(shù)據(jù)庫管理系統(tǒng)都提供了聚簇功能聚簇存取方法的選擇(續(xù))聚簇索引建立聚簇索引后,基表中數(shù)據(jù)也需要按指定的聚簇屬性值的升序或降序存放。也即聚簇索引的索引項順序與表中元組的物理順序一致。在一個基本表上最多只能建立一個聚簇索引聚簇索引的適用條件很少對基表進(jìn)行增刪操作很少對其中的變長列進(jìn)行修改操作聚簇存取方法的選擇(續(xù))聚簇的用途對于某些類型的查詢,可以提高查詢效率1.大大提高按聚簇屬性進(jìn)行查詢的效率[例]假設(shè)學(xué)生關(guān)系按所在系建有索引,現(xiàn)在要查詢信息系的所有學(xué)生名單。計算機(jī)系的500名學(xué)生分布在500個不同的物理塊上時,至少要執(zhí)行500次I/O操作。如果將同一系的學(xué)生元組集中存放,則每讀一個物理塊可得到多個滿足查詢條件的元組,從而顯著地減少了訪問磁盤的次數(shù)。聚簇存取方法的選擇(續(xù))2.節(jié)省存儲空間聚簇以后,聚簇碼相同的元組集中在一起了,因而聚簇碼值不必在每個元組中重復(fù)存儲,只要在一組中存一次就行了。聚簇存取方法的選擇(續(xù))聚簇的局限性
聚簇只能提高某些特定應(yīng)用的性能
建立與維護(hù)聚簇的開銷相當(dāng)大對已有關(guān)系建立聚簇,將導(dǎo)致關(guān)系中元組的物理存儲位置移動,并使此關(guān)系上原有的索引無效,必須重建。當(dāng)一個元組的聚簇碼改變時,該元組的存儲位置也要做相應(yīng)改變。聚簇存取方法的選擇(續(xù))聚簇的適用范圍既適用于單個關(guān)系獨(dú)立聚簇,也適用于多個關(guān)系組合聚簇
當(dāng)通過聚簇碼進(jìn)行訪問或連接是該關(guān)系的主要應(yīng)用,與聚簇碼無關(guān)的其他訪問很少或者是次要的時,可以使用聚簇尤其當(dāng)SQL語句中包含有與聚簇碼有關(guān)的ORDERBY,GROUPBY,UNION,DISTINCT等子句或短語時,使用聚簇特別有利,可以省去或減化對結(jié)果集的排序操作7.5數(shù)據(jù)庫的物理設(shè)計7.5.1數(shù)據(jù)庫物理設(shè)計的內(nèi)容和方法7.5.2關(guān)系模式存取方法選擇7.5.3確定數(shù)據(jù)庫的存儲結(jié)構(gòu)7.5.4評價物理結(jié)構(gòu)7.5.3確定數(shù)據(jù)庫的存儲結(jié)構(gòu)確定數(shù)據(jù)庫物理結(jié)構(gòu)主要指確定數(shù)據(jù)的存放位置和存儲結(jié)構(gòu),包括:確定關(guān)系、索引、聚簇、日志、備份等的存儲安排和存儲結(jié)構(gòu),確定系統(tǒng)配置等。確定數(shù)據(jù)的存放位置和存儲結(jié)構(gòu)要綜合考慮存取時間、存儲空間利用率和維護(hù)代價3個方面的因素。確定數(shù)據(jù)庫的存儲結(jié)構(gòu)(續(xù))影響數(shù)據(jù)存放位置和存儲結(jié)構(gòu)的因素硬件環(huán)境應(yīng)用需求存取時間存儲空間利用率維護(hù)代價這三個方面常常是相互矛盾的必須進(jìn)行權(quán)衡,選擇一個折中方案1.確定數(shù)據(jù)的存放位置基本原則根據(jù)應(yīng)用情況將易變部分與穩(wěn)定部分分開存放經(jīng)常存取部分與存取頻率較低部分分開存放[例]可以將比較大的表分別放在兩個磁盤上,以加快存取速度,這在多用戶環(huán)境下特別有效??梢詫⑷罩疚募c數(shù)據(jù)庫對象(表、索引等)放在不同的磁盤以改進(jìn)系統(tǒng)的性能。確定系統(tǒng)配置(續(xù))系統(tǒng)都為這些變量賦予了合理的缺省值。
在進(jìn)行物理設(shè)計時需要根據(jù)應(yīng)用環(huán)境確定這些參數(shù)值,以使系統(tǒng)性能最優(yōu)。在物理設(shè)計時對系統(tǒng)配置變量的調(diào)整只是初步的,要根據(jù)系統(tǒng)實際運(yùn)行情況做進(jìn)一步的調(diào)整,以切實改進(jìn)系統(tǒng)性能。7.5數(shù)據(jù)庫的物理設(shè)計7.5.1數(shù)據(jù)庫物理設(shè)計的內(nèi)容和方法7.5.2關(guān)系模式存取方法選擇7.5.3確定數(shù)據(jù)庫的存儲結(jié)構(gòu)7.5.4評價物理結(jié)構(gòu)7.5.4評價物理結(jié)構(gòu)對數(shù)據(jù)庫物理設(shè)計過程中產(chǎn)生的多種方案進(jìn)行評價,從中選擇一個較優(yōu)的方案作為數(shù)據(jù)庫的物理結(jié)構(gòu)。評價方法定量估算各種方案存儲空間存取時間維護(hù)代價對估算結(jié)果進(jìn)行權(quán)衡、比較,選擇出一個較優(yōu)的合理的物理結(jié)構(gòu)。第七章數(shù)據(jù)庫設(shè)計7.1數(shù)據(jù)庫設(shè)計概述7.2需求分析7.3概念結(jié)構(gòu)設(shè)計7.4邏輯結(jié)構(gòu)設(shè)計7.5物理結(jié)構(gòu)設(shè)計7.6數(shù)據(jù)庫的實施和維護(hù)7.6數(shù)據(jù)庫的實施和維護(hù)7.6.1數(shù)據(jù)的載入和應(yīng)用程序的調(diào)試7.6.2數(shù)據(jù)庫的試運(yùn)行7.6.3數(shù)據(jù)庫的運(yùn)行和維護(hù)
數(shù)據(jù)的載入數(shù)據(jù)庫結(jié)構(gòu)建立好后,就可以向數(shù)據(jù)庫中裝載數(shù)據(jù)了。組織數(shù)據(jù)入庫是數(shù)據(jù)庫實施階段最主要的工作。數(shù)據(jù)裝載方法人工方法計算機(jī)輔助數(shù)據(jù)入庫應(yīng)用程序的調(diào)試數(shù)據(jù)庫應(yīng)用程序的設(shè)計應(yīng)該與數(shù)據(jù)設(shè)計并行進(jìn)行在組織數(shù)據(jù)入庫的同時還要調(diào)試應(yīng)用程序應(yīng)用程序的設(shè)計、編碼和調(diào)試的方法、步驟在軟件工程等課程中有詳細(xì)講解,這里就不贅述了7.6數(shù)據(jù)庫的實施和維護(hù)7.6.1數(shù)據(jù)的載入和應(yīng)用程序的調(diào)試7.6.2數(shù)據(jù)庫的試運(yùn)行7.6.3數(shù)據(jù)庫的運(yùn)行和維護(hù)7.6.2數(shù)據(jù)庫的試運(yùn)行應(yīng)用程序調(diào)試完成,并且已有一小部分?jǐn)?shù)據(jù)入庫后,就可以開始對數(shù)據(jù)庫系統(tǒng)進(jìn)行聯(lián)合調(diào)試,也稱數(shù)據(jù)庫的試運(yùn)行。主要工作包括:功能測試:實際運(yùn)行應(yīng)用程序,執(zhí)行對數(shù)據(jù)庫的各種操作,測試應(yīng)用程序的各種功能。性能測試:測量系統(tǒng)的性能指標(biāo),分析是否符合設(shè)計目標(biāo)。數(shù)據(jù)庫的試運(yùn)行(續(xù))數(shù)據(jù)的分期入庫重新設(shè)計物理結(jié)構(gòu)甚至邏輯結(jié)構(gòu),會導(dǎo)致數(shù)據(jù)重新入庫由于數(shù)據(jù)入庫工作量實在太大,所以可以采用分期輸入數(shù)據(jù)的方法先輸入小批量數(shù)據(jù)供先期聯(lián)合調(diào)試使用待試運(yùn)行基本合格后再輸入大批量數(shù)據(jù)逐步增加數(shù)據(jù)量,逐步完成運(yùn)行評價數(shù)據(jù)庫的試運(yùn)行(續(xù))數(shù)據(jù)庫的轉(zhuǎn)儲和恢復(fù)在數(shù)據(jù)庫試運(yùn)行階段,系統(tǒng)還不穩(wěn)定,硬、軟件故障隨時都可能發(fā)生系統(tǒng)的操作人員對新系統(tǒng)還不熟悉,誤操作也不可避免因此必須做好數(shù)據(jù)庫的轉(zhuǎn)儲和恢復(fù)工作,盡量減少對數(shù)據(jù)庫的破壞7.6數(shù)據(jù)庫的實施和維護(hù)7.6.1數(shù)據(jù)的載入和應(yīng)用程序的調(diào)試7.6.2數(shù)據(jù)庫的試運(yùn)行7.6.3數(shù)據(jù)庫的運(yùn)行和維護(hù)7.6.3數(shù)據(jù)庫的運(yùn)行和維護(hù)在數(shù)據(jù)庫運(yùn)行階段,對數(shù)據(jù)庫經(jīng)常性的維護(hù)工作主要是由數(shù)據(jù)庫管理員完成的,包括:1.數(shù)據(jù)庫的轉(zhuǎn)儲和恢復(fù)數(shù)據(jù)庫管理員要針對不同的應(yīng)用要求制定不同的轉(zhuǎn)儲計劃,定期對數(shù)據(jù)庫和日志文件進(jìn)行備份。一旦發(fā)生介質(zhì)故障,即利用數(shù)據(jù)庫備份及日志文件備份,盡快將數(shù)據(jù)庫恢復(fù)到某種一致性狀態(tài)。數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))2.數(shù)據(jù)庫的安全性、完整性控制初始定義數(shù)據(jù)庫管理員根據(jù)用戶的實際需要授予不同的操作權(quán)限根據(jù)應(yīng)用環(huán)境定義不同的完整性約束條件修改定義當(dāng)應(yīng)用環(huán)境發(fā)生變化,對安全性的要求也會發(fā)生變化,數(shù)據(jù)庫管理員需要根據(jù)實際情況修改原有的安全性控制由于應(yīng)用環(huán)境發(fā)生變化,數(shù)據(jù)庫的完整性約束條件也會變化,也需要數(shù)據(jù)庫管理員不斷修正,以滿足用戶要求數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))3.數(shù)據(jù)庫性能的監(jiān)督、分析和改進(jìn)在數(shù)據(jù)庫運(yùn)行過程中,數(shù)據(jù)庫管理員必須監(jiān)督系統(tǒng)運(yùn)行,對監(jiān)測數(shù)據(jù)進(jìn)行分析,找出改進(jìn)系統(tǒng)性能的方法。利用監(jiān)測工具獲取系統(tǒng)運(yùn)行過程中一系列性能參數(shù)的值通過仔細(xì)分析這些數(shù)據(jù),判斷當(dāng)前系統(tǒng)是否處于最佳運(yùn)行狀態(tài)如果不是,則需要通過調(diào)整某些參數(shù)來進(jìn)一步改進(jìn)數(shù)據(jù)庫性能數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))4.數(shù)據(jù)庫的重組織與重構(gòu)造(1)數(shù)據(jù)庫的重組織為什么要重組織數(shù)據(jù)庫數(shù)據(jù)庫運(yùn)行一段時間后,由于記錄的不斷增、刪、改,會使數(shù)據(jù)庫的物理存儲變壞,從而降低數(shù)據(jù)庫存儲空間的利用率和數(shù)據(jù)的存取效率,使數(shù)據(jù)庫的性能下降。數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))重組織的形式全部重組織部分重組織只對頻繁增、刪的表進(jìn)行重組織重組織的目標(biāo)提高系統(tǒng)性能數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))重組織的工作按原設(shè)計要求重新安排存儲位置回收垃圾減少指針鏈數(shù)據(jù)庫的重組織不會改變原設(shè)計的數(shù)據(jù)邏輯結(jié)構(gòu)和物理結(jié)構(gòu)數(shù)據(jù)庫管理系統(tǒng)一般都提供了供重組織數(shù)據(jù)庫使用的實用程序,幫助數(shù)據(jù)庫管理員重新組織數(shù)據(jù)庫。數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))(2)數(shù)據(jù)庫的重構(gòu)造為什么要進(jìn)行數(shù)據(jù)庫的重構(gòu)造數(shù)據(jù)庫應(yīng)用環(huán)境發(fā)生變化,會導(dǎo)致實體及實體間的聯(lián)系也發(fā)生相應(yīng)的變化,使原有的數(shù)據(jù)庫設(shè)計不能很好地滿足新的需求增加新的應(yīng)用或新的實體取消某些已有應(yīng)用改變某些已有應(yīng)用數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))數(shù)據(jù)庫重構(gòu)造的主要工作根據(jù)新環(huán)境調(diào)整數(shù)據(jù)庫的模式和內(nèi)模式增加或刪除某些數(shù)據(jù)項改變數(shù)據(jù)項的類型增加或刪除某個表改變數(shù)據(jù)庫的容量增加或刪除某些索引數(shù)據(jù)庫的運(yùn)行和維護(hù)(續(xù))重構(gòu)造數(shù)據(jù)庫的程度是有限的若應(yīng)用變化太大,已無法通過重構(gòu)數(shù)據(jù)庫來滿足新的需求,或重構(gòu)數(shù)據(jù)庫的代價太大,則表明現(xiàn)有數(shù)據(jù)庫應(yīng)用系統(tǒng)的生命周期已經(jīng)結(jié)束,應(yīng)該重新設(shè)計新的數(shù)據(jù)庫應(yīng)用系統(tǒng)了。Clicktoeditcompanyslogan.謝謝127《數(shù)據(jù)庫原理與應(yīng)用》第8章數(shù)據(jù)庫編程128第八章內(nèi)容提要ODBC編程4129嵌入式SQL1過程化SQL2
存儲過程和觸發(fā)器3內(nèi)容導(dǎo)學(xué)130學(xué)習(xí)目標(biāo)理解數(shù)據(jù)庫編程的基本任務(wù)與目標(biāo)理解主要的數(shù)據(jù)庫編程技術(shù)理解存儲過程和觸發(fā)器的作用學(xué)習(xí)重點(diǎn)掌握嵌入式SQL的設(shè)計方法掌握SQL編程的主要方法掌握存儲過程和觸發(fā)器設(shè)計方法思政導(dǎo)學(xué)131關(guān)鍵字:數(shù)據(jù)庫編程的方法和主要技術(shù)。內(nèi)容要意:通過介紹不同的數(shù)據(jù)庫編程方法,使學(xué)生體會數(shù)據(jù)庫編程技術(shù)的發(fā)展過程,以及我國的數(shù)據(jù)庫技術(shù)發(fā)展過程中取得的成果,使學(xué)生對我國目前數(shù)據(jù)庫技術(shù)的發(fā)展?fàn)顩r有全面的了解,增強(qiáng)學(xué)生對于未來我國數(shù)據(jù)庫技術(shù)發(fā)展的信心。思政點(diǎn)播:通過介紹數(shù)據(jù)庫編程的工程化方法,使學(xué)生了解現(xiàn)代社會復(fù)雜技術(shù)的實現(xiàn)過程。引導(dǎo)學(xué)生把復(fù)雜的事做到簡單,化繁為簡。面對復(fù)雜問題時要進(jìn)行分解、分步驟執(zhí)行。思政目標(biāo):培養(yǎng)學(xué)生樂學(xué)善思的專業(yè)學(xué)習(xí)素養(yǎng);培養(yǎng)學(xué)生養(yǎng)成嚴(yán)謹(jǐn)?shù)墓こ虒W(xué)思維方式,引導(dǎo)學(xué)生在學(xué)習(xí)生活中做好規(guī)劃,并按照制定的規(guī)劃穩(wěn)步前進(jìn)。8.1嵌入式SQLSQL語言提供了兩種不同的使用方式交互式嵌入式為什么要引入嵌入式SQLSQL語言是非過程性語言事務(wù)處理應(yīng)用需要高級語言這兩種方式細(xì)節(jié)上有差別,在程序設(shè)計的環(huán)境下,SQL語句要做某些必要的擴(kuò)充8.1嵌入式SQL8.1.1嵌入式SQL的處理過程8.1.2嵌入式SQL語句與主語言之間的通信8.1.3不用游標(biāo)的SQL語句8.1.4使用游標(biāo)的SQL語句8.1.1嵌入式SQL的處理過程主語言嵌入式SQL是將SQL語句嵌入程序設(shè)計語言中,被嵌入的程序設(shè)計語言,如C、C++、Java,稱為宿主語言,簡稱主語言。處理過程預(yù)編譯方法嵌入式SQL的處理過程(續(xù))關(guān)系數(shù)據(jù)庫管理系統(tǒng)預(yù)處理程序轉(zhuǎn)換嵌入式SQL語句為函數(shù)調(diào)用含嵌入式SQL語句的主語言程序轉(zhuǎn)換后的主語言程序主語言編譯程序編譯處理目標(biāo)語言程序嵌入式SQL的處理過程(續(xù))為了區(qū)分SQL語句與主語言語句,所有SQL語句必須加前綴EXECSQL,主語言為C語言時,語句格式:EXECSQL<SQL語句>;8.1嵌入式SQL8.1.1嵌入式SQL的處理過程8.1.2嵌入式SQL語句與主語言之間的通信8.1.3不用游標(biāo)的SQL語句8.1.4使用游標(biāo)的SQL語句8.1.5動態(tài)SQL8.1.2嵌入式SQL語句與主語言之間的通信將SQL嵌入到高級語言中混合編程,程序中會含有兩種不同計算模型的語句SQL語句描述性的面向集合的語句負(fù)責(zé)操縱數(shù)據(jù)庫高級語言語句過程性的面向記錄的語句負(fù)責(zé)控制邏輯流程它們之間應(yīng)該如何通信?嵌入式SQL語句與主語言之間的通信(續(xù))數(shù)據(jù)庫工作單元與源程序工作單元之間的通信(1)向主語言傳遞SQL語句的執(zhí)行狀態(tài)信息,使主語言能夠據(jù)此控制程序流程,主要用SQL通信區(qū)實現(xiàn)(2)主語言向SQL語句提供參數(shù),主要用主變量實現(xiàn)(3)將SQL語句查詢數(shù)據(jù)庫的結(jié)果交主語言處理,主要用主變量和游標(biāo)實現(xiàn)1.SQL通信區(qū)SQLCA:SQLCommunicationAreaSQLCA是一個數(shù)據(jù)結(jié)構(gòu)SQLCA的用途SQL語句執(zhí)行后,系統(tǒng)反饋給應(yīng)用程序信息描述系統(tǒng)當(dāng)前工作狀態(tài)描述運(yùn)行環(huán)境這些信息將送到SQL通信區(qū)中應(yīng)用程序從SQL通信區(qū)中取出這些狀態(tài)信息,據(jù)此決定接下來執(zhí)行的語句SQL通信區(qū)(續(xù))SQLCA使用方法定義SQLCA
用EXECSQLINCLUDESQLCA定義使用SQLCASQLCA中有一個存放每次執(zhí)行SQL語句后返回代碼的變量SQLCODE如果SQLCODE等于預(yù)定義的常量SUCCESS,則表示SQL語句成功,否則表示出錯應(yīng)用程序每執(zhí)行完一條SQL語句之后都應(yīng)該測試一下SQLCODE的值,以了解該SQL語句執(zhí)行情況并做相應(yīng)處理2.主變量主變量嵌入式SQL語句中可以使用主語言的程序變量來輸入或輸出數(shù)據(jù)在SQL語句中使用的主語言程序變量簡稱為主變量(HostVariable)主變量(續(xù))主變量的類型輸入主變量由應(yīng)用程序?qū)ζ滟x值,SQL語句引用輸出主變量由SQL語句對其賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序主變量(續(xù))指示變量是一個整型變量,用來“指示”所指主變量的值或條件一個主變量可以附帶一個指示變量(IndicatorVariable)指示變量的用途指示輸入主變量是否為空值檢測輸出變量是否為空值,值是否被截斷主變量(續(xù))在SQL語句中使用主變量和指示變量的方法說明主變量和指示變量BEGINDECLARESECTION ... ... (說明主變量和指示變量)
...ENDDECLARESECTION主變量(續(xù))在SQL語句中使用主變量和指示變量的方法(續(xù))使用主變量說明之后的主變量可以在SQL語句中任何一個能夠使用表達(dá)式的地方出現(xiàn)為了與數(shù)據(jù)庫對象名(表名、視圖名、列名等)區(qū)別,SQL語句中的主變量名前要加冒號(:)作為標(biāo)志使用指示變量指示變量前也必須加冒號標(biāo)志必須緊跟在所指主變量之后主變量(續(xù))在SQL語句之外(主語言語句中)使用主變量和指示變量的方法可以直接引用,不必加冒號3.游標(biāo)為什么要使用游標(biāo)SQL語言與主語言具有不同數(shù)據(jù)處理方式SQL語言是面向集合的,一條SQL語句原則上可以產(chǎn)生或處理多條記錄主語言是面向記錄的,一組主變量一次只能存放一條記錄僅使用主變量并不能完全滿足SQL語句向應(yīng)用程序輸出數(shù)據(jù)的要求嵌入式SQL引入了游標(biāo)的概念,用來協(xié)調(diào)這兩種不同的處理方式
游標(biāo)(續(xù))游標(biāo)游標(biāo)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果每個游標(biāo)區(qū)都有一個名字用戶可以用SQL語句逐一從游標(biāo)中獲取記錄,并賦給主變量,交由主語言進(jìn)一步處理4.建立和關(guān)閉數(shù)據(jù)庫連接(1)建立數(shù)據(jù)庫連接
EXECSQLCONNECTTOtarget[ASconnection-name][USERuser-name];target是要連接的數(shù)據(jù)庫服務(wù)器常見的服務(wù)器標(biāo)識串,如<dbname>@<hostname>:<port>包含服務(wù)器標(biāo)識的SQL串常量DEFAULT建立和關(guān)閉數(shù)據(jù)庫連接(續(xù))connect-name是可選的連接名,連接名必須是一個有效的標(biāo)識符在整個程序內(nèi)只有一個連接時可以不指定連接名程序運(yùn)行過程中可以修改當(dāng)前連接
EXECSQLSETCONNECTIONconnection-name|DEFAULT;建立和關(guān)閉數(shù)據(jù)庫連接(續(xù))(2)關(guān)閉數(shù)據(jù)庫連接
EXECSQLDISCONNECT[connection];8.1嵌入式SQL8.1.1嵌入式SQL的處理過程8.1.2嵌入式SQL語句與主語言之間的通信8.1.3不用游標(biāo)的SQL語句8.1.4使用游標(biāo)的SQL語句8.1.5動態(tài)SQL8.1.3不用游標(biāo)的SQL語句不用游標(biāo)的SQL語句的種類說明性語句數(shù)據(jù)定義語句數(shù)據(jù)控制語句查詢結(jié)果為單記錄的SELECT語句非CURRENT形式的增刪改語句不用游標(biāo)的SQL語句(續(xù))1.查詢結(jié)果為單記錄的SELECT語句2.非CURRENT形式的增刪改語句查詢結(jié)果為單記錄的SELECT語句(續(xù))INTO子句、WHERE子句和HAVING短語的條件表達(dá)式中均可以使用主變量查詢返回的記錄中,可能某些列為空值NULL
如果查詢結(jié)果實際上并不是單條記錄,而是多條記錄,則程序出錯,關(guān)系數(shù)據(jù)庫管理系統(tǒng)會在SQLCA中返回錯誤信息8.1嵌入式SQL8.1.1嵌入式SQL的處理過程8.1.2嵌入式SQL語句與主語言之間的通信8.1.3不用游標(biāo)的SQL語句8.1.4使用游標(biāo)的SQL語句8.1.5動態(tài)SQL8.1.4使用游標(biāo)的SQL語句必須使用游標(biāo)的SQL語句查詢結(jié)果為多條記錄的SELECT語句CURRENT形式的UPDATE語句CURRENT形式的DELETE語句使用游標(biāo)的SQL語句(續(xù))1.查詢結(jié)果為多條記錄的SELECT語句2.CURRENT形式的UPDATE和DELETE語句1.查詢結(jié)果為多條記錄的SELECT語句使用游標(biāo)的步驟(1)說明游標(biāo)(2)打開游標(biāo)(3)推進(jìn)游標(biāo)指針并取當(dāng)前記錄(4)關(guān)閉游標(biāo)(1)說明游標(biāo)使用DECLARE語句語句格式
EXECSQLDECLARE<游標(biāo)名>CURSORFOR<SELECT語句>;功能是一條說明性語句,這時關(guān)系數(shù)據(jù)庫管理系統(tǒng)并不執(zhí)行SELECT語句(2)打開游標(biāo)使用OPEN語句語句格式
EXECSQLOPEN<游標(biāo)名>;功能打開游標(biāo)實際上是執(zhí)行相應(yīng)的SELECT語句,把查詢結(jié)果取到緩沖區(qū)中這時游標(biāo)處于活動狀態(tài),指針指向查詢結(jié)果集中的第一條記錄(3)推進(jìn)游標(biāo)指針并取當(dāng)前記錄使用FETCH語句語句格式
EXECSQLFETCH<游標(biāo)名>INTO<主變量>[<指示變量>] [,<主變量>[<指示變量>]]...;功能指定方向推動游標(biāo)指針,同時將緩沖區(qū)中的當(dāng)前記錄取出來送至主變量供主語言進(jìn)一步處理(4)關(guān)閉游標(biāo)使用CLOSE語句語句格式
EXECSQLCLOSE<游標(biāo)名>;功能關(guān)閉游標(biāo),釋放結(jié)果集占用的緩沖區(qū)及其他資源說明游標(biāo)被關(guān)閉后,就不再和原來的查詢結(jié)果集相聯(lián)系被關(guān)閉的游標(biāo)可以再次被打開,與新的查詢結(jié)果相聯(lián)系2.CURRENT形式的UPDATE語句和DELETE語句CURRENT形式的UPDATE語句和DELETE語句的用途非CURRENT形式的UPDATE語句和DELETE語句面向集合的操作一次修改或刪除所有滿足條件的記錄CURRENT形式的UPDATE語句和DELETE語句(續(xù))CURRENT形式的UPDATE語句和DELETE語句的用途(續(xù))如果只想修改或刪除其中某個記錄用帶游標(biāo)的SELECT語句查出所有滿足條件的記錄從中進(jìn)一步找出要修改或刪除的記錄用CURRENT形式的UPDATE語句和DELETE語句修改或刪除之UPDATE語句和DELETE語句中要用子句
WHERECURRENTOF<游標(biāo)名>
表示修改或刪除的是最近一次取出的記錄,即游標(biāo)指針指向的記錄CURRENT形式的UPDATE語句和DELETE語句(續(xù))不能使用CURRENT形式的UPDATE語句和DELETE語句當(dāng)游標(biāo)定義中的SELECT語句帶有UNION或ORDERBY子句該SELECT語句相當(dāng)于定義了一個不可更新的視圖第八章數(shù)據(jù)庫編程8.1嵌入式SQL8.2過程化SQL8.3存儲過程和觸發(fā)器8.4ODBC編程1698.2.1過程化SQL的塊結(jié)構(gòu)基本的SQL是高度非過程化的語言。嵌入式SQL將SQL語句入程序設(shè)計語言,借助高級語言的控制功能實現(xiàn)過程化。過程化SQL是對SQL的擴(kuò)展,使其增加了過程化語句功能。過程化SQL程序的基本結(jié)構(gòu)是塊。所有的過程化SQL程序都是由塊組成的。這些塊之間可以互相嵌套,每個塊完成一個邏輯操作。圖9.2是過程化SQL塊的基本結(jié)構(gòu)。1708.2.2變量和常量的定義1.變量定義變量名數(shù)據(jù)類型[[NOTNULL]:=初值表達(dá)式]或變量名數(shù)據(jù)類型[[NOTNULL]初值表達(dá)式]2.常量的定義常量名數(shù)據(jù)類型CONSTANT:=常量表達(dá)式常量必須要給一個值,并且該值在存在期間或常量的作用域內(nèi)不能改變。如果試圖修改它,過程化SQL將返回一個異常。3.賦值語句變量名:=表達(dá)式1718.2.3流程控制過程化SQL提供了流程控制語句,主要有條件控制語句和循環(huán)控制語句。這些語句的語法、語義和一般的高級語言(如C語言)類似,這里只做概要的介紹。讀者使用時要參考具體產(chǎn)品手冊的語法規(guī)則。1、條件控制語句2.循環(huán)控制語句3.錯誤處理第八章數(shù)據(jù)庫編程8.1嵌入式SQL8.2過程化SQL8.3存儲過程和觸發(fā)器8.4ODBC編程8.3存儲過程和函數(shù)8.3.1存儲過程8.3.2觸發(fā)器8.3.1存儲過程過程化SQL塊類型命名塊編譯后保存在數(shù)據(jù)庫中,可以被反復(fù)調(diào)用,運(yùn)行速度較快,過程和函數(shù)是命名塊匿名塊每次執(zhí)行時都要進(jìn)行編譯,它不能被存儲到數(shù)據(jù)庫中,也不能在其他過程化SQL塊中調(diào)用使用SQL語言編寫訪問數(shù)據(jù)庫的代碼時,可用兩種方法存儲和執(zhí)行這些代碼。在客戶端存儲代碼,并創(chuàng)建向數(shù)據(jù)庫服務(wù)器發(fā)送的SQL命令,如在C#,Java等編程語言中嵌入SQL語句將SQL語句存儲在數(shù)據(jù)庫服務(wù)器端(具體數(shù)據(jù)庫的一個對象),然后由應(yīng)用程序調(diào)用執(zhí)行這些SQL語句。存儲在數(shù)據(jù)庫服務(wù)器端供客戶端調(diào)用執(zhí)行的SQL語句就是存儲過程。8.3.1存儲過程存儲過程(續(xù))1.存儲過程的優(yōu)點(diǎn)2.存儲過程的用戶接口存儲過程(續(xù))存儲過程:由過程化SQL語句書寫的過程,經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,使用時只要調(diào)用即可。存儲過程的優(yōu)點(diǎn)(1)運(yùn)行效率高(2)降低了客戶機(jī)和服務(wù)器之間的通信量 (3)方便實施企業(yè)規(guī)則存儲過程(續(xù))存儲過程的用戶接口(1)創(chuàng)建存儲過程(2)執(zhí)行存儲過程(3)修改存儲過程(4)刪除存儲過程8.3.2觸發(fā)器觸發(fā)器(Trigger)是一種特殊類型的存儲過程。與其他存儲過程類似,它也由Transact-SQL語句組成,可以實現(xiàn)一定的功能;不同的是,觸發(fā)器的執(zhí)行不能通過名稱調(diào)用來完成,而是當(dāng)用戶對數(shù)據(jù)庫發(fā)生事件(如添加、刪除、修改數(shù)據(jù))時,將會自動觸發(fā)與該事件相關(guān)的觸發(fā)器,使其自動執(zhí)行。觸發(fā)器不允許帶參數(shù),它的定義與表緊密相連,觸發(fā)器可以作為表的一部分。8.3.2觸發(fā)器在SQLServer中,觸發(fā)器可分為兩大類:DML觸發(fā)器和DDL觸發(fā)器。1.DML觸發(fā)器2.DDL觸發(fā)器第八章數(shù)據(jù)庫編程8.1嵌入式SQL8.2過程化SQL8.3存儲過程和函數(shù)8.4ODBC編程8.4ODBC編程ODBC優(yōu)點(diǎn)移植性好能同時訪問不同的數(shù)據(jù)庫共享多個數(shù)據(jù)資源8.4ODBC編程8.4.1ODBC概述8.4.2ODBC工作原理概述8.4.3ODBCAPI基礎(chǔ)8.4.4ODBC的工作流程8.4.1ODBC概述ODBC產(chǎn)生的原因由于不同的數(shù)據(jù)庫管理系統(tǒng)的存在,在某個關(guān)系數(shù)據(jù)庫管理系統(tǒng)下編寫的應(yīng)用程序就不能在另一個關(guān)系數(shù)據(jù)庫管理系統(tǒng)下運(yùn)行許多應(yīng)用程序需要共享多個部門的數(shù)據(jù)資源,訪問不同的關(guān)系數(shù)據(jù)庫管理系統(tǒng)ODBC概述(續(xù))ODBC是微軟公司開放服務(wù)體系(WindowsOpenServicesArchitecture,WOSA)中有關(guān)數(shù)據(jù)庫的一個組成部分提供了一組訪問數(shù)據(jù)庫的應(yīng)用程序編程接口(ApplicationProgrammingInterface,API)ODBC約束力規(guī)范應(yīng)用開發(fā)規(guī)范關(guān)系數(shù)據(jù)庫管理系統(tǒng)應(yīng)用接口8.4ODBC編程8.4.1ODBC概述8.4.2ODBC工作原理概述8.4.3ODBCAPI基礎(chǔ)8.4.4ODBC的工作流程8.4.2ODBC工作原理概述ODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)1.用戶應(yīng)用程序2.ODBC驅(qū)動程序管理器3.數(shù)據(jù)庫驅(qū)動程序4.數(shù)據(jù)源ODBC工作原理概述(續(xù))數(shù)據(jù)源KingbaseES數(shù)據(jù)源Oracle數(shù)據(jù)源SQLServer用戶應(yīng)用程序ODBC應(yīng)用程序編程接口ODBC驅(qū)動程序管理器數(shù)據(jù)庫驅(qū)動程序2數(shù)據(jù)庫驅(qū)動程序1數(shù)據(jù)庫驅(qū)動程序3…網(wǎng)絡(luò)1.用戶應(yīng)用程序ODBC應(yīng)用程序包括的內(nèi)容請求連接數(shù)據(jù)庫向數(shù)據(jù)源發(fā)送SQL語句為SQL語句執(zhí)行結(jié)果分配存儲空間,定義所讀取的數(shù)據(jù)格式獲取數(shù)據(jù)庫操作結(jié)果或處理錯誤進(jìn)行數(shù)據(jù)處理并向用戶提交處理結(jié)果請求事務(wù)的提交和回滾操作斷開與數(shù)據(jù)源的連接2.ODBC驅(qū)動程序管理器驅(qū)動程序管理器:用來管理各種驅(qū)動程序包含在ODBC32.DLL中管理應(yīng)用程序和驅(qū)動程序之間的通信建立、配置或刪除數(shù)據(jù)源,并查看系統(tǒng)當(dāng)前所安裝的數(shù)據(jù)庫ODBC驅(qū)動程序ODBC驅(qū)動程序管理器(續(xù))主要功能:裝載ODBC驅(qū)動程序選擇和連接正確的驅(qū)動程序管理數(shù)據(jù)源檢查ODBC調(diào)用參數(shù)的合法性記錄ODBC函數(shù)的調(diào)用等3.數(shù)據(jù)庫驅(qū)動程序ODBC通過驅(qū)動程序來提供應(yīng)用系統(tǒng)與數(shù)據(jù)庫平臺的獨(dú)立性O(shè)DBC應(yīng)用程序不能直接存取數(shù)據(jù)庫其各種操作請求由驅(qū)動程序管理器提交給某個關(guān)系數(shù)據(jù)庫管理系統(tǒng)的ODBC驅(qū)動程序通過調(diào)用驅(qū)動程序所支持的函數(shù)來存取數(shù)據(jù)庫數(shù)據(jù)庫的操作結(jié)果也通過驅(qū)動程序返回給應(yīng)用程序如果應(yīng)用程序要操縱不同的數(shù)據(jù)庫,就要動態(tài)地鏈接到不同的驅(qū)動程序上4.ODBC數(shù)據(jù)源管理數(shù)據(jù)源:是最終用戶需要訪問的數(shù)據(jù),包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,是一種數(shù)據(jù)連接的抽象ODBC數(shù)據(jù)源管理(續(xù))數(shù)據(jù)源對最終用戶是透明的ODBC給每個被訪問的數(shù)據(jù)源指定唯一的數(shù)據(jù)源名(DataSourceName,簡稱DSN),并映射到所有必要的、用來存取數(shù)據(jù)的低層軟件在連接中,用數(shù)據(jù)源名來代表用戶名、服務(wù)器名、所連接的數(shù)據(jù)庫名等最終用戶無須知道數(shù)據(jù)庫管理系統(tǒng)或其他數(shù)據(jù)管理軟件、網(wǎng)絡(luò)以及有關(guān)ODBC驅(qū)動程序的細(xì)節(jié)8.4ODBC編程8.4.1ODBC概述8.4.2ODBC工作原理概述8.4.3ODBCAPI基礎(chǔ)8.4.4ODBC的工作流程8.4.3ODBCAPI基礎(chǔ)ODBC應(yīng)用程序編程接口的一致性API一致性包含核心級、擴(kuò)展1級、擴(kuò)展2級語法一致性包含最低限度SQL語法級、核心SQL語法級、擴(kuò)展SQL語法級ODBCAPI基礎(chǔ)(續(xù))1.函數(shù)概述2.句柄及其屬性3.數(shù)據(jù)類型1.函數(shù)概述ODBC3.0標(biāo)準(zhǔn)提供了76個函數(shù)接口分配和釋放環(huán)境句柄、連接句柄、語句句柄連接函數(shù)(SQLDriverconnect等)與信息相關(guān)的函數(shù)(SQLGetinfo、SQLGetFuction等)事務(wù)處理函數(shù)(如SQLEndTran)執(zhí)行相關(guān)函數(shù)(SQLExecdirect、SQLExecute等)編目函數(shù),ODBC3.0提供了11個編目函數(shù),如SQLTables、SQLColumn等。應(yīng)用程序可以通過對編目函數(shù)的調(diào)用來獲取數(shù)據(jù)字典的信息,如權(quán)限、表結(jié)構(gòu)等2.句柄及其屬性句柄是32位整數(shù)值,代表一個指針ODBC3.0中句柄分類環(huán)境句柄連接句柄語句句柄描述符句柄句柄及其屬性(續(xù))應(yīng)用程序句柄之間的關(guān)系每個ODBC應(yīng)用程序需要建立一個ODBC環(huán)境,分配一個環(huán)境句柄,存取數(shù)據(jù)的全局性背景,如環(huán)境狀態(tài)、當(dāng)前環(huán)境狀態(tài)診斷、當(dāng)前在環(huán)境上分配的連接句柄等一個環(huán)境句柄可以建立多個連接句柄,每一個連接句柄實現(xiàn)與一個數(shù)據(jù)源之間的連接句柄及其屬性(續(xù))ODBC應(yīng)用程序環(huán)境句柄連接句柄語句句柄數(shù)據(jù)源描述符句柄111n1n111n句柄及其屬性(續(xù))應(yīng)用程序句柄之間的關(guān)系(續(xù))在一個連接中可以建立多個語句句柄,它不只是一個SQL語句,還包括SQL語句產(chǎn)生的結(jié)果集以及相關(guān)的信息等在ODBC3.0中又提出了描述符句柄的概念,它是描述SQL語句的參數(shù)、結(jié)果集列的元數(shù)據(jù)集合3.數(shù)據(jù)類型ODBC數(shù)據(jù)類型SQL數(shù)據(jù)類型:用于數(shù)據(jù)源C數(shù)據(jù)類型:用于應(yīng)用程序的C代碼應(yīng)用程序可以通過SQLGetTypeInfo來獲取不同的驅(qū)動程序?qū)τ跀?shù)據(jù)類型的支持情況8.4ODBC編程8.4.1ODBC概述8.4.2ODBC工作原理概述8.4.3ODBCAPI基礎(chǔ)8.4.4ODBC的工作流程8.4.4ODBC的工作流程ODBC的工作流程Clicktoeditcompanyslogan.謝謝206《數(shù)據(jù)庫原理與應(yīng)用》第9章數(shù)據(jù)庫安全性207第9章數(shù)據(jù)庫安全性9.1數(shù)據(jù)庫安全性概述9.2數(shù)據(jù)庫安全控制方法9.3存取控制內(nèi)容導(dǎo)學(xué)209學(xué)習(xí)目標(biāo)了解數(shù)據(jù)庫系統(tǒng)存在的不安全因素了解數(shù)據(jù)庫安全控制的主要方法理解并掌握自主存取控制技術(shù)和方法理解強(qiáng)制存取控制技術(shù)學(xué)習(xí)重點(diǎn)數(shù)據(jù)庫系統(tǒng)的安全控制方法數(shù)據(jù)庫管理系統(tǒng)的存取控制方法思政導(dǎo)學(xué)210關(guān)鍵詞:數(shù)據(jù)庫安全性,安全控制方法,存取控制技術(shù)。內(nèi)容要意:數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)中大量集中存放,并且為多個終端用戶直接共享,這些數(shù)據(jù)目前已經(jīng)成為個人、企業(yè)或國家的無形資產(chǎn),因此數(shù)據(jù)庫的安全性問題更為突出。系統(tǒng)安全保護(hù)措施是否有效是衡量數(shù)據(jù)庫系統(tǒng)性能的主要指標(biāo)之一。本章首先討論引起數(shù)據(jù)庫不安全的因素有哪些,接著介紹數(shù)據(jù)庫安全控制的主要方法,最后重點(diǎn)介紹數(shù)據(jù)庫的訪問控制技術(shù)。思政點(diǎn)播:通過一些著名的黑客事件來體現(xiàn)數(shù)據(jù)庫系統(tǒng)存在的不安全因素及其帶來的各種嚴(yán)重問題;通過世界上“頭號電腦黑客”凱文·米特尼克的經(jīng)歷,引出計算機(jī)專業(yè)人員應(yīng)當(dāng)具備的職業(yè)道德規(guī)范;通過我國的信息安全標(biāo)準(zhǔn)引出工匠精神。思政目標(biāo):培養(yǎng)學(xué)生勤奮刻苦鉆研的專業(yè)探究精神;加強(qiáng)學(xué)生的計算機(jī)系統(tǒng)安全意識,提升職業(yè)道德;引導(dǎo)學(xué)生在工作學(xué)習(xí)中要“尊重標(biāo)準(zhǔn),向標(biāo)準(zhǔn)看齊”;培養(yǎng)學(xué)生解決問題精益求精的精神。9.1數(shù)據(jù)庫安全性
問題的提出數(shù)據(jù)庫的一大特點(diǎn)是數(shù)據(jù)可以共享數(shù)據(jù)共享必然帶來數(shù)據(jù)庫的安全性問題數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)共享不能是無條件的共享例:軍事秘密、國家機(jī)密、新產(chǎn)品實驗數(shù)據(jù)、市場需求分析、市場營銷策略、銷售計劃、客戶檔案、醫(yī)療檔案、銀行儲蓄數(shù)據(jù)數(shù)據(jù)庫安全性數(shù)據(jù)庫安全性(續(xù))數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫以防止不合法使用所造成的數(shù)據(jù)泄露、更改或破壞。系統(tǒng)安全保護(hù)措施是否有效是數(shù)據(jù)庫系統(tǒng)主要的性能指標(biāo)之一。9.1數(shù)據(jù)庫安全性概述9.1.1數(shù)據(jù)庫的不安全因素9.1.2數(shù)據(jù)庫安全性控制1.非授權(quán)用戶對數(shù)據(jù)庫的惡意存取和破壞一些黑客(Hacker)和犯罪分子在用戶存取數(shù)據(jù)庫時獵取用戶名和用戶口令,然后假冒合法用戶偷取、修改甚至破壞用戶數(shù)據(jù)。數(shù)據(jù)庫管理系統(tǒng)提供的安全措施主要包括用戶身份鑒別、存取控制和視圖等技術(shù)。9.1.1數(shù)據(jù)庫的不安全因素2.數(shù)據(jù)庫中重要或敏感的數(shù)據(jù)被泄露黑客和敵對分子千方百計盜竊數(shù)據(jù)庫中的重要數(shù)據(jù),一些機(jī)密信息被暴露。數(shù)據(jù)庫管理系統(tǒng)提供的主要技術(shù)有強(qiáng)制存取控制、數(shù)據(jù)加密存儲和加密傳輸?shù)?。審計日志分析?shù)據(jù)庫的不安全因素(續(xù))數(shù)據(jù)庫的不安全因素(續(xù))3.安全環(huán)境的脆弱性數(shù)據(jù)庫的安全性與計算機(jī)系統(tǒng)的安全性緊密聯(lián)系計算機(jī)硬件、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性建立一套可信(Trusted)計算機(jī)系統(tǒng)的概念和標(biāo)準(zhǔn)9.1數(shù)據(jù)庫安全性概述9.1.1數(shù)據(jù)庫的不安全因素9.1.2數(shù)據(jù)庫安全性控制9.1.2數(shù)據(jù)庫安全性控制計算機(jī)系統(tǒng)中,安全措施是一級一級層層設(shè)置計算機(jī)系統(tǒng)的安全模型系統(tǒng)根據(jù)用戶標(biāo)識鑒定用戶身份,合法用戶才準(zhǔn)許進(jìn)入計算機(jī)系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)還要進(jìn)行存取控制,只允許用戶執(zhí)行合法操作操作系統(tǒng)有自己的保護(hù)措施數(shù)據(jù)以密碼形式存儲到數(shù)據(jù)庫中存取控制流程首先,數(shù)據(jù)庫管理系統(tǒng)對提出SQL訪問請求的數(shù)據(jù)庫用戶進(jìn)行身份鑒別,防止不可信用戶使用系統(tǒng)。然后,在SQL處理層進(jìn)行自主存取控制和強(qiáng)制存取控制,進(jìn)一步可以進(jìn)行推理控制。還可以對用戶訪問行為和系統(tǒng)關(guān)鍵操作進(jìn)行審計,對異常用戶行為進(jìn)行簡單入侵檢測。數(shù)據(jù)庫安全性控制(續(xù))數(shù)據(jù)庫安全性控制(續(xù))數(shù)據(jù)庫安全性控制的常用方法用戶標(biāo)識和鑒定存取控制視圖審計數(shù)據(jù)加密第9章數(shù)據(jù)庫安全性9.1數(shù)據(jù)庫安全性概述9.2數(shù)據(jù)庫安全控制方法9.3存取控制9.2數(shù)據(jù)庫安全控制方法9.2.1用戶身份鑒別9.2.2存取控制9.2.3視圖機(jī)制9.2.4審計9.2.5數(shù)據(jù)加密9.2.1用戶身份鑒別用戶身份鑒別(Identification&Authentication)系統(tǒng)提供的最外層安全保護(hù)措施用戶標(biāo)識:由用戶名和用戶標(biāo)識號組成(用戶標(biāo)識號在系統(tǒng)整個生命周期內(nèi)唯一)用戶身份鑒別(續(xù))用戶身份鑒別的方法1.靜態(tài)口令鑒別靜態(tài)口令一般由用戶自己設(shè)定,這些口令是靜態(tài)不變的2.動態(tài)口令鑒別口令是動態(tài)變化的,每次鑒別時均需使用動態(tài)產(chǎn)生的新口令登錄數(shù)據(jù)庫管理系統(tǒng),即采用一次一密的方法3.生物特征鑒別通過生物特征進(jìn)行認(rèn)證的技術(shù),生物特征如指紋、虹膜和掌紋等9.2數(shù)據(jù)庫安全控制方法9.2.1用戶身份鑒別9.2.2存取控制9.2.3視圖機(jī)制9.2.4審計9.2.5數(shù)據(jù)加密9.2.2存取控制存取控制機(jī)制組成定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中用戶對某一數(shù)據(jù)對象的操作權(quán)力稱為權(quán)限
DBMS提供適當(dāng)?shù)恼Z言來定義用戶權(quán)限,存放在數(shù)據(jù)字典中,稱做安全規(guī)則或授權(quán)規(guī)則合法權(quán)限檢查用戶發(fā)出存取數(shù)據(jù)庫操作請求DBMS查找數(shù)據(jù)字典,進(jìn)行合法權(quán)限檢查用戶權(quán)限定義和合法權(quán)檢查機(jī)制一起組成了數(shù)據(jù)庫管理系統(tǒng)的存取控制子系統(tǒng)存取控制(續(xù))常用存取控制方法自主存取控制(DiscretionaryAccessControl,簡稱DAC)
C2級用戶對不同的數(shù)據(jù)對象有不同的存取權(quán)限不同的用戶對同一對象也有不同的權(quán)限用戶還可將其擁有的存取權(quán)限轉(zhuǎn)授給其他用戶存取控制(續(xù))常用存取控制方法(續(xù))強(qiáng)制存取控制(MandatoryAccessControl,簡稱MAC)B1級每一個數(shù)據(jù)對象被標(biāo)以一定的密級每一個用戶也被授予某一個級別的許可證對于任意一個對象,只有具有合法許可證的用戶才可以存取9.2數(shù)據(jù)庫安全控制方法9.2.1用戶身份鑒別9.2.2存取控制9.2.3視圖機(jī)制9.2.4審計9.2.5數(shù)據(jù)加密9.2.3視圖機(jī)制把要保密的數(shù)據(jù)對無權(quán)存取這些數(shù)據(jù)的用戶隱藏起來,對數(shù)據(jù)提供一定程度的安全保護(hù)間接地實現(xiàn)支持存取謂詞的用戶權(quán)限定義視圖機(jī)制(續(xù))[例9.1]建立計算機(jī)學(xué)院學(xué)生的視圖,把對該視圖的SELECT權(quán)限授于馬娟,把該視圖上的插入權(quán)限授于劉濤。先建立計算機(jī)學(xué)院學(xué)生的視圖JSJ_StudentCREATEVIEWJSJ_StudentASSELECT*FROMStudentWHEREDno='DP02';視圖機(jī)制(續(xù))在視圖上進(jìn)一步定義存取權(quán)限
GRANTSELECTONJSJ_StudentTO馬娟;
GRANTINSERTONJSJ_StudentTO劉濤;9.2數(shù)據(jù)庫安全控制方法9.2.1用戶身份鑒別9.2.2存取控制9.2.3視圖機(jī)制9.2.4審計9.2.5數(shù)據(jù)加密9.2.4審計什么是審計啟用一個專用的審計日志(AuditLog)將用戶對數(shù)據(jù)庫的所有操作記錄在上面審計員利用審計日志
監(jiān)控數(shù)據(jù)庫中的各種行為,找出非法存取數(shù)據(jù)的人、時間和內(nèi)容C2以上安全級別的DBMS必須具有審計功能審計(續(xù))審計功能的可選性審計很費(fèi)時間
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年貴州事業(yè)單位聯(lián)考北京積水潭醫(yī)院貴州醫(yī)院招聘16人備考題庫附參考答案詳解(完整版)
- 2025“銅行大冶智匯有色”中色大冶校園招聘筆試歷年典型考點(diǎn)題庫附帶答案詳解2套試卷
- 2026上半年貴州事業(yè)單位聯(lián)考貴州傳媒職業(yè)學(xué)院招聘12人備考題庫附參考答案詳解(滿分必刷)
- 2026上半年安徽事業(yè)單位聯(lián)考黃山市市直單位招聘38人備考題庫帶答案詳解(b卷)
- 2026年1月廣東深圳市第七高級中學(xué)招聘專任教師4人備考題庫附參考答案詳解(綜合卷)
- 企業(yè)人力資源戰(zhàn)略規(guī)劃策略手冊
- 醫(yī)療廢物處理操作與安全管理手冊(標(biāo)準(zhǔn)版)
- 電信網(wǎng)絡(luò)故障診斷與處理手冊
- 2026四川德陽城市軌道交通職業(yè)學(xué)院春季學(xué)期招聘140人備考題庫附答案詳解(預(yù)熱題)
- 企業(yè)內(nèi)部審計合作手冊
- 48個國際音標(biāo)表教學(xué)資料
- 校園文化建設(shè)可行性報告
- 2025年春人教版(2024)小學(xué)數(shù)學(xué)一年級下冊教學(xué)計劃
- 特種設(shè)備生產(chǎn)(含安裝、改造、維修)單位質(zhì)量安全風(fēng)險管控清單
- 五年級下冊字帖筆順
- 租賃汽車的二手車價值評估模型
- 非遺文化媽祖祭典文化知識
- Charter開發(fā)與立項流程(CDP)
- JTGT F20-2015 公路路面基層施工技術(shù)細(xì)則
- 七年級下冊《6.1 第3課時 平方根》課件
- GB/T 12250-2023蒸汽疏水閥標(biāo)志
評論
0/150
提交評論