軟件工程概論課后習題答案(第二版)_第1頁
軟件工程概論課后習題答案(第二版)_第2頁
軟件工程概論課后習題答案(第二版)_第3頁
軟件工程概論課后習題答案(第二版)_第4頁
軟件工程概論課后習題答案(第二版)_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

軟件工程概論課后習題答案(第二版)第1章軟件與軟件工程的概念1.1舉出你所知道的應用軟件的例子。辦公軟件、游戲軟件、財務軟件、銀行軟件、人事管理軟件、工資管理軟件、學籍管理軟件等。1.2認為“軟件就是程序,軟件開發(fā)就是編程序?!边@種觀點是否正確?為什么?認為“軟件就是程序,軟件開發(fā)就是編程序?!边@種觀點是錯誤的。首先,軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序,數(shù)據(jù)及其相關(guān)文檔的完整集合,程序只是軟件的組成部分之一;其次,在軟件開發(fā)中,編程只是軟件開發(fā)過程的一個階段。1.3如果將軟件開發(fā)比作高樓大廈的建造,可以將軟件的設(shè)計比作什么?可以將軟件的設(shè)計比作建筑設(shè)計,軟件設(shè)計的成果相當于建筑設(shè)計的設(shè)計圖紙。1.4什么是軟件危機?它有哪些典型表現(xiàn)?為什么會出現(xiàn)軟件危機?軟件危機:軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。典型表現(xiàn):(1)對軟件開發(fā)成本和進度的估計常常很不準確。(2)用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。(3)軟件產(chǎn)品的質(zhì)量往往靠不住。(4)軟件常常是不可維護的。(5)軟件通常沒有適當?shù)奈臋n資料。(6)軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。(7)軟件開發(fā)生產(chǎn)率提高的速度,既跟不上硬件的發(fā)展速度,也遠遠跟不上計算機應用迅速普及深入的趨勢。產(chǎn)生軟件危機的原因:除了軟件本身的特點,其原因主要有以下幾個方面:(1)缺乏軟件開發(fā)的經(jīng)驗和有關(guān)軟件開發(fā)數(shù)據(jù)的積累,使得開發(fā)工作計劃很難制定。(2)軟件人員與用戶的交流存在障礙,使得獲取的需求不充分或存在錯誤。(3)軟件開發(fā)過程不規(guī)范。如,沒有真正了解用戶的需求就開始編程序。(4)隨著軟件規(guī)模的增大,其復雜性往往會呈指數(shù)級升高。需要很多人分工協(xié)作,不僅涉及技術(shù)問題,更重要的是必須有科學嚴格的管理。(5)缺少有效的軟件評測手段,提交給用戶的軟件的質(zhì)量不能完全保證。1.5什么是軟件工程?軟件工程是指導計算機軟件開發(fā)和維護的工程學科。采用工程的概念、原理、技術(shù)和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合起來,以經(jīng)濟地開發(fā)出高質(zhì)量的軟件并有效地維護它,這就是軟件工程。1.6簡述軟件生存期由哪些主要的階段組成,每一階段的主要任務是什么?(1)問題定義與可行性研究:問題定義必須回答的關(guān)鍵問題是:“要解決的問題是什么”。可行性研究要回答的關(guān)鍵問題是:“在成本和時間的限制條件下能否解決問題?是否值得做?”。(2)需求分析:這個階段的任務仍然不是具體地解決客戶的問題,而是準確地回答“目標系統(tǒng)必須做什么”這個問題。(3)軟件設(shè)計:本階段要回答的關(guān)鍵問題是“目標系統(tǒng)如何做?”為此,必須在設(shè)計階段中制定設(shè)計方案,把已確定的各項需求轉(zhuǎn)換成相應的軟件體系結(jié)構(gòu)。結(jié)構(gòu)中的每一組成部分都是意義明確的構(gòu)件,此即所謂概要設(shè)計。進而具體描述每個構(gòu)件所要完成的工作,為源程序編寫打下基礎(chǔ),此即所謂詳細設(shè)計。(4)程序編碼和單元測試:本階段要解決的問題是“正確地實現(xiàn)已做的設(shè)計”,為此,需要選擇合適的編程語言,把軟件設(shè)計轉(zhuǎn)換成計算機可以接受的程序代碼,并對程序結(jié)構(gòu)中的各個模塊進行單元測試,然后運用調(diào)試的手段排除測試中發(fā)現(xiàn)的錯誤。要求編寫出的程序應當是結(jié)構(gòu)良好、清晰易讀的,且與設(shè)計相一致的。(5)集成測試和系統(tǒng)測試:集成測試的任務是將已測試過的模塊按設(shè)計規(guī)定的順序組裝起來,在組裝的過程中檢查程序連接的問題。系統(tǒng)測試的任務是根據(jù)需求規(guī)格說明的要求,對必須實現(xiàn)的各項需求,逐項進行確認,判定已開發(fā)的軟件是否符合用戶需求,能否交付用戶使用。為了更有效地發(fā)現(xiàn)系統(tǒng)中的問題,通常這個階段的工作由開發(fā)人員、用戶之外的第三者承擔。(6)運行維護:已交付的軟件投入正式使用,便進入運行維護階段。這一階段可能持續(xù)若干年。軟件在運行中可能由于多方面的原因,需要對它進行維護。通常有四種類型的維護:改正性維護、適應性維護、完善性維護和預防性維護。1.7常見的軟件生存期模型主要有哪些?每種模型的優(yōu)缺點是什么?常見的軟件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型和統(tǒng)一過程。(1)瀑布模型優(yōu)點:可強迫開發(fā)人員采用規(guī)范化的方法;嚴格地規(guī)定了每個階段必須提交的文檔;要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證。缺點:由于瀑布模型幾乎完全依賴于書面的規(guī)格說明,很可能導致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要;用戶往往需要等待很長時間才能看到可以運行的程序;適應需求變更的能力比較差。適用范圍:瀑布模型只適用于項目開始時需求已確定的情況。(2)快速原型模型優(yōu)點:有助于滿足用戶的真實需求;原型系統(tǒng)已經(jīng)通過與用戶的交互而得到驗證,據(jù)此產(chǎn)生的規(guī)格說明文檔能夠正確地描述用戶需求。缺點:要求開發(fā)人員快速建立原型。適用范圍:適用于需求不明確的軟件項目。(3)增量模型優(yōu)點:●能在較短時間內(nèi)向用戶提交可完成一些基本功能的產(chǎn)品,即從第一個構(gòu)件交付之日起,用戶就能做一些有用的工作?!裰鸩皆黾赢a(chǎn)品的功能可以使用戶有較充裕的時間學習和適應新產(chǎn)品,從而減少一個全新的軟件可能給用戶組織帶來的沖擊。●項目失敗的風險較低,雖然在某些增量構(gòu)件中可能遇到一些問題,但其他增量構(gòu)件將能夠成功地交付給客戶?!駜?yōu)先級最高的服務首先交付,然后再將其他增量構(gòu)件逐次集成進來。因此,最重要的系統(tǒng)服務將接受最多的測試。缺點:●在把每個新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)中時,必須不破壞原來已經(jīng)開發(fā)出的產(chǎn)品?!褴浖w系結(jié)構(gòu)必須是開放的,即向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過程必須簡單、方便。適用范圍:適用于工期緊張、功能可以劃分、比較復雜的軟件項目。軟件工程師必須有較高的技術(shù)水平,能夠設(shè)計出開放的軟件體系結(jié)構(gòu)。(4)螺旋模型優(yōu)點:●對可選方案和約束條件的強調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個重要目標;●減少了過多測試或測試不足所帶來的風險;●在螺旋模型中維護只是模型的另一個周期,在維護和開發(fā)之間并沒有本質(zhì)區(qū)別。缺點:螺旋模型是風險驅(qū)動的,因此要求軟件開發(fā)人員必須具有豐富的風險評估經(jīng)驗和這方面的專門知識,否則將出現(xiàn)真正的風險:當項目實際上正在走向災難時,開發(fā)人員可能還以為一切正常。適用范圍:適用于內(nèi)部開發(fā)的大型軟件(開發(fā)周期長、比較容易受到社會因素影響的軟件項目),軟件開發(fā)人員具有豐富的風險評估知識和經(jīng)驗。(5)噴泉模型優(yōu)點:在開發(fā)過程中使用統(tǒng)一的概念和方法,各階段之間沒有明顯的界限,容易實現(xiàn)各個開發(fā)過程的多次反復迭代,達到了認識的逐步深化,降低了出錯的可能性。缺點:由于各個階段之間的界線不明確,容易造成軟件開發(fā)過程的無序。適用范圍:適用于面向?qū)ο蟮能浖_發(fā)。(6)統(tǒng)一過程優(yōu)點:提高了團隊生產(chǎn)力,在迭代的開發(fā)過程、需求管理、基于組件的體系結(jié)構(gòu)、可視化軟件建模、驗證軟件質(zhì)量及控制軟件變更等方面,針對所有關(guān)鍵的開發(fā)活動為每個開發(fā)成員提供了必要的準則、模板和工具指導,并確保全體成員共享相同的知識基礎(chǔ)。它建立了簡潔和清晰的過程結(jié)構(gòu),為開發(fā)過程提供了較大的通用性。缺點:RUP只是一個開發(fā)過程,并沒有涵蓋軟件過程的全部內(nèi)容,例如它缺少關(guān)于軟件運行和支持等方面的內(nèi)容;此外,它沒有支持多項目的開發(fā)結(jié)構(gòu),這在一定程度上降低了在開發(fā)組織內(nèi)大范圍實現(xiàn)重用的可能性。適用范圍:適用于基于構(gòu)件的軟件開發(fā)。第2章軟件工程方法與工具2.1軟件工程的三種基本要素是什么,各自的作用是什么?軟件工程的三種基本要素是方法、工具和過程。(1)軟件工程方法(method)為建造軟件提供技術(shù)上的解決方法(“如何做”)。目前使用得最廣泛的方法是傳統(tǒng)方法(結(jié)構(gòu)化方法)和面向?qū)ο蠓椒ā?2)工具為方法的運用提供自動的或半自動的軟件支撐環(huán)境。(3)過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。2.2簡述傳統(tǒng)方法和面向?qū)ο蠓椒ǖ奶攸c。(1)傳統(tǒng)方法的特點傳統(tǒng)方法也稱為生命周期方法或結(jié)構(gòu)化范型。它采用結(jié)構(gòu)化技術(shù)來完成軟件開發(fā)的各項任務。這種方法學把軟件生命周期的全過程依次劃分為若干個階段,然后順序地逐步完成每個階段的任務。每一個階段的開始和結(jié)束都有嚴格的標準,對于任何兩個相鄰的階段而言,前一個階段的結(jié)束標準就是后一階段的開始標準。傳統(tǒng)方法的主要缺點是在適應需求變化方面不夠靈活,另外,結(jié)構(gòu)化方法要么面向行為,要么面向數(shù)據(jù),缺乏使兩者有機結(jié)合的機制。(2)面向?qū)ο蠓椒ǖ奶攸c面向?qū)ο蠓椒ò褦?shù)據(jù)和行為看成同等重要,是將數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法,這也是面向?qū)ο蠓椒ㄅc傳統(tǒng)方法的重要區(qū)別。面向?qū)ο蠓椒ǖ某霭l(fā)點和基本原則,是盡量模擬人類習慣的思維方式,使開發(fā)軟件的方法和過程盡可能接近人類認識問題和解決問題的方法與過程,從而使描述問題的問題空間與其解空間在結(jié)構(gòu)上盡可能一致。對于大型、復雜及交互性比較強的系統(tǒng),使用面向?qū)ο蠓椒ǜ袃?yōu)勢。2.3形式化方法的特點是什么?形式化方法的主要特點是:(1)軟件需求規(guī)格說明被細化為用數(shù)學記號表達的詳細的形式化規(guī)格說明;(2)設(shè)計、實現(xiàn)和單元測試等開發(fā)過程由一個變換開發(fā)過程代替。通過一系列變換將形式的規(guī)格說明細化成為程序。2.5安裝RationalRose2000/2002/2003,并練習基本操作。略。第3章軟件需求獲取與結(jié)構(gòu)化分析方法3.1為什么結(jié)構(gòu)化分析要叫“結(jié)構(gòu)化”?有其他可替代的術(shù)語嗎?“結(jié)構(gòu)化”一詞應來源于“結(jié)構(gòu)化程序設(shè)計”,先有“結(jié)構(gòu)化程序設(shè)計”的思想,后有結(jié)構(gòu)化設(shè)計及結(jié)構(gòu)化分析。有時稱傳統(tǒng)的分析方法,指的就是結(jié)構(gòu)化分析方法。3.2頂層數(shù)據(jù)流圖或稱環(huán)境圖的作用是什么?頂層數(shù)據(jù)流圖(或稱環(huán)境圖)僅包括一個數(shù)據(jù)處理過程,也就是要開發(fā)的目標系統(tǒng)。其作用如下:(1)確定系統(tǒng)在其環(huán)境中的位置,與系統(tǒng)有聯(lián)系的外部實體(包括硬件、軟件、組織機構(gòu)及人)有哪些。(2)通過確定系統(tǒng)的輸入和輸出與外部實體的關(guān)系確定系統(tǒng)的邊界,也就是要確定哪些功能或處理屬于系統(tǒng)范圍之內(nèi),哪些屬于系統(tǒng)范圍之外,需要由其他系統(tǒng)處理或人工處理。3.3在對數(shù)據(jù)流圖進行分解時需要注意哪些問題?在對數(shù)據(jù)流圖進行分解時,需要注意以下兩個問題:(1)當對數(shù)據(jù)流圖分層細化時必須保持信息連續(xù)性,也就是說,當把一個處理分解為一系列處理時,分解前和分解后的輸入/輸出數(shù)據(jù)流必須相同。(2)注意分層細化時對編號的處理方法。3.4銀行存款業(yè)務如下:客戶到銀行柜臺存款時,首先填寫存款單(包括帳號、姓名、存款金額、存款類型),如果還沒有開戶,則需要先開戶,填寫開戶單(包括姓名、身份證號、地址、電話、是否留密碼)。填寫完存款單或開戶單后,交給營業(yè)員,營業(yè)員將存款單或開戶單信息輸入計算機,系統(tǒng)記錄開戶信息或存款單信息,如果是開戶并選擇留密碼,則需要客戶輸入密碼。最后印出開戶單或存款單給用戶。請畫出銀行存款業(yè)務的分層數(shù)據(jù)流圖(至少畫出兩層)。(1)識別外部實體及輸入輸出數(shù)據(jù)流外部實體:儲戶、業(yè)務員。輸入數(shù)據(jù)流:存款單,開戶單,密碼??梢詫⒋婵顔魏烷_戶單抽象為事務。輸出數(shù)據(jù)流:存款單,開戶單。(2)頂層數(shù)據(jù)流圖(3)一層數(shù)據(jù)流圖對銀行儲蓄系統(tǒng)進行分解,從大的方面分解為接收事務、處理開戶、處理存款三部分,得到一層數(shù)據(jù)流圖。(4)二層數(shù)據(jù)流圖對“處理存款”及“處理開戶”進行進一步分解,得到二層數(shù)據(jù)流圖,即處理存款的數(shù)據(jù)流圖和處理開戶的數(shù)據(jù)流圖。處理存款的數(shù)據(jù)流圖處理開戶的數(shù)據(jù)流圖3.5按照以下描述,畫出ER圖。一本教材由許多章組成,每一章包含許多節(jié)、小結(jié)和習題組成,章和節(jié)都具有標題和序號屬性。ER圖如下:第4章結(jié)構(gòu)化設(shè)計方法4.1當你“編寫”程序時你設(shè)計軟件嗎?軟件設(shè)計和編碼有什么不同嗎?在“編寫”程序時并沒有設(shè)計軟件。軟件設(shè)計包括概要設(shè)計和詳細設(shè)計,編碼是將詳細設(shè)計中的過程描述轉(zhuǎn)換成用程序設(shè)計語言來描述。4.4是否存在一種情況:復雜問題需要較少的工作去解決?這樣的情況對模塊化觀點有什么影響?通過對復雜的問題進行合理分解,分解為若干個相對簡單及獨立的子問題,就可以用較少的工作去解決。這種情況能夠較好地支持模塊化的觀點,每個子問題用單獨的模塊去解決,模塊之間應該是高內(nèi)聚、低耦合的,這樣才能減少工作量,否則,雖然每個模塊的工作簡單了,但模塊之間的聯(lián)系很復雜,也增加了問題解決的難度和工作量。4.8用面向數(shù)據(jù)流的方法設(shè)計第3章習題3.4所描述的銀行存款業(yè)務的軟件結(jié)構(gòu),并使用改進方法對模塊結(jié)構(gòu)進行精化。(1)對第3章習題3.4給出的數(shù)據(jù)流圖進行精化,確定其邊界,如下圖所示。(2)對上圖按事務型數(shù)據(jù)流進行處理,完成第一級分解,得到頂層和一層模塊結(jié)構(gòu)圖。第一級分解后的結(jié)構(gòu)圖(3)完成第二級分解。對上圖所示的“輸入數(shù)據(jù)”、“輸出數(shù)據(jù)”和“調(diào)度”模塊進行分解,得到未經(jīng)精化的輸入結(jié)構(gòu)、輸出結(jié)構(gòu)和事務結(jié)構(gòu)。未經(jīng)精化的輸入結(jié)構(gòu)未經(jīng)精化的輸出結(jié)構(gòu)未經(jīng)精化的事務結(jié)構(gòu)將上面的三部分合在一起,得到初始的軟件結(jié)構(gòu),如下圖所示。初始軟件結(jié)構(gòu)圖(4)對軟件結(jié)構(gòu)進行精化。1)由于調(diào)度模塊下只有兩種事務,因此,可以將調(diào)度模塊合并到上級模塊中,如圖所示。將調(diào)度模塊合并到上級模塊后的軟件結(jié)構(gòu)2)“記錄密碼”模塊的作用范圍不在其控制范圍之內(nèi)(即“輸入密碼”模塊不在“記錄密碼”模塊的控制范圍之內(nèi)),需對其進行調(diào)整,如圖所示。3)提高模塊獨立性,對模塊結(jié)構(gòu)進行調(diào)整,如下圖所示。調(diào)整后的模塊結(jié)構(gòu)圖4.9將大的軟件劃分成模塊有什么好處?是不是模塊劃分得越小越好?劃分模塊的依據(jù)是什么?將大的軟件劃分成獨立命名且可獨立訪問的模塊,不同的模塊通常具有不同的功能或職責。這種方法有利于將復雜的問題簡單化,是分而治之策略的具體表現(xiàn)。盡管模塊分解可以簡化要解決的問題,但模塊分解并不是越小越好。當模塊數(shù)目增加時,每個模塊的規(guī)模將減小,開發(fā)單個模塊的成本確實減少了;但是,隨著模塊數(shù)目增加,模塊之間關(guān)系的復雜程度也會增加,設(shè)計模塊間接口所需要的工作量也將增加。劃分模塊的依據(jù)是,模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系。4.11結(jié)構(gòu)化程序設(shè)計禁止使用goto語句嗎?如果程序中使用了goto語句,是否就可以斷定它是非結(jié)構(gòu)化的?結(jié)構(gòu)化程序設(shè)計并不禁止使用goto語句。如果程序中使用了goto語句,并不能斷定它是非結(jié)構(gòu)化的。4.12對于給定的算法,如何判斷它是否是結(jié)構(gòu)化的?對于給定的算法,如果符合以下三條原則,就可以判斷它是結(jié)構(gòu)化的。(1)使用語言中的順序、選擇、重復等有限的基本控制結(jié)構(gòu)表示程序邏輯。

(2)選用的控制結(jié)構(gòu)只準許有一個入口和一個出口。

(3)程序語句組成容易識別的塊(Block),每塊只有一個入口和一個出口。4.13對于圖4-49所示的流程圖,試分別用N-S圖和PAD表示之。圖4-49流程圖對應的N-S圖如下:對應的PAD如下:4.14圖4-50所示的流程圖完成的功能是使用二分查找方法在table數(shù)組中找出值為item的數(shù)是否存在。(1)判斷此算法是否是結(jié)構(gòu)化的,說明理由。(2)若算法是非結(jié)構(gòu)化的,設(shè)計一個等價的結(jié)構(gòu)化算法,并用N-S圖表示。圖4-50二分查找算法的流程圖(1)不是結(jié)構(gòu)化的,最上面的循環(huán)有兩個出口,最下面的分支有三個入口。(2)等價的結(jié)構(gòu)化算法如下:或者或者4.15使用自頂向下、逐步細化方法設(shè)計算法,完成下列任務:產(chǎn)生一個1010的二維隨機整數(shù)方陣,先求出每一行的最大值和每一列的最小值;然后求10個最大值中的最小者,10個最小值中的最大者;最后求這兩個數(shù)之差的平方。(1)首先寫出下面的程序框架:main(){

定義1010的二維整數(shù)數(shù)組A,長度為10的一維數(shù)組B,C;建立1010的二維隨機整數(shù)數(shù)組A;---------------------1

求A中每一行的最大值數(shù)組B;---------------------2求A中每一列的最小值數(shù)組C;---------------------3求數(shù)組B中的最小值minOfB;---------------------4求數(shù)組C中的最大值maxOfC;---------------------5(minOfB-maxOfC)^2result;}

(2)對后面加標記的部分進行細化main(){

定義1010的二維整數(shù)數(shù)組A,長度為10的一維數(shù)組B,C;/*建立1010的二維隨機整數(shù)數(shù)組A*/--------------------1for(i=0;i<=9;i++)for(j=0;j<=9;j++)產(chǎn)生隨機整數(shù)A[i,j];

/*求A中每一行的最大值數(shù)組B*/---------------------2for(i=0;i<=9;i++){求數(shù)組A第i行的最大值B[i];--------------------------------------2.1}/*求A中每一列的最小值數(shù)組C*/---------------------3for(j=0;j<=9;j++){求數(shù)組A第j列的最小值C[j];--------------------------------------3.1}/*求數(shù)組B中的最小值minOfB*/---------------------4minOfB=B[0];for(i=1;i<=9;i++){if(minOfB<B[i]){minOfB=B[i];}}/*求數(shù)組C中的最大值maxOfC*/---------------------5maxOfC=C[0];for(i=1;i<=9;i++){if(maxOfC>C[i]){maxOfC=C[i];}}(minOfB-maxOfC)^2result;}

(3)下一步可以繼續(xù)對2.1和3.1進行細化。具體略。4.16設(shè)計算法完成下列任務:輸入一段英文后,無論輸入的文字都是大寫,還是小寫,或大小寫任意混合,都能將其整理成除每個句子開頭字母是大寫外,其他都是小寫的文字。假設(shè)在輸入的文字中,兩個單詞間只允許是空格、,、.、?、!,則在輸出的文字中,大寫的情況有以下幾種:(1)整段文字的第一個字母是大寫;(2)“.”后的第一個字母是大寫;(3)“?”后的第一個字母是大寫;(4)“!”后的第一個字母是大寫;設(shè)變量a存儲輸入的字符串,變量b存儲結(jié)果字符串,變量c存儲當前處理的字符,變量e存儲c之前的字符(當c為第一個字符時除外)。算法如下:第5章編碼5.1有人說程序編好后能上機運行就可以了,為什么還要講究風格和可讀性呢?你覺得對嗎?為什么?對于學生的練習題和作業(yè)題,程序編好后能上機運行,一般認為任務就完成了。但對于實際開發(fā)的項目來說,任務并沒有結(jié)束。編碼人員編寫完程序后,要對自己的程序進行單元測試,測試人員要進行集成測試和系統(tǒng)測試,提交用戶使用后,還需要對軟件進行持續(xù)的維護修改工作。在軟件開發(fā)和維護過程中,都需要閱讀程序。道理很簡單,如果需要對某段程序進行修改,首先要讀懂,閱讀程序是軟件開發(fā)和維護過程中的一個重要組成部分,而且讀程序的時間比寫程序的時間還要多。所以,程序的風格和可讀性很重要,具有良好的程序風格和可讀性的程序,有助于對程序的正確理解,可以大大減少閱讀理解程序的時間,從而提高維護工作的效率。5.2一般情況下,程序的效率和清晰性相比哪一個更重要?在計算機發(fā)展的早期,由于CPU效率低,內(nèi)存小,程序在運行時容易出現(xiàn)運行時間太長或內(nèi)存溢出問題。因此,人們在編寫程序時,很注重程序的時間效率和空間效率,而不太注重程序的清晰性。隨著計算機硬件性能的飛速發(fā)展以及軟件規(guī)模和復雜性的急劇增加,這種情況已經(jīng)發(fā)生了根本的轉(zhuǎn)變,程序的清晰性越來越受到重視,程序的清晰性不好會給測試、維護修改帶來困難,這對于規(guī)模龐大和復雜的軟件尤其明顯。軟件運行的效率主要取決于軟件的體系結(jié)構(gòu)及算法,編碼階段雖然也有機會提高效率,但效果并不明顯。對于效率沒有特殊嚴格要求的系統(tǒng)來說,要將程序的清晰性放在第一位,在不影響清晰性的情況下,去改進效率。5.6在一行內(nèi)只寫一條語句,并且采取適當?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。許多程序設(shè)計語言允許在一行內(nèi)寫多個語句。但這種方式會使程序可讀性變差。下面是一段排序程序,請對其編碼風格進行改進,以增加其可讀性。for(i=1;i<=n-1;i++)for(j=1;j<=n-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}改進后的代碼如下:for(i=1;i<=n-1;i++)for(j=1;j<=n-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}5.7請對下面代碼的布局進行改進,使其符合規(guī)范其更容易理解。for(i=1;i<=n-1;i++){t=i;for(j=i+1;j<=n;j++)if(a[j]<a[t])t=j;if(t!=i){temp=a[t];a[t]=a[i];a[i]=temp}}改進后的代碼如下:for(i=1;i<=n-1;i++){t=i;for(j=i+1;j<=n;j++){if(a[j]<a[t])t=j;}if(t!=i){temp=a[t];a[t]=a[i];a[i]=temp}}5.8使用你熟悉的語言編寫出習題4.15的程序,注意編碼風格。下面為使用C語言編寫的習題4.15的程序:#include"math.h"#include"stdio.h"#include"stdlib.h"#include"time.h"/*求1010的二維數(shù)組a的每一行的最大值存入一維數(shù)組b,每一列的最小值存入一維數(shù)組c,minOfB存儲數(shù)組b的最小值,maxOfC存儲數(shù)組c的最大值,result存儲minOfB與maxOfC之差的平方。*/intmain(){inta[10][10],b[10],c[10];inti,j,minOfB,maxOfC,result;/*產(chǎn)生隨機數(shù)種子*/srand((unsignedint)time(NULL));/*建立1010的二維隨機整數(shù)數(shù)組a*/for(i=0;i<=9;i++)for(j=0;j<=9;j++)a[i][j]=rand()%100+1;//產(chǎn)生1-100之間的隨機數(shù)/*求a中每一行的最大值數(shù)組b*/for(i=0;i<=9;i++){/*求數(shù)組a第i行的最大值b[i]*/b[i]=a[i][0];for(j=1;j<=9;j++)if(a[i][j]>b[i])b[i]=a[i][j];}/*求a中每一列的最小值數(shù)組c*/for(j=0;j<=9;j++){/*求數(shù)組a第j列的最小值c[j];*/c[j]=a[0][j];for(i=1;i<=9;i++)if(a[i][j]<c[j])c[j]=a[i][j];}/*求數(shù)組b中的最小值minOfB*/minOfB=b[0];for(i=1;i<=9;i++)if(minOfB>b[i])minOfB=b[i];/*求數(shù)組c中的最大值maxOfC*/maxOfC=c[0];for(i=1;i<=9;i++)if(maxOfC<c[i])maxOfC=c[i];result=pow(minOfB-maxOfC,2);printf("結(jié)果是:%d",result);return(result);}5.9使用你熟悉的語言編寫出習題4.16的程序,注意編碼風格。下面為使用C語言編寫的習題4.16的程序:#include"stdio.h"#include"string.h"#include"ctype.h"/*將一段英文輸入變量a(假設(shè)兩個單詞間只允許是空格、,、.、?、!),將其整理成每個句子開頭字母是大寫、其他都是小寫的字符串存儲在變量b中。變量c存儲當前處理的字符,變量e存儲c之前字符。*/voidmain(){chara[1000],b[1000],c,e;inti,n;gets(a);n=strlen(a);//將整段的第一個字母轉(zhuǎn)成大寫。if(isalpha(a[0])){a[0]=toupper(a[0]);b[0]=a[0];}//處理第一個字符之后的每個字符,將.?!后面的字母改為大寫,其他改為小寫。for(i=1;i<n;i++){c=a[i];e=a[i-1];if(isalpha(c)){if(strchr(".?!",e))c=toupper(c);elsec=tolower(c);}b[i]=c;}b[n]='\0';puts(b);}第6章軟件測試方法6.5假設(shè)汽車的車牌號可由車主人在規(guī)定范圍內(nèi)自選,若其規(guī)定為:(1)車牌上應有7個字符;(2)為首的字符限定為漢字“京”;(3)第2個字符可任選一字母(A~Z);(4)第3~7個字符可選任意數(shù)字。請為相關(guān)的處理程序采用等價類劃分方法設(shè)計等價類表及相應的測試用例。等價類表輸入數(shù)據(jù)有效等價類無效等價類字符個數(shù)7個(1)0~6個(2),>7個(3)首字符“京”(4)非“京”(5)第2個字符字母(6)非字母(7)第3~7個字符數(shù)字(8)非數(shù)字(9)測試用例如下:1)京H87774}(1),(4),(6),(8)2)京H8777}(2)3)京H877745}(3)4)冀H87774}(5)5)京987774}(7)6)京BA7774}(9)6.6比較測試與測試,說明其異同。測試與測試都是集成測試之后所進行的測試,都屬于系統(tǒng)測試。所不同的是,測試是在開發(fā)環(huán)境中所做的測試,主要由開發(fā)方人員進行。而測試則是在用戶實際工作環(huán)境中所做的測試,不受開發(fā)人員的干預。補充題:設(shè)計下列偽碼程序的語句覆蓋和路徑覆蓋測試用例:STARTINPUT(A,B,C)IFA>5THENX=10ELSEX=1ENDIFIFB>10THENY=20ELSEY=2ENDIFIFC>15THENZ=30ELSEZ=3ENDIFPRINT(X,Y,Z)STOP設(shè)輸入數(shù)據(jù)為<A,B,C>,輸出數(shù)據(jù)為<X,Y,Z>。語句覆蓋測試用例:【<6,12,20>,<10,20,30>】,【<4,8,10>,<1,2,3>】路徑覆蓋測試用例:【<6,12,20>,<10,20,30>】【<6,12,10>,<10,20,3>】【<6,8,20>,<10,2,30>】【<6,8,10>,<10,2,3>】【<4,12,20>,<1,20,30>】【<4,12,10>,<1,20,3>】【<4,8,20>,<1,2,30>】【<4,8,10>,<1,2,3>】第7章統(tǒng)一建模語言UML概述7.2UML中有哪些關(guān)系?解釋類圖中聚合和關(guān)聯(lián)的相同點和不同點。在UML中,常見的關(guān)系有泛化、聚合、關(guān)聯(lián)、依賴和實現(xiàn)。在類圖中,關(guān)聯(lián)是一種結(jié)構(gòu)關(guān)系,它描述了兩個或多個類的實例之間的連接關(guān)系。聚合描述了整體和部分之間的結(jié)構(gòu)關(guān)系。按照關(guān)聯(lián)關(guān)系的定義,聚合屬于一種特殊的關(guān)聯(lián)關(guān)系,只不過這種關(guān)聯(lián)關(guān)系具有明確的整體-部分含義而已。從耦合度的角度看,聚合關(guān)系要強于關(guān)聯(lián)關(guān)系。7.4討論順序圖與協(xié)作圖的關(guān)系,何時用順序圖建模優(yōu)于協(xié)作圖建模,以及相反的情況。順序圖和協(xié)作圖都能描述對象間的交互關(guān)系,但兩者的側(cè)重點不同,順序圖著重表現(xiàn)交互的時間順序,協(xié)作圖則著重表現(xiàn)交互對象的靜態(tài)鏈接關(guān)系。但即使他們各有側(cè)重,但從語義上來說是等價的,可從一種圖自動轉(zhuǎn)換為另一種圖。一般情況下,當需要強調(diào)消息傳遞的時間順序時,采用順序圖;當表示涉及很多對象的模型時,協(xié)作圖比順序圖更形象。順序圖在分析中更常用,而協(xié)作圖則在設(shè)計中更常用。7.5考慮銀行系統(tǒng)中的帳戶會有哪幾種狀態(tài),畫出帳戶對象的狀態(tài)圖。賬戶的狀態(tài)包括開戶、正常使用、透支、休眠、凍結(jié)和注銷。賬戶對象的狀態(tài)圖如下圖所示。第8章面向?qū)ο蠓治?.1比較面向?qū)ο蟮姆治龇椒ê兔嫦驍?shù)據(jù)流的分析方法,闡述它們各自的特點。面向?qū)ο蟮姆治龇椒ㄊ褂糜美P蛠肀硎居脩舻墓δ苄枨?,用例模型相當于功能模型,在對用例模型進行細化的過程中,也伴隨著對功能的分解。但面向?qū)ο蟮姆治龇椒ú⒉皇且怨δ芊纸鉃楹诵?,在獲取并分析用戶的功能需求之后,重點以類和對象為核心,建立對象模型,交互模型也是圍繞對象模型進行的。面向數(shù)據(jù)流的分析方法是從建立頂層數(shù)據(jù)流圖(環(huán)境圖)開始,之后逐層對加工進行分解。面向數(shù)據(jù)流的分析方法是以功能分解為核心的。8.2面向?qū)ο蠓治鲂枰⒌娜齻€模型是什么?面向?qū)ο蠓治鲂枰⒌?個模型是:由用例和場景表示的功能模型(用例模型);用類和對象表示的靜態(tài)模型(對象模型);由狀態(tài)圖和順序圖表示的動態(tài)模型(交互模型)。8.3用例建模的主要步驟是什么?用例建模的主要步驟如下:(1)確定業(yè)務參與者──可以是與系統(tǒng)有交互的外部硬件、軟件、組織、人等。(2)確定業(yè)務需求用例──參與者需要系統(tǒng)提供的完整功能。(3)創(chuàng)建用例圖──標識參與者與用例之間、用例與用例之間的關(guān)系。8.5用例與用例之間的關(guān)系主要有哪兩種?其區(qū)別是什么?用例之間的關(guān)系主要有《包含》(也稱《使用》)和《擴展》?!栋繁硎疽粋€用例所執(zhí)行的功能中總是包括被包含用例的功能;《擴展》是指一個用例的執(zhí)行可能需要由其他用例的功能來擴展,《擴展》聯(lián)系可用于對期望或可選的行為建模,但其主要用途是使基本用例的功能不依賴于擴展用例。8.6對于復雜的系統(tǒng),其對象模型應該由哪五個層次組成?對于復雜的系統(tǒng),對象模型應該由下述5個層次組成:主題層(也稱為范疇層)、類-對象層、結(jié)構(gòu)層、屬性層和服務層,如圖所示。對象模型的五個層次8.7解釋關(guān)聯(lián)類的作用,在什么時候需要使用關(guān)聯(lián)類?關(guān)聯(lián)類的作用是描述關(guān)聯(lián)的屬性。在關(guān)聯(lián)關(guān)系比較簡單的情況下,關(guān)聯(lián)關(guān)系的語義用關(guān)聯(lián)關(guān)系的名字來概括。但在某些情況下,需要對關(guān)聯(lián)關(guān)系的語義做詳細的定義、存儲和訪問,為此可以建立關(guān)聯(lián)類(associationclass)。8.8按照以下描述,畫出UML類圖:一本教材由許多章組成,每一章包含許多節(jié)、小結(jié)和習題組成,章和節(jié)都具有標題和序號屬性。UML類圖如下:8.9考慮一個計算機超市,出售硬件、外設(shè)和軟件。分析誰是這個系統(tǒng)的參與者?這個系統(tǒng)有哪些主要用例?畫出用例圖。系統(tǒng)的參與者:系統(tǒng)管理員(administrator),售貨員(salesperson),客戶(customer)。主要用例編號參與者用例說明1administratorMaintainproductinformation(維護商品信息)增加、修改、刪除商品信息(商品編號、名稱、型號、價格)2Maintainmembershipinformation(維護會員信息)增加、修改、刪除會員信息(會員編號、姓名、身份證號、辦卡日期)3salespersonScanmembershipcard(掃描會員卡)在商品出售之前,系統(tǒng)通過掃描儀刷卡(會員卡)來確認顧客的會員身份4Scanproductcode(掃描商品的條形碼)通過掃描商品的條形碼,自動識別商品的名稱和價格5Inputamountofproduct(輸入商品數(shù)量)對于已經(jīng)掃描的條形碼,手工輸入購買的此件商品的數(shù)量6salesperson,customerAcceptpayment(接收現(xiàn)金付款)Chargepaymenttocard(使用銀行卡付款)7salespersonPrintreceipt(打印收據(jù))用例圖如下:第10章面向?qū)ο笤O(shè)計10.1軟件模塊之間的依賴性可以從哪些角度和抽象層次進行分析?在面向?qū)ο筌浖?,常見的軟件模塊有類、接口、包、構(gòu)件。因此,分析軟件模塊之間的依賴性就可以從類、接口、包和構(gòu)件的角度和層次進行分析。10.2消除包之間循環(huán)依賴性的方法是什么?本質(zhì)上,兩個包之間的依賴性來自于兩個包中類之間的依賴性。類之間的循環(huán)依賴性是個特別棘手的問題,好在大多數(shù)情況下可以通過重新設(shè)計避免循環(huán)依賴性。具體方法是增加新包。舉例說明如下:在下圖中,包A依賴于包B,反過來包B又依賴包A,構(gòu)成了循環(huán)依賴。具體解決辦法是:將包B依賴的包A中的元素從包A中分離出來,組成包C,使得包B不再依賴包A,而是依賴包C。10.3請給出構(gòu)件的一般性定義,然后給出傳統(tǒng)的軟件工程環(huán)境及面向?qū)ο蟮能浖こ汰h(huán)境中構(gòu)件的定義,最后選擇你熟悉的編程語言說明怎樣定義一個構(gòu)件。軟件構(gòu)件是一種組裝單元,它具有規(guī)范的接口規(guī)格說明和顯式的語境依賴。軟件構(gòu)件可以被獨立部署,并由第三方任意組裝。OMGUML規(guī)范中將構(gòu)件定義為“系統(tǒng)中某一定型化的、可配置的和可替換的部件,該部件封裝了實現(xiàn)并暴露一系列接口”。在傳統(tǒng)的軟件工程環(huán)境中,一個構(gòu)件就是程序的一個功能要素,程序由處理邏輯和實現(xiàn)處理邏輯所需的內(nèi)部數(shù)據(jù)結(jié)構(gòu)以及能夠保證構(gòu)件被調(diào)用和實現(xiàn)數(shù)據(jù)傳遞的接口構(gòu)成。傳統(tǒng)的構(gòu)件也稱為模塊,是軟件體系結(jié)構(gòu)的一部分。在面向?qū)ο蟮能浖こ汰h(huán)境中,面向?qū)ο蠹夹g(shù)已達到了類級復用,而構(gòu)件級復用則是比類級復用更高一級的復用,它是對一組類的組合進行封裝(當然,在某些情況下,一個構(gòu)件可能只包含一個單獨的類),并代表完成一個或多個功能的特定服務,也為用戶提供了多個接口。一個構(gòu)件可以是一個編譯的類,可以是一組編譯的類,也可以是其他獨立的部署單元,如一個文本文件、一個圖片、一個數(shù)據(jù)文件、一個腳本等。選擇你熟悉的編程語言說明怎樣定義一個構(gòu)件。(略)10.4典型的面向?qū)ο笤O(shè)計模型在邏輯上由哪幾部分組成?對每一部分進行設(shè)計時所包含的主要內(nèi)容是什么?典型的面向?qū)ο笤O(shè)計模型在邏輯上將系統(tǒng)劃分為4個部分,分別是問題域部分、人機交互部分、任務管理部分及數(shù)據(jù)管理部分。1)問題域部分的設(shè)計在面向?qū)ο笤O(shè)計過程中,可能要對面向?qū)ο蠓治鏊贸龅膯栴}域模型進行補充或調(diào)整。例如,調(diào)整需求、復用已有的類、把問題域類組合在一起、增添泛化類以建立類間的協(xié)議、調(diào)整繼承的支持級別、改進性能等。2)人機交互部分的設(shè)計人機交互界面的設(shè)計質(zhì)量直接影響到用戶對軟件的使用。在設(shè)計階段,必須根據(jù)需求把交互細節(jié)加入到用戶界面設(shè)計中,包括人機交互所必需的實際顯示和輸入。3)任務管理部分的設(shè)計任務管理主要包括任務的選擇和調(diào)整。常見的任務有事件驅(qū)動型任務、時鐘驅(qū)動型任務、優(yōu)先任務、關(guān)鍵任務和協(xié)調(diào)任務等。設(shè)計任務管理子系統(tǒng)時,需要確定各類任務,并將任務分配給適當?shù)挠布蜍浖?zhí)行。4)數(shù)據(jù)管理的設(shè)計在采用面向?qū)ο蠓椒ㄟM行軟件開發(fā)時,數(shù)據(jù)的存儲還是普遍使用關(guān)系數(shù)據(jù)庫。在面向?qū)ο笤O(shè)計中,可以將UML類圖看作是數(shù)據(jù)庫的概念模型,一個類可以映射為一個表或多個表,此外,還要考慮類之間的關(guān)聯(lián)關(guān)系、繼承關(guān)系的映射。10.5用面向?qū)ο蠓椒ㄔO(shè)計網(wǎng)上購書系統(tǒng)的軟件結(jié)構(gòu),網(wǎng)上購書系統(tǒng)的業(yè)務如下:某書店為方便客戶通過Internet購買相關(guān)圖書,開發(fā)一個“網(wǎng)上購書系統(tǒng)”,客戶可以通過Web頁面注冊并登錄“網(wǎng)上購書系統(tǒng)”,通過Web頁面查看、選擇圖書,系統(tǒng)根據(jù)用戶選擇的圖書單價、數(shù)量,系統(tǒng)自動生成訂單,并計算總價格。客戶在提交訂單之前,必須填寫關(guān)于寄送地址和發(fā)票及付款方式等細節(jié),一旦訂單被提交,系統(tǒng)顯示確認信息,并附上訂單的詳細信息??蛻艨梢栽诰€查詢訂單的狀態(tài)。系統(tǒng)管理人員查看客戶的訂單,驗證客戶的信用和付款方式,向倉庫請求所購圖書,打印發(fā)票并發(fā)貨。本系統(tǒng)從邏輯結(jié)構(gòu)上分為三層,Web頁面層,業(yè)務邏輯層和數(shù)據(jù)庫層。Web頁面層負責接收用戶的請求,業(yè)務邏輯層在獲知用戶請求后,執(zhí)行相應的業(yè)務邏輯,向數(shù)據(jù)庫層發(fā)出數(shù)據(jù)請求,獲得所需要的數(shù)據(jù)后,通知Web頁面層將數(shù)據(jù)呈現(xiàn)給用戶。從業(yè)務的角度,又可以將系統(tǒng)劃分為訂購管理、客戶信息管理和系統(tǒng)管理三個子系統(tǒng)(包)。系統(tǒng)的軟件結(jié)構(gòu)如圖所示。10.6對10.5中的網(wǎng)上購書系統(tǒng)設(shè)計其問題域的類圖。問題域類包括客戶、信用信息、訂單、圖書、發(fā)票及發(fā)貨單。類圖如下所示:

數(shù)據(jù)庫系統(tǒng)導論第五版課后習題答案第1章緒論1.試述數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)的概念。答:(l)數(shù)據(jù)(Data):描述事物的符號記錄稱為數(shù)據(jù)。數(shù)據(jù)的種類有數(shù)字、文字、圖形、圖像、聲音、正文等。數(shù)據(jù)與其語義是不可分的。解析在現(xiàn)代計算機系統(tǒng)中數(shù)據(jù)的概念是廣義的。早期的計算機系統(tǒng)主要用于科學計算,處理的數(shù)據(jù)是整數(shù)、實數(shù)、浮點數(shù)等傳統(tǒng)數(shù)學中的數(shù)據(jù)?,F(xiàn)代計算機能存儲和處理的對象十分廣泛,表示這些對象的數(shù)據(jù)也越來越復雜。數(shù)據(jù)與其語義是不可分的。500這個數(shù)字可以表示一件物品的價格是500元,也可以表示一個學術(shù)會議參加的人數(shù)有500人,還可以表示一袋奶粉重500克。(2)數(shù)據(jù)庫(DataBase,簡稱DB):數(shù)據(jù)庫是長期儲存在計算機內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和儲存,具有較小的冗余度、較高的數(shù)據(jù)獨立性和易擴展性,并可為各種用戶共享。(3)數(shù)據(jù)庫系統(tǒng)(DataBas。Sytem,簡稱DBS):數(shù)據(jù)庫系統(tǒng)是指在計算機系統(tǒng)中引入數(shù)據(jù)庫后的系統(tǒng)構(gòu)成,一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(及其開發(fā)工具)、應用系統(tǒng)、數(shù)據(jù)庫管理員構(gòu)成。解析數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫是兩個概念。數(shù)據(jù)庫系統(tǒng)是一個人一機系統(tǒng),數(shù)據(jù)庫是數(shù)據(jù)庫系統(tǒng)的一個組成部分。但是在日常工作中人們常常把數(shù)據(jù)庫系統(tǒng)簡稱為數(shù)據(jù)庫。希望讀者能夠從人們講話或文章的上下文中區(qū)分“數(shù)據(jù)庫系統(tǒng)”和“數(shù)據(jù)庫”,不要引起混淆。(4)數(shù)據(jù)庫管理系統(tǒng)(DataBaseManagementsytem,簡稱DBMs):數(shù)據(jù)庫管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用于科學地組織和存儲數(shù)據(jù)、高效地獲取和維護數(shù)據(jù)。DBMS的主要功能包括數(shù)據(jù)定義功能、數(shù)據(jù)操縱功能、數(shù)據(jù)庫的運行管理功能、數(shù)據(jù)庫的建立和維護功能。解析DBMS是一個大型的復雜的軟件系統(tǒng),是計算機中的基礎(chǔ)軟件。目前,專門研制DBMS的廠商及其研制的DBMS產(chǎn)品很多。著名的有美國IBM公司的DBZ關(guān)系數(shù)據(jù)庫管理系統(tǒng)和IMS層次數(shù)據(jù)庫管理系統(tǒng)、美國Oracle公司的orade關(guān)系數(shù)據(jù)庫管理系統(tǒng)、s油ase公司的s油ase關(guān)系數(shù)據(jù)庫管理系統(tǒng)、美國微軟公司的SQLServe,關(guān)系數(shù)據(jù)庫管理系統(tǒng)等。2.使用數(shù)據(jù)庫系統(tǒng)有什么好處?答:使用數(shù)據(jù)庫系統(tǒng)的好處是由數(shù)據(jù)庫管理系統(tǒng)的特點或優(yōu)點決定的。使用數(shù)據(jù)庫系統(tǒng)的好處很多,例如,可以大大提高應用開發(fā)的效率,方便用戶的使用,減輕數(shù)據(jù)庫系統(tǒng)管理人員維護的負擔,等等。使用數(shù)據(jù)庫系統(tǒng)可以大大提高應用開發(fā)的效率。因為在數(shù)據(jù)庫系統(tǒng)中應用程序不必考慮數(shù)據(jù)的定義、存儲和數(shù)據(jù)存取的具體路徑,這些工作都由DBMS來完成。用一個通俗的比喻,使用了DBMS就如有了一個好參謀、好助手,許多具體的技術(shù)工作都由這個助手來完成。開發(fā)人員就可以專注于應用邏輯的設(shè)計,而不必為數(shù)據(jù)管理的許許多多復雜的細節(jié)操心。還有,當應用邏輯改變,數(shù)據(jù)的邏輯結(jié)構(gòu)也需要改變時,由于數(shù)據(jù)庫系統(tǒng)提供了數(shù)據(jù)與程序之間的獨立性,數(shù)據(jù)邏輯結(jié)構(gòu)的改變是DBA的責任,開發(fā)人員不必修改應用程序,或者只需要修改很少的應用程序,從而既簡化了應用程序的編制,又大大減少了應用程序的維護和修改。使用數(shù)據(jù)庫系統(tǒng)可以減輕數(shù)據(jù)庫系統(tǒng)管理人員維護系統(tǒng)的負擔。因為DBMS在數(shù)據(jù)庫建立、運用和維護時對數(shù)據(jù)庫進行統(tǒng)一的管理和控制,包括數(shù)據(jù)的完整性、安全性、多用戶并發(fā)控制、故障恢復等,都由DBMS執(zhí)行。總之,使用數(shù)據(jù)庫系統(tǒng)的優(yōu)點是很多的,既便于數(shù)據(jù)的集中管理,控制數(shù)據(jù)冗余,提高數(shù)據(jù)的利用率和一致性,又有利于應用程序的開發(fā)和維護。讀者可以在自己今后的工作中結(jié)合具體應用,認真加以體會和總結(jié)。3.試述文件系統(tǒng)與數(shù)據(jù)庫系統(tǒng)的區(qū)別和聯(lián)系。答:文件系統(tǒng)與數(shù)據(jù)庫系統(tǒng)的區(qū)別是:文件系統(tǒng)面向某一應用程序,共享性差,冗余度大,數(shù)據(jù)獨立性差,記錄內(nèi)有結(jié)構(gòu),整體無結(jié)構(gòu),由應用程序自己控制。數(shù)據(jù)庫系統(tǒng)面向現(xiàn)實世界,共享性高,冗余度小,具有較高的物理獨立性和一定的邏輯獨立性,整體結(jié)構(gòu)化,用數(shù)據(jù)模型描述,由數(shù)據(jù)庫管理系統(tǒng)提供數(shù)據(jù)的安全性、完整性、并發(fā)控制和恢復能力。文件系統(tǒng)與數(shù)據(jù)庫系統(tǒng)的聯(lián)系是:文件系統(tǒng)與數(shù)據(jù)庫系統(tǒng)都是計算機系統(tǒng)中管理數(shù)據(jù)的軟件。解析文件系統(tǒng)是操作系統(tǒng)的重要組成部分;而DBMS是獨立于操作系統(tǒng)的軟件。但是DBMS是在操作系統(tǒng)的基礎(chǔ)上實現(xiàn)的;數(shù)據(jù)庫中數(shù)據(jù)的組織和存儲是通過操作系統(tǒng)中的文件系統(tǒng)來實現(xiàn)的。4.舉出適合用文件系統(tǒng)而不是數(shù)據(jù)庫系統(tǒng)的例子;再舉出適合用數(shù)據(jù)庫系統(tǒng)的應用例子。答:(l)適用于文件系統(tǒng)而不是數(shù)據(jù)庫系統(tǒng)的應用例子數(shù)據(jù)的備份、軟件或應用程序使用過程中的臨時數(shù)據(jù)存儲一般使用文件比較合適。早期功能比較簡單、比較固定的應用系統(tǒng)也適合用文件系統(tǒng)。(2)適用于數(shù)據(jù)庫系統(tǒng)而非文件系統(tǒng)的應用例子目前,幾乎所有企業(yè)或部門的信息系統(tǒng)都以數(shù)據(jù)庫系統(tǒng)為基礎(chǔ),都使用數(shù)據(jù)庫。例如,一個工廠的管理信息系統(tǒng)(其中會包括許多子系統(tǒng),如庫存管理系統(tǒng)、物資采購系統(tǒng)、作業(yè)調(diào)度系統(tǒng)、設(shè)備管理系統(tǒng)、人事管理系統(tǒng)等),學校的學生管理系統(tǒng),人事管理系統(tǒng),圖書館的圖書管理系統(tǒng),等等,都適合用數(shù)據(jù)庫系統(tǒng)。希望讀者能舉出自己了解的應用例子。5.試述數(shù)據(jù)庫系統(tǒng)的特點。答:數(shù)據(jù)庫系統(tǒng)的主要特點有:(l)數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)庫系統(tǒng)實現(xiàn)整體數(shù)據(jù)的結(jié)構(gòu)化,這是數(shù)據(jù)庫的主要特征之一,也是數(shù)據(jù)庫系統(tǒng)與文件系統(tǒng)的本質(zhì)區(qū)別。解析注意這里的“整體’夕兩個字。在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)不再針對某一個應用,而是面向全組織,具有整體的結(jié)構(gòu)化。不僅數(shù)據(jù)是結(jié)構(gòu)化的,而且數(shù)據(jù)的存取單位即一次可以存取數(shù)據(jù)的大小也很靈活,可以小到某一個數(shù)據(jù)項(如一個學生的姓名),大到一組記錄(成千上萬個學生記錄)。而在文件系統(tǒng)中,數(shù)據(jù)的存取單位只有一個:記錄,如一個學生的完整記錄。(2)數(shù)據(jù)的共享性高,冗余度低,易擴充數(shù)據(jù)庫的數(shù)據(jù)不再面向某個應用而是面向整個系統(tǒng),因此可以被多個用戶、多個應用以多種不同的語言共享使用。由于數(shù)據(jù)面向整個系統(tǒng),是有結(jié)構(gòu)的數(shù)據(jù),不僅可以被多個應用共享使用,而且容易增加新的應用,這就使得數(shù)據(jù)庫系統(tǒng)彈性大,易于擴充。解析數(shù)據(jù)共享可以大大減少數(shù)據(jù)冗余,節(jié)約存儲空間,同時還能夠避免數(shù)據(jù)之間的不相容性與不一致性。所謂“數(shù)據(jù)面向某個應用”是指數(shù)據(jù)結(jié)構(gòu)是針對某個應用設(shè)計的,只被這個應用程序或應用系統(tǒng)使用,可以說數(shù)據(jù)是某個應用的“私有資源”。所謂“彈性大”是指系統(tǒng)容易擴充也容易收縮,即應用增加或減少時不必修改整個數(shù)據(jù)庫的結(jié)構(gòu),只需做很少的改動??梢匀≌w數(shù)據(jù)的各種子集用于不同的應用系統(tǒng),當應用需求改變或增加時,只要重新選取不同的子集或加上一部分數(shù)據(jù),便可以滿足新的需求。(3)數(shù)據(jù)獨立性高數(shù)據(jù)獨立性包括數(shù)據(jù)的物理獨立性和數(shù)據(jù)的邏輯獨立性。數(shù)據(jù)庫管理系統(tǒng)的模式結(jié)構(gòu)和二級映像功能保證了數(shù)據(jù)庫中的數(shù)據(jù)具有很高的物理獨立性和邏輯獨立性。(4)數(shù)據(jù)由DBMS統(tǒng)一管理和控制數(shù)據(jù)庫的共享是并發(fā)的共享,即多個用戶可以同時存取數(shù)據(jù)庫中的數(shù)據(jù)甚至可以同時存取數(shù)據(jù)庫中同一個數(shù)據(jù)。為此,DBMS必須提供統(tǒng)一的數(shù)據(jù)控制功能,包括數(shù)據(jù)的安全性保護、數(shù)據(jù)的完整性檢查、并發(fā)控制和數(shù)據(jù)庫恢復。解析DBMS數(shù)據(jù)控制功能包括四個方面:數(shù)據(jù)的安全性保護:保護數(shù)據(jù)以防止不合法的使用造成的數(shù)據(jù)的泄密和破壞;數(shù)據(jù)的完整性檢查:將數(shù)據(jù)控制在有效的范圍內(nèi),或保證數(shù)據(jù)之間滿足一定的關(guān)系;并發(fā)控制:對多用戶的并發(fā)操作加以控制和協(xié)調(diào),保證并發(fā)操作的正確性;數(shù)據(jù)庫恢復:當計算機系統(tǒng)發(fā)生硬件故障、軟件故障,或者由于操作員的失誤以及故意的破壞影響數(shù)據(jù)庫中數(shù)據(jù)的正確性,甚至造成數(shù)據(jù)庫部分或全部數(shù)據(jù)的丟失時,能將數(shù)據(jù)庫從錯誤狀態(tài)恢復到某一已知的正確狀態(tài)(亦稱為完整狀態(tài)或一致狀態(tài))。下面可以得到“什么是數(shù)據(jù)庫”的一個定義:數(shù)據(jù)庫是長期存儲在計算機內(nèi)有組織的大量的共享的數(shù)據(jù)集合,它可以供各種用戶共享,具有最小冗余度和較高的數(shù)據(jù)獨立性。DBMS在數(shù)據(jù)庫建立、運用和維護時對數(shù)據(jù)庫進行統(tǒng)一控制,以保證數(shù)據(jù)的完整性、安全性,并在多用戶同時使用數(shù)據(jù)庫時進行并發(fā)控制,在發(fā)生故障后對系統(tǒng)進行恢復。數(shù)據(jù)庫系統(tǒng)的出現(xiàn)使信息系統(tǒng)從以加工數(shù)據(jù)的程序為中心轉(zhuǎn)向圍繞共享的數(shù)據(jù)庫為中心的新階段。6.數(shù)據(jù)庫管理系統(tǒng)的主要功能有哪些?答:(l)數(shù)據(jù)庫定義功能;(2)數(shù)據(jù)存取功能;(3)數(shù)據(jù)庫運行管理;(4)數(shù)據(jù)庫的建立和維護功能。7.什么是概念模型?試述概念模型的作用。答:概念模型,也稱信息模型,是按用戶的觀點來對數(shù)據(jù)和信息建模,主要用于數(shù)據(jù)庫設(shè)計。概念模型實際上是現(xiàn)實世界到機器世界的一個中間層次。概念模型用于信息世界的建模,是現(xiàn)實世界到信息世界的第一層抽象,是數(shù)據(jù)庫設(shè)計人員進行數(shù)據(jù)庫設(shè)計的有力工具,也是數(shù)據(jù)庫設(shè)計人員和用戶之間進行交流的語言。8.定義并解釋概念模型中以下術(shù)語:實體,實體型,實體集,實體之間的聯(lián)系。答:實體:客觀存在并可以相互區(qū)分的事物叫實體。實體型:具有相同屬性的實體具有相同的特征和性質(zhì),用實體名及其屬性名集合來抽象和刻畫同類實體,稱為實體型。實體集:同型實體的集合稱為實體集;實體之間的聯(lián)系:通常是指不同實體型的實體集之間的聯(lián)系,實體之間的聯(lián)系有一對一,一對多和多對多等多種類型。9.試述數(shù)據(jù)模型的概念、數(shù)據(jù)模型的作用和數(shù)據(jù)模型的三個要素。答:數(shù)據(jù)模型是數(shù)據(jù)庫中用來對現(xiàn)實世界進行抽象的工具,是數(shù)據(jù)庫中用于提供信息表示和操作手段的形式構(gòu)架。一般地講,數(shù)據(jù)模型是嚴格定義的概念的集合。這些概念精確描述了系統(tǒng)的靜態(tài)特性、動態(tài)特性和完整性約束條件。因此數(shù)據(jù)模型通常由數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和完整性約束三部分組成。(l)數(shù)據(jù)結(jié)構(gòu):是所研究的對象類型的集合,是對系統(tǒng)靜態(tài)特性的描述。(2)數(shù)據(jù)操作:是指對數(shù)據(jù)庫中各種對象(型)的實例(值)允許進行的操作的集合,包括操作及有關(guān)的操作規(guī)則,是對系統(tǒng)動態(tài)特性的描述。(3)數(shù)據(jù)的約束條件:是一組完整性規(guī)則的集合。完整性規(guī)則是給定的數(shù)據(jù)模型中數(shù)據(jù)及其聯(lián)系所具有的制約和依存規(guī)則,用以限定符合數(shù)據(jù)模型的數(shù)據(jù)庫狀態(tài)以及狀態(tài)的變化,以保證數(shù)據(jù)的正確、有效、相容。解析數(shù)據(jù)模型是數(shù)據(jù)庫系統(tǒng)中最重要的概念之一。必須通過《概論》的學習真正掌握數(shù)據(jù)模型的概念和作用。數(shù)據(jù)模型是數(shù)據(jù)庫系統(tǒng)的基礎(chǔ)。任何一個DBMS都以某一個數(shù)據(jù)模型為基礎(chǔ),或者說支持某一個數(shù)據(jù)模型。數(shù)據(jù)庫系統(tǒng)中,模型有不同的層次。根據(jù)模型應用的不同目的,可以將模型分成兩類或者說兩個層次:一類是概念模型,是按用戶的觀點來對數(shù)據(jù)和信息建模,用于信息世界的建模,強調(diào)語義表達能力,概念簡單清晰;另一類是數(shù)據(jù)模型,是按計算機系統(tǒng)的觀點對數(shù)據(jù)建模,用于機器世界,人們可以用它定義、操縱數(shù)據(jù)庫中的數(shù)據(jù),一般需要有嚴格的形式化定義和一組嚴格定義了語法和語義的語言,并有一些規(guī)定和限制,便于在機器上實現(xiàn)。10.試述層次模型的概念,舉出三個層次模型的實例。答:(l)教員學生層次數(shù)據(jù)庫模型(2)行政機構(gòu)層次數(shù)據(jù)庫模型(3)行政區(qū)域?qū)哟螖?shù)據(jù)庫模型11.試述網(wǎng)狀模型的概念,舉出三個網(wǎng)狀模型的實例。答:滿足下面兩個條件的基本層次聯(lián)系集合為網(wǎng)狀模型。(l)允許一個以上的結(jié)點無雙親;(2)一個結(jié)點可以有多于一個的雙親。實例1:實例2:實例3:12.試述網(wǎng)狀、層次數(shù)據(jù)庫的優(yōu)缺點。答:層次模型的優(yōu)點主要有:(l)模型簡單,對具有一對多層次關(guān)系的部門描述非常自然、直觀,容易理解,這是層次數(shù)據(jù)庫的突出優(yōu)點;(2)用層次模型的應用系統(tǒng)性能好,特別是對于那些實體間聯(lián)系是固定的且預先定義好的應用,采用層次模型來實現(xiàn),其性能優(yōu)于關(guān)系模型;(3)層次數(shù)據(jù)模型提供了良好的完整性支持。層次模型的缺點主要有:(l)現(xiàn)實世界中很多聯(lián)系是非層次性的,如多對多聯(lián)系、一個結(jié)點具有多個雙親等,層次模型不能自然地表示這類聯(lián)系,只能通過引入冗余數(shù)據(jù)或引入虛擬結(jié)點來解決;(2)對插入和刪除操作的限制比較多;(3)查詢子女結(jié)點必須通過雙親結(jié)點。網(wǎng)狀數(shù)據(jù)模型的優(yōu)點主要有:(l)能夠更為直接地描述現(xiàn)實世界,如一個結(jié)點可以有多個雙親;(2)具有良好的性能,存取效率較高。網(wǎng)狀數(shù)據(jù)模型的缺點主要有:(l)結(jié)構(gòu)比較復雜,而且隨著應用環(huán)境的擴大,數(shù)據(jù)庫的結(jié)構(gòu)就變得越來越復雜,不利于最終用戶掌握;(2)其DDL、DML語言復雜,用戶不容易使用。由于記錄之間聯(lián)系是通過存取路徑實現(xiàn)的,應用程序在訪問數(shù)據(jù)時必須選擇適當?shù)拇嫒÷窂?。因此,用戶必須了解系統(tǒng)結(jié)構(gòu)的細節(jié),加重了編寫應用程序的負擔。13.試述關(guān)系模型的概念,定義并解釋以下術(shù)語:(l)關(guān)系(2)屬性(3)域(4)元組(5)主碼(6)分量(7)關(guān)系模式答:關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束三部分組成。在用戶觀點下,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表,它由行和列組成。(l)關(guān)系:一個關(guān)系對應通常說的一張表;(2)屬性:表中的一列即為一個屬性;(3)域:屬性的取值范圍;(4)元組:表中的一行即為一個元組;(5)主碼:表中的某個屬性組,它可以惟一確定一個元組;(6)分量:元組中的一個屬性值;(7)關(guān)系模式:對關(guān)系的描述,一般表示為關(guān)系名(屬性1,屬性2,…,屬性n)14.試述關(guān)系數(shù)據(jù)庫的特點。答:關(guān)系數(shù)據(jù)模型具有下列優(yōu)點:(l)關(guān)系模型與非關(guān)系模型不同,它是建立在嚴格的數(shù)學概念的基礎(chǔ)上的。(2)關(guān)系模型的概念單一,無論實體還是實體之間的聯(lián)系都用關(guān)系表示,操作的對象和操作的結(jié)果都是關(guān)系,所以其數(shù)據(jù)結(jié)構(gòu)簡單、清晰,用戶易懂易用。(3)關(guān)系模型的存取路徑對用戶透明,從而具有更高的數(shù)據(jù)獨立性、更好的安全保密性,也簡化了程序員的工作和數(shù)據(jù)庫開發(fā)建立的工作。當然,關(guān)系數(shù)據(jù)模型也有缺點,其中最主要的缺點是,由于存取路徑對用戶透明,查詢效率往往不如非關(guān)系數(shù)據(jù)模型。因此為了提高性能,必須對用戶的查詢請求進行優(yōu)化,增加了開發(fā)數(shù)據(jù)庫管理系統(tǒng)的難度。15.試述數(shù)據(jù)庫系統(tǒng)三級模式結(jié)構(gòu),這種結(jié)構(gòu)的優(yōu)點是什么?答:數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)由外模式、模式和內(nèi)模式組成。(參見書上圖1.29)外模式,亦稱子模式或用戶模式,是數(shù)據(jù)庫用戶(包括應用程序員和最終用戶)能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖,是與某一應用有關(guān)的數(shù)據(jù)的邏輯表示。模式,亦稱邏輯模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖。模式描述的是數(shù)據(jù)的全局邏輯結(jié)構(gòu)。外模式涉及的是數(shù)據(jù)的局部邏輯結(jié)構(gòu),通常是模式的子集。內(nèi)模式,亦稱存儲模式,是數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)內(nèi)部的表示,即對數(shù)據(jù)的物理結(jié)構(gòu)和存儲方式的描述。數(shù)據(jù)庫系統(tǒng)的三級模式是對數(shù)據(jù)的三個抽象級別,它把數(shù)據(jù)的具體組織留給DBMs管理,使用戶能邏輯抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計算機中的表示和存儲。為了能夠在內(nèi)部實現(xiàn)這三個抽象層次的聯(lián)系和轉(zhuǎn)換,數(shù)據(jù)庫系統(tǒng)在這三級模式之間提供了兩層映像:外模式/模式映像和模式/內(nèi)模式映像。正是這兩層映像保證了數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)能夠具有較高的邏輯獨立性和物理獨立性。16.定義并解釋以下術(shù)語:模式、外模式、內(nèi)模式、DDL、DML。模式、外模式、內(nèi)模式,亦稱邏輯模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖。模式描述的是數(shù)據(jù)的全局邏輯結(jié)構(gòu)。外模式涉及的是數(shù)據(jù)的局部邏輯結(jié)構(gòu),通常是模式的子集。內(nèi)模式,亦稱存儲模式,是數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)內(nèi)部的表示,即對數(shù)據(jù)的物理結(jié)構(gòu)和存儲方式的描述。DDL:數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫模式、外模式、內(nèi)模式的語言。DML:數(shù)據(jù)操縱語言,用來對數(shù)據(jù)庫中的數(shù)據(jù)進行查詢、插入、刪除和修改的語句。17.什么叫數(shù)據(jù)與程序的物理獨立性?什么叫數(shù)據(jù)與程序的邏輯獨立性?為什么數(shù)據(jù)庫系統(tǒng)具有數(shù)據(jù)與程序的獨立性?答:數(shù)據(jù)與程序的邏輯獨立性:當模式改變時(例如增加新的關(guān)系、新的屬性、改變屬性的數(shù)據(jù)類型等),由數(shù)據(jù)庫管理員對各個外模式/模式的映像做相應改變,可以使外模式保持不變。應用程序是依據(jù)數(shù)據(jù)的外模式編寫的,從而應用程序不必修改,保證了數(shù)據(jù)與程序的邏輯獨立性,簡稱數(shù)據(jù)的邏輯獨立性。數(shù)據(jù)與程序的物理獨立性:當數(shù)據(jù)庫的存儲結(jié)構(gòu)改變了,由數(shù)據(jù)庫管理員對模式/內(nèi)模式映像做相應改變,可以使模式保持不變,從而應用程序也不必改變,保證了數(shù)據(jù)與程序的物理獨立性,簡稱數(shù)據(jù)的物理獨立性。數(shù)據(jù)庫管理系統(tǒng)在三級模式之間提供的兩層映像保證了數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)能夠具有較高的邏輯獨立性和物理獨立性。18.試述數(shù)據(jù)庫系統(tǒng)的組成。答:數(shù)據(jù)庫系統(tǒng)一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(及其開發(fā)工具)、應用系統(tǒng)、數(shù)據(jù)庫管理員和用戶構(gòu)成。19.數(shù)據(jù)庫管理員、系統(tǒng)分析員、數(shù)據(jù)庫設(shè)計人員、應用程序員的職責是什么?答:數(shù)據(jù)庫管理員的職責:(1)決定數(shù)據(jù)庫中的信息內(nèi)容和結(jié)構(gòu);(2)決定數(shù)據(jù)庫的存儲結(jié)構(gòu)和存取策略;(3)定義數(shù)據(jù)的安全性要求和完整性約束條件;(4)監(jiān)控數(shù)據(jù)庫的使用和運行;(5)數(shù)據(jù)庫的改進和重組、重構(gòu)。系統(tǒng)分析員負責應用系統(tǒng)的需求分析和規(guī)范說明,系統(tǒng)分析員要和用戶及DBA相結(jié)合,確定系統(tǒng)的硬件、軟件配置,并參與數(shù)據(jù)庫系統(tǒng)的概要設(shè)計。數(shù)據(jù)庫設(shè)計人員負責數(shù)據(jù)庫中數(shù)據(jù)的確定、數(shù)據(jù)庫各級模式的設(shè)計。數(shù)據(jù)庫設(shè)計人員必須參加用戶需求調(diào)查和系統(tǒng)分析,然后進行數(shù)據(jù)庫設(shè)計。在很多情況下,數(shù)據(jù)庫設(shè)計人員就由數(shù)據(jù)庫管理員擔任。應用程序員負責設(shè)計和編寫應用系統(tǒng)的程序模塊,并進行調(diào)試和安裝。第二章關(guān)系數(shù)據(jù)庫1.試述關(guān)系模型的三個組成部分。

答:關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束三部分組成。2.試述關(guān)系數(shù)據(jù)語言的特點和分類。答:關(guān)系數(shù)據(jù)語言可以分為三類:關(guān)系代數(shù)語言。關(guān)系演算語言:元組關(guān)系演算語言和域關(guān)系演算語言。SQL:具有關(guān)系代數(shù)和關(guān)系演算雙重特點的語言。這些關(guān)系數(shù)據(jù)語言的共同特點是,語言具有完備的表達能力,是非過程化的集合操作語言,功能強,能夠嵌入高級語言中使用。3(略)4.5.述關(guān)系模型的完整性規(guī)則。在參照完整性中,為什么外部碼屬性的值也可以為空?什么情況下才可以為空?答:實體完整性規(guī)則是指若屬性A是基本關(guān)系R的主屬性,則屬性A不能取空值。若屬性(或?qū)傩越M)F是基本關(guān)系R的外碼,它與基本關(guān)系S的主碼Ks相對應(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中每個元組在F上的值必須為:或者取空值(F的每個屬性值均為空值);或者等于S中某個元組的主碼值。即屬性F本身不是主屬性,則可以取空值,否則不能取空值。6.設(shè)有一個SPJ數(shù)據(jù)庫,包括S,P,J,SPJ四個關(guān)系模式:1)求供應工程J1零件的供應商號碼SNO:πSno(σJno=‘J1’(SPJ))2)求供應工程J1零件P1的供應商號碼SNO:πSno(σJno=‘J1’∧Pno=‘P1‘(SPJ))3)求供應工程J1零件為紅色的供應商號碼SNO:πSno(πSno,,Pno(σJno=‘J1‘(SPJ))∞πPno(σCOLOR=’紅‘(P)))4)求沒有使用天津供應商生產(chǎn)的紅色零件的工程號JNO:πJno(SPJ)-πJNO(σcity=‘天津’∧Color=‘紅‘(S∞SPJ∞P)5)求至少用了供應商S1所供應的全部零件的工程號JNO:πJno,Pno(SPJ)÷πPno(σSno=‘S1‘(SPJ))7.試述等值連接與自然連接的區(qū)別和聯(lián)系。答:連接運算符是“=”的連接運算稱為等值連接。它是從關(guān)系R與S的廣義笛卡爾積中選取A,B屬性值相等的那些元組自然連接是一種特殊的等值連接,它要求兩個關(guān)系中進行比較的分量必須是相同的屬性組,并且在結(jié)果中把重復的屬性列去掉。8.關(guān)系代數(shù)的基本運算有哪些?如何用這些基本運算來表示其他運算?答:并、差、笛卡爾積、投影和選擇5種運算為基本的運算。其他3種運算,即交、連接和除,均可以用這5種基本運算來表達。第三章關(guān)系數(shù)據(jù)庫語言SQL1.試述sQL語言的特點。答:(l)綜合統(tǒng)一。sQL語言集數(shù)據(jù)定義語言DDL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL的功能于一體。(2)高度非過程化。用sQL語言進行數(shù)據(jù)操作,只要提出“做什么”,而無需指明“怎么做”,因此無需了解存取路徑,存取路徑的選擇以及sQL語句的操作過程由系統(tǒng)自動完成。(3)面向集合的操作方式。sQL語言采用集合操作方式,不僅操作對象、查找結(jié)果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。(4)以同一種語法結(jié)構(gòu)提供兩種使用方式。sQL語言既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用于聯(lián)機交互的使用方式;作為嵌入式語言,它能夠嵌入到高級語言程序中,供程序員設(shè)計程序時使用。(5)語言簡捷,易學易用。2.3(1)select*fromSwhereA='10';(2)selectA,BfromS;(3)selectA,B,S.C,S.D,E,FfromS,TwhereS.C=T.CandS.D=T.D;(4)select*fromS,TwhereS.C=T.C;(5)select*fromS,TwhereS.A<T.E;(6)selectS.C,S.D,T.*fromS,T;4.用sQL語句建立第二章習題6中的4個表。答:對于S表:S(SNO,SNAME,STATUS,CITY);建S表:CREATETABLES(SnoC(2)UNIQUE,SnameC(6),StatusC(2),CityC(4));對于P表:P(PNO,PNAME,COLOR,WEIGHT);建P表:CREATETABLEP(PnoC(2)UNIQUE,PnameC(6),COLORC(2),WEIGHTINT);對于J表:J(JNO,JNAME,CITY);建J表:CREATETABLEJ(JnoC(2)UNlQUE,JNAMEC(8),CITYC(4))對于sPJ表:sPJ(sNo,PNo,JNo,QTY);建SPJ表:SPJ(SNO,PNO,JNO,QTY)CREATETABLESPJ(SnoC(2),PnoC(2),JNOC(2),QTYINT))針對建立的4個表用sQL語言完成第二章習題6中的查詢。(l)求供應工程Jl零件的供應商號碼SNO;SELECTDISTSNOFROMSPJWHEREJNO=’J1’(2)求供應工程Jl零件Pl的供應商號碼SNO;SELECTDISTSNOFROMSPJWHEREJNO='J1'ANDPNO='P1'(3)求供應工程Jl零件為紅色的供應商號碼SNO;SELECTSNOFROMSPJ,PWHEREJNO='J1'ANDSPJ.PNO=P.PNOANDCOLOR='紅'(4)求沒有使用天津供應商生產(chǎn)的紅色零件的工程號JNO;SELECTDISTJNOFROMSPJWHEREJNONOTIN(SELEJNOFROMSPJ,P,SWHERES.CITY='天津'ANDCOLOR='紅'ANDS.SNO=SPJ.SNOANDP.PNO=SPJ.PNO)。(5)求至少用了供應商Sl所供應的全部零件的工程號JNO;由于VFP不允許子查詢嵌套太深,將查詢分為兩步A、查詢S1供應商供應的零件號SELECTDISTPNOFROMSPJWHERESNO='S1'結(jié)果是(P1,P2)B、查詢哪一個工程既使用P1零件又使用P2零件。SELECTJNOFROMSPJWHEREPNO='P1'ANDJNOIN(SELECTJNOFROMSPJWHEREPNO='P2')5.針對上題中的四個表試用SQL語言完成以下各項操作:(1)找出所有供應商的姓名和所在城市。SELECTSNAME,CITYFROMS(2)找出所有零件的名稱、顏色、重量。SELECTPNAME,COLOR,WEIGHTFROMP(3)找出使用供應商S1所供應零件的工程號碼。SELECTDISTJNOFR

溫馨提示

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

評論

0/150

提交評論