填空
35【答案】TOP?3?WITH?TIES
【解析】希望選出商品數量最多的前3類商品,并獲得相應的商品類別和數量。with?ties一般是和Top?、?order?by相結合使用,表示包括與最后一行order?by后面的參數取值并列的結果。
36在SQL?Server?2008中,每個數據頁可存儲8060字節的數據。設表T有10000行數據,每行占用4031字節,則存儲該表數據大約需要?【36】?MB存儲空間,其空間利用率大約是?【37】?%。(存儲空間和空間利用率均保留到整數,小數點后按四舍五入處理)
【答案】80??50
【解析】在SQL?Server?中,數據存儲的基本單位是頁。為數據庫中的數據文件(.mdf?或?.ndf)分配的磁盤空間可以從邏輯上劃分成頁(從?0?到?n?連續編號),磁盤?I/O?操作在頁級執行。也就是說,SQL?Server?讀取或寫入所有數據頁。在?SQL?Server?中,頁的大小為?8?KB,這意味著?SQL?Server?數據庫中每?MB?有?128?頁,每頁的開頭是?96?字節的標頭,用于存儲有關頁的系統信息,此信息包括頁碼、頁類型、頁的可用空間以及擁有該頁的對象的分配單元?ID。行不能跨頁,但是行的部分可以移出行所在的頁,因此行實際可能非常大。頁的單個行中的最大數據量和開銷是?8,060?字節,由于題目中2行數據加起來的存儲空間大于數據頁,所以每頁只能存儲一行,因為1M有128頁,也就可以存儲128行,10000/128得80MB空間。至于空間利用率(實際存儲數據量/所占的存儲空間),考慮到每行4031字節為8060的一半,所以近似得到50%。
39數據庫管理系統一般通過周期性檢查?【40】?圖來實現死鎖檢測。
【答案】事務等待
【解析】事務等待圖是一個有向圖G=(T,?U),T為結點的集合,每個結點表示正在運行的事務;U為邊的集合,每條邊表示事務等待的情況。若事務T1等待事務T2,則T1、T2之間有一條有向邊,從?T1?指向?T2。如果發現圖中存在回路,則表示系統中出現了死鎖。
42【答案】REDO
【解析】系統故障造成數據庫不一致狀態的原因有兩個,一是未完成的事務對數據庫的更新可能已寫入數據庫,二是已提交事務對數據庫的更新可能還留在緩沖區沒來得及寫入數據庫。對于故障發生前已提交的事務(既有BEGIN?Transaction,又有commit)做redo操作,對于故障發生時尚未完成的事務(只有BEGIN?Transaction,而沒有commit或rollback)做undo操作。
31.數據字典是對系統中各類數據描述的集合,是進行詳細的數據收集和數據分析所獲得的主要成果。數據字典在數據庫設計中占有很重要的地位,通常包括數據項、數據結構、數據流、數據存儲和處理過程5個部分
32.【答案】完整性約束
【解析】數據模型通常由數據結構、數據操作和完整性約束三部分構成。數據的完整性約束是一組完整性規則,它是給定的數據模型中數據及其聯系所有的制約和依存的規則,用以限定符合數據模型的數據庫狀態及狀態的變化,以保證數據的正確、有效、相容。實體的完整性規定,主碼的任何屬性都不能為空,因為概念模型中實體和聯系都是可區分的,而且它們以碼為唯一性標識。如果主碼的屬性值可以為空,則意味著在概念模型中存在著不以碼為唯一性標識的實體。顯然前后矛盾。
33【解析】順序圖主要用于描述系統內對象之間的消息發送和接收序列。它有兩個坐標軸:縱向表示時間的持續過程,橫向表示對象,每一個對象用矩形框表示,縱向的虛線表示對象在序列中的執行情況。順序圖的第一個消息一般在左邊第一個對象的生命線頂端,其他消息按時間順序相繼插入順序圖中,后面發生的消息的線應比前面發生的消息的線畫得低一些,以表示它們之間的時間關系。
34兩個關系R與S在做自然連接時,選擇兩個關系在公共屬性上值相等的元組構成新的關系。關系R中某些元組有可能在S中不存在公共屬性上值相等的元組,從而造成R中這些元組在操作時被舍棄,同樣,S中某些元組也可能被舍棄。如果把舍棄的元組也保存在結果關系中,而在其它屬性上填空值(Null),那么這種連接就叫外連接。題中兩個表做外連接,那些沒有對應教師的系也會被留下來,方便查看。
41【答案】隔離
【解析】當多個用戶并發地存取數據時就會產生多個事務同時存取一個數據的情況,若對并發操作不加控制就可能會存取不正確的數據,破壞事務的一致性和數據庫的一致性。并發操作帶來的數據不一致性主要包括丟失修改、不可重復讀和讀"臟"數據,產生上述三類數據的不一致性主要原因就是并發操作破壞了事務的隔離性,所以數據庫管理系統必須提供并發控制機制。
43【答案】主題
【解析】數據倉庫是為了構建新的分析處理環境而出現的一種數據存儲和組織技術,基本特征包括:數據是面向主題的、集成的、非易失的、隨時間不斷變化的。主題是一個在較高層次上對數據的抽象,這使得面向主題的數據組織可以獨立于數據的處理邏輯,因而可以在這種數據環境上方便地開發新的分析型應用。
應用
46
設某教學管理系統,其查詢模塊需要提供如下功能:
Ⅰ.查詢系信息,列出各系編號、系名和系辦公電話;
Ⅱ.查詢某系教師的信息,列出教師號、教師名、工資和聘用日期;
Ⅲ.查詢某教師講授的課程信息,列出課程號、課程名和學分;
Ⅳ.查詢講授某門課程的教師信息,列出教師名和職稱;
Ⅴ.查詢某門課程的先修課程信息,列出先修課程號和先修課程名。
系統有如下業務規則:
Ⅰ.一個系可聘用多名教師,一名教師只能受聘于一個系;
Ⅱ.一名教師可講授多門課程,一門課程可由多名教師講授;
Ⅲ.一門課程可以有多門先修課程,也可以沒有先修課程。
(1)請根據以上查詢功能與業務規則,用ER圖描述該系統的概念模型。(5分)
(2)將ER圖轉換為滿足3NF的關系模式,并說明每個關系模式的主碼和外碼。(5分)
【解題思路】
E-R圖也稱實體-聯系圖,提供了表示實體類型、屬性和聯系的方法,用來描述現實世界的概念模型。為了簡化E-R圖的處置,現實世界的事物能作為屬性對待的則盡量作為屬性對待。實體與屬性的劃分給出如下兩條規則:①作為"屬性",不能再具有需要描述的性質,"屬性"必須是不可分的數據項,不能包含其它屬性。②"屬性"不能與其它實體有聯系,即E-R圖中所表示的聯系是實體之間的聯系。本題中一個系可以聘用多名教師,一名教師只能受聘于一個系,所以系實體與教師實體有聯系;一名教師可以講授多門課程,一門課程可由多名教師講授,所以教師實體與課程實體有聯系,一門課程可以有多門先修課程,所以課程間也有聯系。
(2)【參考答案】
由于題目要求滿足3NF范式,ER圖向關系模式轉換采用方法一,關系名采用實體名或聯系名。本題中有兩個一對多、一個多對多聯系,因此在轉換時一對多聯系轉換為獨立的關系模式;模式的屬性由聯系本身的屬性及兩個實體的鍵構成;主鍵由多端實體的鍵組成。m:n(多對多)聯系轉換成新的獨立的模式,模式的屬性由聯系本身的屬性及兩個實體的鍵構成,主鍵由兩端實體的鍵組合而成。
系(系編號,系名,系辦公室電話),無外碼
教師(教師號,教師名,職稱,工資,聘用日期,系編號),外碼:系編號
先修課程(先修課程號,先修課程名)
課程(課程號,課程名,學分,先修課程號),外碼:先修課程號
講授(教師號,課程號)
因為轉換過來的關系模式中,不存在屬性依賴于其他非主屬性,因此對轉換的結果不需要優化。
【解題思路】
在將ER圖向關系模式轉換時規則如下:
①1:1(一對一)聯系。
方法一:聯系轉換為獨立的關系模式;模式的屬性由聯系本身的屬性及兩個實體的鍵構成;主鍵由兩個實體中的任意一個鍵構成。
方法二:聯系與一端的實體的關系模式合并,即將聯系的屬性加入到實體的關系模式內,主鍵不變。
②1:m(一對多)聯系。
方法一:聯系轉換為獨立的關系模式;模式的屬性由聯系本身的屬性及兩個實體的鍵構成;主鍵由m端實體的鍵組成。
方法二:與m端的實體的關系模式合并,即將聯系的屬性加入到實體的關系模式內,主鍵不變。
③m:n(多對多)聯系轉換成新的獨立的模式,模式的屬性由聯系本身的屬性及兩個實體的鍵構成,主鍵由兩端實體的鍵組合而成。
關系模式滿足3NF,則必須滿足關系模式中每一個非主屬性既不部分依賴于碼也不傳遞依賴于碼,簡而言之,第三范式就是屬性不依賴于其他非主屬性。
47
設有商品表(商品號,商品名,單價)和銷售表(銷售單據號,商品號,銷售時間,銷售數量,銷售單價)。其中,商品號代表一類商品,商品號、單價、銷售數量和銷售單價均為整型。
請編寫查詢某年某商品的銷售總毛利的存儲過程,毛利=銷售數量×(銷售單價-單價)。要求商品號和年份為輸入參數,總毛利用輸出參數返回。
【參考答案】
CREATE?PROCEDURE?PRODUCT?@商品號?int,@年份?int,@毛利?int?output
AS?
DECLARE
@某商品銷售量?int,@某商品進價?int,@某商品銷售單價?int???/*中間變量定義*/
BEGIN
Select?@某商品進價=單價?from?商品表?where?@商品號=商品號
Select?@某商品銷售單價=銷售單價,@某商品銷售量=count(*)?from?銷售表?where?
@商品號=商品號?and?銷售時間=@年份?
IF?@某商品進價?is?NULL?THEN??????/*判斷該商品是否存在*/
??ROLLBACK;
??RETURN;
END?IF
IF?@某商品銷售單價?is?NULL?THEN???/*判斷該商品是否可賣*/
ROLLBACK;
??RETURN;
END?IF
SET?@毛利=(@某商品銷售單價-@某商品進價)*@某商品銷售量
GO
【解題思路】
存儲過程是由PL/SQL語句書寫的過程,這個過程經編譯和優化后存儲在數據庫服務器中,使用時只要調用即可。使用存儲過程具有以下優點:其已經編譯和優化過了,所以運行效率高,提供了在服務器端快速執行SQL語句的有效途徑;存儲過程降低了客戶端和服務器之間的通信量;方便實施企業規則,當企業規則發生變化時只要修改存儲過程,而無需修改其他應用程序。
創建存儲過程:
create?procedure?過程名
@[參數名]?[類型],@[參數名]?[類型]?/*過程首部*/
As
Declare/*as下面對應的<PL/SQL>塊為過程體*/
………
begin
………
end
如上所示,存儲過程包括過程首部和過程體。過程名是數據庫服務器合法的對象標識;參數列表:用名字來標識調用時給出的參數值,必須指定值的數據類型。參數可以是輸入參數或輸出參數,默認為輸入參數。
48
設某全國性的運輸企業建立了大型OLTP系統,并在該系統之上建立了數據倉庫。OLTP系統和數據倉庫中有如下數據表:
運輸明細表(運輸單ID,發送站ID,終到站ID,貨物ID,貨物重量,運輸價格,發貨日期)
匯總表1(發送站ID,終到站ID,貨物ID,發貨日期,總重,總運價)
匯總表2(發送站ID,終到地區ID,貨物ID,發貨日期,總重,總運價)
匯總表3(發送站ID,終到站ID,貨物ID,發貨月份,總重,總運價)
匯總表4(發送地區ID,終到地區ID,貨物類別ID,發貨日期,總重,總運價)
該企業管理的貨運站約有100個,貨物約有500種共10類,各匯總表都建有主碼,且各表有合理的維護策略,在每次維護后數據能保持一致。設有視圖V,該視圖的訪問頻率很高,其查詢結果模式為(發送地區ID,終到站ID,發貨月份,總重,總運價),該視圖現以匯總表1為計算數據源。經監控發現,匯總表1的被訪問頻率過高,導致系統整體性能下降,而其它匯總表被訪問頻率較低。在不增加匯總表和索引的情況下,請給出一個改善系統服務性能的優化方案,并簡要說明理由。
【參考答案】
由于匯總表1和視圖的模式訪問頻率都很高,而且視圖的數據源來自匯總表1,又因為其他匯總表的訪問率較低,所以只需要將視圖的數據源綁定為匯總表3,因為匯總表3也可以滿足視圖的輸出模式。這樣不僅提升了匯總表3的數據訪問率,而且降低了匯總表1的數據訪問率,系統性能和服務性能得到了很大的優化。又因為貨物約有500種,共10類,可以再建立一個視圖綁定數據源為匯總表4,這樣就可以充分利用匯總表4的數據信息,從而可以進一步完善系統性能的優化。
【解題思路】
視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖并不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,并且在引用視圖時動態生成。對其中所引用的基礎表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當前或其他數據庫的一個或多個表,或者其他視圖。分布式查詢也可用于定義使用多個異類源數據的視圖。
從用戶角度來看,一個視圖是從一個特定的角度來查看數據庫中的數據。從數據庫系統內部來看,一個視圖是由SELECT語句組成的查詢定義的虛擬表。從數據庫系統內部來看,視圖是由一張或多張表中的數據組成的,從數據庫系統外部來看,視圖就如同一張表一樣,對表能夠進行的一般操作都可以應用于視圖,如查詢,插入,修改,刪除操作等。
視圖一經定義便存儲在數據庫中,與其相對應的數據并沒有像表那樣又在數據庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。對視圖的操作與對表的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。
當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化,同時,若基本表的數據發生變化,則這種變化也可以自動地反映到視圖中