計(jì)算機(jī)數(shù)據(jù)庫(kù)三級(jí)設(shè)計(jì)與應(yīng)用題_第1頁(yè)
計(jì)算機(jī)數(shù)據(jù)庫(kù)三級(jí)設(shè)計(jì)與應(yīng)用題_第2頁(yè)
計(jì)算機(jī)數(shù)據(jù)庫(kù)三級(jí)設(shè)計(jì)與應(yīng)用題_第3頁(yè)
計(jì)算機(jī)數(shù)據(jù)庫(kù)三級(jí)設(shè)計(jì)與應(yīng)用題_第4頁(yè)
計(jì)算機(jī)數(shù)據(jù)庫(kù)三級(jí)設(shè)計(jì)與應(yīng)用題_第5頁(yè)
已閱讀5頁(yè),還剩12頁(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ì)與應(yīng)用題1、設(shè)某教學(xué)管理系統(tǒng),其查詢模塊需要提供如下功能:查詢系信息,列出各系編號(hào)、系名和系辦公電話;查詢某系教師的信息,列出教師號(hào)、教師名、工資和聘用日期;查詢某教師講授的課程信息,列出課程號(hào)、課程名和學(xué)分;查詢講授某門課程的教師信息,列出教師名和職稱;查詢某門課程的先修課程信息,列出先修課程號(hào)和先修課程名。系統(tǒng)有如下業(yè)務(wù)規(guī)則:一個(gè)系可聘用多名教師,一名教師只能受聘于一個(gè)系;一名教師可講授多門課程,一門課程可由多名教師講授;一門課程可以有多門先修課程,也可以沒(méi)有先修課程。(1)請(qǐng)根據(jù)以上查詢功能與業(yè)務(wù)規(guī)則,用ER圖描述該系統(tǒng)的概念模型。(5分)(2)將ER圖轉(zhuǎn)換為滿足3NF的關(guān)系模式,并

2、說(shuō)明每個(gè)關(guān)系模式的主碼和外碼。(5分)(1)【解題思路】E-R圖也稱實(shí)體-聯(lián)系圖,提供了表示實(shí)體類型、屬性和聯(lián)系的方法,用來(lái)描述現(xiàn)實(shí)世界的概念模型。為了簡(jiǎn)化E-R圖的處置,現(xiàn)實(shí)世界的事物能作為屬性對(duì)待的則盡量作為屬性對(duì)待。實(shí)體與屬性的劃分給出如下兩條規(guī)則:作為"屬性",不能再具有需要描述的性質(zhì),"屬性"必須是不可分的數(shù)據(jù)項(xiàng),不能包含其它屬性。"屬性"不能與其它實(shí)體有聯(lián)系,即E-R圖中所表示的聯(lián)系是實(shí)體之間的聯(lián)系。本題中一個(gè)系可以聘用多名教師,一名教師只能受聘于一個(gè)系,所以系實(shí)體與教師實(shí)體有聯(lián)系;一名教師可以講授多門課程,一門課程可由多

3、名教師講授,所以教師實(shí)體與課程實(shí)體有聯(lián)系,一門課程可以有多門先修課程,所以課程間也有聯(lián)系。(2)【解題思路】要想使轉(zhuǎn)換生成的關(guān)系模式滿足3NF,則必須滿足關(guān)系模式中每一個(gè)非主屬性既不部分依賴于碼也不傳遞依賴于碼。2、設(shè)有商品表(商品號(hào),商品名,單價(jià))和銷售表(銷售單據(jù)號(hào),商品號(hào),銷售時(shí)間,銷售數(shù)量,銷售單價(jià))。其中,商品號(hào)代表一類商品,商品號(hào)、單價(jià)、銷售數(shù)量和銷售單價(jià)均為整型。請(qǐng)編寫查詢某年某商品的銷售總毛利的存儲(chǔ)過(guò)程,毛利=銷售數(shù)量×(銷售單價(jià)單價(jià))。要求商品號(hào)和年份為輸入?yún)?shù),總毛利用輸出參數(shù)返回。(10分)【解題思路】存儲(chǔ)過(guò)程是由PL/SQL語(yǔ)句書寫的過(guò)程,這個(gè)過(guò)程經(jīng)編譯和優(yōu)化

4、后存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中,使用時(shí)只要調(diào)用即可。使用存儲(chǔ)過(guò)程具有以下優(yōu)點(diǎn):其已經(jīng)編譯和優(yōu)化過(guò)了,所以運(yùn)行效率高,提供了在服務(wù)器端快速執(zhí)行SQL語(yǔ)句的有效途徑;存儲(chǔ)過(guò)程降低了客戶端和服務(wù)器之間的通信量;方便實(shí)施企業(yè)規(guī)則,當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí)只要修改存儲(chǔ)過(guò)程,而無(wú)需修改其他應(yīng)用程序。創(chuàng)建存儲(chǔ)過(guò)程:create procedure 過(guò)程名參數(shù)名 類型,參數(shù)名 類型 /*過(guò)程首部*/AsDeclare/*as下面對(duì)應(yīng)的<PL/SQL>塊為過(guò)程體*/.begin.end如上所示,存儲(chǔ)過(guò)程包括過(guò)程首部和過(guò)程體。過(guò)程名是數(shù)據(jù)庫(kù)服務(wù)器合法的對(duì)象標(biāo)識(shí);參數(shù)列表:用名字來(lái)標(biāo)識(shí)調(diào)用時(shí)給出的參數(shù)值,必須指定值

5、的數(shù)據(jù)類型。參數(shù)可以是輸入?yún)?shù)或輸出參數(shù),默認(rèn)為輸入?yún)?shù)。 3、設(shè)某全國(guó)性的運(yùn)輸企業(yè)建立了大型OLTP系統(tǒng),并在該系統(tǒng)之上建立了數(shù)據(jù)倉(cāng)庫(kù)。OLTP系統(tǒng)和數(shù)據(jù)倉(cāng)庫(kù)中有如下數(shù)據(jù)表:運(yùn)輸明細(xì)表(運(yùn)輸單ID,發(fā)送站ID,終到站ID,貨物ID,貨物重量,運(yùn)輸價(jià)格,發(fā)貨日期)匯總表1(發(fā)送站ID,終到站ID,貨物ID,發(fā)貨日期,總重,總運(yùn)價(jià))匯總表2(發(fā)送站ID,終到地區(qū)ID,貨物ID,發(fā)貨日期,總重,總運(yùn)價(jià))匯總表3(發(fā)送站ID,終到站ID,貨物ID,發(fā)貨月份,總重,總運(yùn)價(jià))匯總表4(發(fā)送地區(qū)ID,終到地區(qū)ID,貨物類別ID,發(fā)貨日期,總重,總運(yùn)價(jià))該企業(yè)管理的貨運(yùn)站約有100個(gè),貨物約有500種共10

6、類,各匯總表都建有主碼,且各表有合理的維護(hù)策略,在每次維護(hù)后數(shù)據(jù)能保持一致。設(shè)有視圖V,該視圖的訪問(wèn)頻率很高,其查詢結(jié)果模式為(發(fā)送地區(qū)ID,終到站ID,發(fā)貨月份,總重,總運(yùn)價(jià)),該視圖現(xiàn)以匯總表1為計(jì)算數(shù)據(jù)源。經(jīng)監(jiān)控發(fā)現(xiàn),匯總表1的被訪問(wèn)頻率過(guò)高,導(dǎo)致系統(tǒng)整體性能下降,而其它匯總表被訪問(wèn)頻率較低。在不增加匯總表和索引的情況下,請(qǐng)給出一個(gè)改善系統(tǒng)服務(wù)性能的優(yōu)化方案,并簡(jiǎn)要說(shuō)明理由。(10分)【解題思路】計(jì)算機(jī)系統(tǒng)中存在著兩類不同的數(shù)據(jù)處理工作:操作型處理和分析型處理,也稱作OLTP(聯(lián)機(jī)事務(wù)處理)和OLAP(聯(lián)機(jī)分析處理)。操作型處理也叫事務(wù)處理,是指對(duì)數(shù)據(jù)庫(kù)聯(lián)機(jī)的日常操作,通常是對(duì)一個(gè)或一組

7、紀(jì)錄的查詢或修改,例如火車售票系統(tǒng)、銀行通存通兌系統(tǒng)、稅務(wù)征收管理系統(tǒng)等。這些系統(tǒng)要求快速響應(yīng)用戶請(qǐng)求,對(duì)數(shù)據(jù)的安全性、完整性以及事務(wù)吞吐量要求很高。結(jié)合本題中存在的問(wèn)題,視圖本身的訪問(wèn)量很高,而又僅僅以匯總表1為計(jì)算數(shù)據(jù)源,而其它匯總表訪問(wèn)率低,導(dǎo)致了資源利用不合理。因此本題考察了聯(lián)機(jī)事務(wù)處理中的資源調(diào)度問(wèn)題。4、設(shè)在SQL Server2008某數(shù)據(jù)庫(kù)中有商品表和銷售表,兩個(gè)表的定義如下: (新增題庫(kù)一)CREATE TABLE 商品表(商品號(hào) char(10) PRIMARY KEY,商品名 varchar(40),類別 varchar(20),進(jìn)貨單價(jià) int );CREATETABL

8、E 銷售表(商品號(hào) char(10) REFERENCES 商品表(商品號(hào)),銷售時(shí)間 datetime,銷售數(shù)量 int,銷售單價(jià) int,PRIMARYKEY(商品號(hào),銷售時(shí)間) );現(xiàn)要?jiǎng)?chuàng)建一個(gè)存儲(chǔ)過(guò)程:查詢指定類別的每種商品當(dāng)前年銷售總金額(銷售總金額=銷售單價(jià)* 銷售數(shù)量)。請(qǐng)補(bǔ)全下列代碼。CREATEPROC p_TotalProfitlb varchar(20)ASSELECT 商品名,(SELECTFROM 銷售表 t1 WHEREand= year(Getdate() AS 銷售總金額FROM 商品表 t2 WHERE【解題思路】整個(gè)select語(yǔ)句的含義是:根據(jù)where子

9、句的條件表達(dá)式,從From子句指定的基本表或視圖中找出滿足條件的元組,再按select子句中的目標(biāo)列表達(dá)式,選出元組中的屬性值形成結(jié)果表。該題中(SELECT FROM 銷售表 t1 WHERE and = year(Getdate()是個(gè)嵌套,別名叫做銷售總金額。語(yǔ)句執(zhí)行過(guò)程:先從商品表中按照第二個(gè)where形成一個(gè)初步查詢結(jié)果。由于只有商品表中有類別,因此可知第四空填寫:t2.類別=lb(t2是商品表的別名,t1是銷售表的別名)。由此可知該步是按給定類別查詢。銷售總金額語(yǔ)句就應(yīng)該在第一部的基礎(chǔ)上求某年的總額。因此可以推斷第三空是獲得銷售時(shí)間語(yǔ)句。因此該空填寫t1.銷售時(shí)間。由于是在第一步基

10、礎(chǔ)上的查詢,所以應(yīng)該實(shí)行連表查詢,第二空應(yīng)該填寫連接的條件,即t1.商品號(hào)=t2.商品號(hào)。第一空應(yīng)該是求總額的語(yǔ)句。銷售總金額=銷售單價(jià)* 銷售數(shù)量,即銷售單價(jià)*SUM(銷售數(shù)量)?!緟⒖即鸢浮俊镜?空】銷售單價(jià)*SUM(銷售數(shù)量)【第2空】t1.商品號(hào)=t2.商品號(hào)【第3空】t1.銷售時(shí)間【第4空】t2.類別=lb5、設(shè)某超市經(jīng)營(yíng)管理系統(tǒng)使用SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng),此數(shù)據(jù)庫(kù)服務(wù)器有2顆CPU、16GB內(nèi)存、2TB磁盤。上線運(yùn)行1年后,用戶在生成每天每個(gè)銷售人員及每個(gè)收銀臺(tái)的總銷售額報(bào)表時(shí)速度緩慢。經(jīng)技術(shù)人員分析,發(fā)現(xiàn)速度緩慢的原因?yàn)殇N售單據(jù)表和銷售單據(jù)明細(xì)表數(shù)據(jù)量合計(jì)已

11、經(jīng)達(dá)到60GB。已知這兩個(gè)表結(jié)構(gòu)如下:銷售單據(jù)表(銷售單據(jù)編號(hào),銷售時(shí)間,銷售人員編號(hào),收銀臺(tái)編號(hào))銷售單據(jù)明細(xì)表(銷售單據(jù)編號(hào),商品編號(hào),單價(jià),數(shù)量)在進(jìn)行此報(bào)表計(jì)算時(shí)數(shù)據(jù)庫(kù)服務(wù)器CPU消耗非常高。為了優(yōu)化此操作,某工程師建議在銷售單據(jù)表中增加"付款總金額"屬性,取值由觸發(fā)器自動(dòng)計(jì)算。請(qǐng)從磁盤空間使用、銷售操作時(shí)對(duì)數(shù)據(jù)庫(kù)服務(wù)器的影響、數(shù)據(jù)一致性以及對(duì)總銷售額計(jì)算速度影響方面分析此方案優(yōu)劣。請(qǐng)判斷此方案是否可行,并從時(shí)空代價(jià)和優(yōu)化效果方面分析原因?!窘忸}思路】在數(shù)據(jù)庫(kù)設(shè)計(jì)階段,主要強(qiáng)調(diào)的是高效率利用存儲(chǔ)空間,減少數(shù)據(jù)的冗余,減少數(shù)據(jù)的不一致性,這個(gè)過(guò)程也就是規(guī)范化的過(guò)程。但

12、是在數(shù)據(jù)庫(kù)運(yùn)行階段要考慮到高效率的進(jìn)行數(shù)據(jù)處理。完全規(guī)劃化的數(shù)據(jù)庫(kù)會(huì)產(chǎn)生很多表,對(duì)于一個(gè)頻繁使用的查詢,如果它要求操作多個(gè)相關(guān)表中的數(shù)據(jù),則每次為生成需要的查詢結(jié)果而在連接多個(gè)表中相關(guān)行時(shí),數(shù)據(jù)庫(kù)管理系統(tǒng)就會(huì)消耗更多的計(jì)算資源,因?yàn)檫B接操作非常耗時(shí)。而反規(guī)范化是將規(guī)范化的關(guān)系轉(zhuǎn)換為非規(guī)范化的關(guān)系的過(guò)程,目的是提高查詢的效率。常見(jiàn)的方法有增加派生冗余列,增加冗余列,重新組表,分割表和新增匯總表等方法。該題解決的方式就是增加派生冗余列-"付款總金額"。派生性冗余列是指表中增加的列由表中的一些數(shù)據(jù)項(xiàng)經(jīng)過(guò)計(jì)算而成,它的作用是查詢時(shí)減少連接操作,避免使用聚合函數(shù)。例如銷售單據(jù)明細(xì)表(

13、銷售單據(jù)編號(hào),商品編號(hào),單價(jià),數(shù)量)中增加"付款總金額",因?yàn)楦犊羁偨痤~=單價(jià)*數(shù)量得到,說(shuō)明"付款總金額"是派生性冗余列。如果不要該字段,那么每次使用總價(jià)時(shí),都要先執(zhí)行代碼計(jì)算后才能使用,如果商品數(shù)量較多,而且要頻繁使用"付款總金額"時(shí),計(jì)算"付款總金額"時(shí)執(zhí)行的次數(shù)也會(huì)隨著增加,這顯然會(huì)影響數(shù)據(jù)庫(kù)的執(zhí)行效率。若增加"付款總金額"這個(gè)派生性冗余字段,雖然破壞了規(guī)范化原則,但只要執(zhí)行一次計(jì)算"付款總金額"就可以把商品金額存在數(shù)據(jù)庫(kù)中,以后不管什么時(shí)候使用"付款總金額

14、"字段,只需要提取其值就可以了,不必在執(zhí)行代碼了。因此增加"付款總金額",雖然提高了磁盤空間的使用,但是可以提高系統(tǒng)執(zhí)行的效率,達(dá)到以空間換時(shí)間的目的。由此可以看出,在數(shù)據(jù)單據(jù)表中增加"付款總金額"不是正確的優(yōu)化方法,應(yīng)該在數(shù)據(jù)單據(jù)明細(xì)表中增加"付款總金額",這樣才能提高查詢效率?!緟⒖即鸢浮?(新增題庫(kù)一)此方案不可行。觸發(fā)器可以通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表進(jìn)行層疊更改,這比直接把代碼寫在前臺(tái)的做法更安全合理,保證了數(shù)據(jù)的一致性,但同時(shí)增加了磁盤空間的消耗。在超市經(jīng)營(yíng)中要批量操作、多次觸發(fā)的情況下,觸發(fā)器的效率低,因?yàn)樗喈?dāng)于每次

15、都執(zhí)行一段SQL語(yǔ)句,使cpu的消耗更高。因而從時(shí)空代價(jià)角度來(lái)說(shuō)并不能達(dá)到優(yōu)化的效果,故該方案不可行。6、設(shè)某連鎖商店數(shù)據(jù)庫(kù)中有關(guān)系模式R:R(商店編號(hào),商品編號(hào),庫(kù)存數(shù)量,部門編號(hào),負(fù)責(zé)人)如果規(guī)定:每個(gè)商店的每種商品只在一個(gè)部門銷售,每個(gè)商店的每個(gè)部門只有一個(gè)負(fù)責(zé)人,每個(gè)商店的每種商品只有一個(gè)庫(kù)存數(shù)量。(10分)(1)請(qǐng)根據(jù)上述規(guī)定,寫出關(guān)系模式R的函數(shù)依賴集;(2)請(qǐng)給出關(guān)系模式R的候選碼;(3)請(qǐng)說(shuō)明關(guān)系模式R屬于第幾范式,并給出理由;(4)請(qǐng)將R分解成滿足3NF的關(guān)系模式。(1)【解題思路】函數(shù)依賴定義:設(shè)R(U)是屬性集U上的關(guān)系模式,X,Y是U的子集,若對(duì)于R(U)的任意一個(gè)可能

16、的關(guān)系r,r中不可能存在兩個(gè)元組在X上的屬性值相等,在Y上的屬性值不等,則稱X函數(shù)確定Y或Y函數(shù)依賴X,記作X->Y。函數(shù)依賴是指關(guān)系R的一切關(guān)系均要滿足的約束條件。(2)【解題思路】設(shè)K為R<U,F>中的屬性或?qū)傩越M合,若U完全依賴于K,則K為R的候選碼。(3)【解題思路】關(guān)系數(shù)據(jù)庫(kù)是要滿足一定要求的。滿足最低要求的叫第一范式,在第一范式中滿足進(jìn)一步要求的為第二范式,其余以此類推。顯然該關(guān)系模式滿足第一范式,接下來(lái)檢查其是否滿足第二范式。在第二范式中,要求關(guān)系模式中不存在部分依賴,每一個(gè)非主屬性完全依賴于碼,而根據(jù)第一空可得如下依賴關(guān)系:(部門編號(hào),商店編號(hào))->負(fù)責(zé)

17、人,所以屬于第一范式。它的非主屬性有3個(gè)(不包含在任何候選碼中的屬性):部門編號(hào)、負(fù)責(zé)人、庫(kù)存量,并都完全函數(shù)依賴于主碼。將(商店編號(hào)、商品編號(hào))記作X,(商店編號(hào)、部門編號(hào))記作Y,負(fù)責(zé)人記作Z,由此可以看出,存在傳遞依賴,故不屬于第三范式。(4)第三范式中要求每一個(gè)屬性既不部分依賴于碼也不傳遞依賴于碼。7、在某數(shù)據(jù)庫(kù)中,相關(guān)表的建表語(yǔ)句如下: (新增題庫(kù)二)create tableT1( a1 int primary key, a2 int, a3 int foreign key references T2(a3);create tableT2( a3 int primary key, a

18、4 int, a5 int foreign key references T2(a3);create tableT3( a1 int, a3 int, a6 int,primary key (a1, a3),a1 foreign key references T1(a1),a3 foreign key references T2(a3);請(qǐng)畫出相應(yīng)的E-R圖,使得可以從該E-R圖推導(dǎo)出上述表定義,其中實(shí)體和聯(lián)系的名稱可以自定,實(shí)體的主碼屬性請(qǐng)使用下劃線標(biāo)明?!緟⒖即鸢浮浚ㄐ略鲱}庫(kù)二)8、設(shè)某超市經(jīng)營(yíng)管理系統(tǒng)使用SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng)。為了保證數(shù)據(jù)庫(kù)可靠運(yùn)行,數(shù)據(jù)庫(kù)管理員設(shè)

19、置了每天夜間對(duì)數(shù)據(jù)庫(kù)一次全備份,備份數(shù)據(jù)保留2個(gè)月的備份策略。上線運(yùn)行1年后,SQL Server數(shù)據(jù)庫(kù)中數(shù)據(jù)已經(jīng)達(dá)到近200GB。每天夜間要運(yùn)行3個(gè)小時(shí)才能將數(shù)據(jù)庫(kù)進(jìn)行一次全備份,影響了夜間統(tǒng)計(jì)等業(yè)務(wù)正常運(yùn)行。同時(shí),備份空間也非常緊張。請(qǐng)解釋出現(xiàn)此現(xiàn)象的原因,并提出優(yōu)化的方法?!緟⒖即鸢浮慨a(chǎn)生此現(xiàn)象的原因是系統(tǒng)采用了全備份策略,隨著業(yè)務(wù)的開(kāi)展,需要備份數(shù)據(jù)量逐漸增大,備份時(shí)間越來(lái)越長(zhǎng),占用了系統(tǒng)的資源,從而影響了其它業(yè)務(wù)。解決的方法是采用全備份+差異備份+日志備份組合策略備份數(shù)據(jù)庫(kù)。全備份+差異備份+日志備份組合策略是指在全備份中加一些差異備份,比如每周日0:00進(jìn)行一次全備份,然后每天0:

20、00點(diǎn)進(jìn)行一次差異備份,然后再兩次差異備份之間增加一些日志備份。這樣做備份和恢復(fù)的速度都比較快,而當(dāng)系統(tǒng)出現(xiàn)故障時(shí),丟失的數(shù)據(jù)也很少。備份示意圖如下:如果系統(tǒng)在周二的差異備份之前出現(xiàn)故障,則應(yīng)首先嘗試備份活動(dòng)日志(日志尾部),然后再按順序恢復(fù)全備份1,差異備份1,日志備份3和日志備份4,然后再恢復(fù)備份的尾部日志。如果尾部日志備份成功,則數(shù)據(jù)庫(kù)可以還原到故障點(diǎn)。這種備份策略雖然備份頻率高,但是備份時(shí)間短,占用的備份空間也小,而且不會(huì)產(chǎn)生數(shù)據(jù)丟失。如果系統(tǒng)在周二的差異備份之前出現(xiàn)故障,則應(yīng)首先嘗試備份活動(dòng)日志(日志尾部),然后再按順序恢復(fù)全備份1,差異備份1,日志備份3和日志備份4,然后再恢復(fù)備份

21、的尾部日志。如果尾部日志備份成功,則數(shù)據(jù)庫(kù)可以還原到故障點(diǎn)。這種備份策略雖然備份頻率高,但是備份時(shí)間短,占用的備份空間也小,而且不會(huì)產(chǎn)生數(shù)據(jù)丟失。1、設(shè)有商品表(商品號(hào),商品名,單價(jià))和銷售表(銷售單據(jù)號(hào),商品號(hào),銷售時(shí)間,銷售數(shù)量,銷售單價(jià))。其中,商品號(hào)代表一類商品,商品號(hào)、單價(jià)、銷售數(shù)量和銷售單價(jià)均為整型。請(qǐng)編寫查詢某年某商品的銷售總毛利的存儲(chǔ)過(guò)程,毛利=銷售數(shù)量×(銷售單價(jià)單價(jià))。要求商品號(hào)和年份為輸入?yún)?shù),總毛利用輸出參數(shù)返回。(10分)CREATE PROCEDURE PRODUCT 商品號(hào) int,年份 int,毛利 int outputAS DECLARE 某商品銷售

22、量 int,某商品進(jìn)價(jià) int,某商品銷售單價(jià) int /*中間變量定義*/BEGIN Select 某商品進(jìn)價(jià)=單價(jià) from 商品表 where 商品號(hào)=商品號(hào) Select 某商品銷售單價(jià)=銷售單價(jià),某商品銷售量=count(*) from 銷售表 where 商品號(hào)=商品號(hào) and 銷售時(shí)間=年份 IF 某商品進(jìn)價(jià) is NULL THEN /*判斷該商品是否存在*/ROLLBACK;RETURN;END IFIF 某商品銷售單價(jià) is NULL THEN /*判斷該商品是否可賣*/ROLLBACK;RETURN;END IFSET 毛利=(某商品銷售單價(jià)-某商品進(jìn)價(jià))*某商品銷售量G

23、O2、在SQL Server 2008中,設(shè)某數(shù)據(jù)庫(kù)中有商品表(商品號(hào),商品名,進(jìn)貨價(jià)格),商品號(hào)為主碼;銷售表(商品號(hào),銷售時(shí)間,銷售數(shù)量,銷售價(jià)格,本次利潤(rùn)),商品號(hào)和銷售時(shí)間為主碼,銷售價(jià)格為本次銷售商品的單價(jià)?,F(xiàn)要求每當(dāng)在銷售表中插入前4列數(shù)據(jù)時(shí)(假設(shè)一次只插入一行數(shù)據(jù)),系統(tǒng)自動(dòng)計(jì)算本次銷售產(chǎn)生的利潤(rùn),并將該利潤(rùn)賦給銷售表的第5列"本次利潤(rùn)"。請(qǐng)編寫實(shí)現(xiàn)上述功能的后觸發(fā)型觸發(fā)器代碼。(10分)CREATE TRIGGER calcu_productAFTER INSERT ON 銷售表FOR EACH ROWAS BEGINDECLARE PurchasePris

24、e float /*對(duì)應(yīng)商品的進(jìn)價(jià)的參數(shù)*/SELECT PurchasePrise=進(jìn)貨價(jià)格 FROM 商品表 WHERE 商品號(hào)=new.商品號(hào) UPDATE 銷售表 SET 本次利潤(rùn)=new.銷售數(shù)量*(new.銷售價(jià)格-PurchasePrise) WHERE 商品號(hào)=new.商品號(hào)AND 銷售時(shí)間=new.銷售時(shí)間 /*因?yàn)槭切屑?jí)觸發(fā)器,所以可以使用更新后的新值,用new*/ END3、設(shè)在SQL Server 2008某數(shù)據(jù)庫(kù)中,已建立了四個(gè)文件組:fg1、fg2、fg3和fg4,以及一個(gè)分區(qū)函數(shù)RangePF1。RangePF1的定義代碼如下: CREATE PARTITION

25、FUNCTION RangePF1(int) AS RANGE LEFT FOR VALUES(100,200,300)(1) 請(qǐng)基于RangePF1創(chuàng)建一個(gè)分區(qū)方案RangePS1,每個(gè)分區(qū)對(duì)應(yīng)一個(gè)文件組。(5分)create partition scheme RangePS1as partition RangePF1to (fg1, fg1, fg1, fg2)(2)請(qǐng)使用RangePS1創(chuàng)建一個(gè)分區(qū)表PartitionT(Gid, GoodName, Price),該表基于Gid列創(chuàng)建分區(qū)。其中Gid:int類型,取值大于等于1;GoodName:統(tǒng)一字符編碼可變長(zhǎng)類型,最多可存儲(chǔ)20個(gè)

26、漢字;Price:定點(diǎn)小數(shù)類型,小數(shù)部分1位,整數(shù)部分到千位。(5分)創(chuàng)建分區(qū)表:create table orders(GID int identity(1,1) primary key,GoodName varchar(40),Price float)on RangePS1(GID)4、 設(shè)在SQL Server 2008某數(shù)據(jù)庫(kù)中有商品表和銷售表,兩個(gè)表的定義如下:CREATE TABLE 商品表(商品號(hào) char(10)PRIMARY KEY,商品名 varchar(40),類別 varchar(20),進(jìn)貨單價(jià) int )CREATE TABLE 銷售表(商品號(hào) char(10),銷

27、售時(shí)間 datetime,銷售數(shù)量 int,銷售單價(jià) int,PRIMARY KEY(商品號(hào),銷售時(shí)間))下面是一個(gè)用戶定義的多語(yǔ)句表值函數(shù),它接受類別作為輸入?yún)?shù),返回該類別下的每種商品在2012年的銷售總利潤(rùn),并將結(jié)果按照銷售總利潤(rùn)的降序輸出。請(qǐng)補(bǔ)全該函數(shù)定義代碼。(10分)CREATE FUNCTION f_Profit (lb char(10) 【1】ProfitTable【2】(商品號(hào) char(10),總利潤(rùn) int )ASBEGIN INSERT INTO ProfitTable 【3】【4】END第一空:RETURNS第二空:table第三空:a SELECT a.商品號(hào),SU

28、M(銷售數(shù)量*(銷售單價(jià)-進(jìn)貨單價(jià)) AS總利潤(rùn) FROM 銷售表 a JOIN商品表b ON a. 商品號(hào)=b. 商品號(hào) WHERE a.商品號(hào) IN(SELECT 商品號(hào) FROM 商品表 WHERE 類別=lb) GROUP BY a. 商品號(hào)ORDER BY 總利潤(rùn) DESC第四空:RETURNRrofit Table5、設(shè)有圖書管理數(shù)據(jù)庫(kù),包含三張表: 圖書明細(xì)表(圖書編號(hào),圖書類別,圖書名稱,作者,出版社,出版日期,定價(jià));讀者表(借書證號(hào),姓名,系別,辦證日期) ;借出信息表(借出編號(hào),借書證號(hào),圖書編號(hào),借書日期);完成下列操作:(10分)定義一個(gè)多語(yǔ)句表值函數(shù),用于查詢學(xué)生借

29、書情況,只需提供參數(shù):借書證號(hào),就可以通過(guò)調(diào)用函數(shù)返回此學(xué)生的借書情況,若有借書籍,則返回所借書籍的編號(hào)、書籍名稱、定價(jià)和借書日期;若沒(méi)有在借書籍,則返回記錄為空。設(shè)函數(shù)名為:f_BorrowBook(jszh char(20)。CREATE FUNCTION BorrowBook (jszh char(20)RETURNS jsqkb TABLE (書籍編號(hào) char(20), 書籍名稱 char(50), 定價(jià) float, 借書日期 datetime)ASBEGIN INSERT jsqkb SELECT圖書明細(xì)表.圖書編號(hào),圖書名稱,定價(jià),借出信息表.借書日期 FROM,借出信息表,圖

30、書明細(xì)表 WHERE借出信息表.圖書編號(hào)=圖書明細(xì)表.圖書編號(hào) AND借出信息表.借書證號(hào)=jszh RETURN END6、某書店采用了SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng),該書店有一個(gè)需求,需要統(tǒng)計(jì)指定年份中每一本書的銷售總額,例如:查詢2012年所有書的銷售總額。已知圖書結(jié)構(gòu)如下:圖書表(書號(hào)BOOK_ID,書名BOOK_NAME,單價(jià)BOOK_PRICE)銷售表(書號(hào)BOOK_ID,銷售時(shí)間SALE_TIME,銷售數(shù)量SALE_NUM)。假設(shè)單價(jià)和銷售數(shù)量均為int型,書號(hào)和書名均為varchar(50)類型,銷售時(shí)間為datetime型。請(qǐng)給出滿足如下要求的多語(yǔ)句表值函數(shù),該

31、函數(shù)統(tǒng)計(jì)指定年份中每本書的銷售總額。(10分)設(shè)函數(shù)名為:BOOK_PROFIT(year int),函數(shù)的返回結(jié)果格式如下:書號(hào) 銷售總額B001 60000A004 50000CREATE FUNCTION BOOK_PROFIT (year int)RETURNS f_ BOOK_PROFIT table(書號(hào) varchar(50),銷售總額 int)ASBEGININSERT INTO f_ BOOK_PROFITSELECT a.書號(hào),SUM(a.單價(jià)*b.銷售數(shù)量)FROM 圖書表 a JOIN 銷售表 b ON a.書號(hào)=b.書號(hào)WHERE year(b.銷售時(shí)間)=yearG

32、ROUP BY a.書號(hào)RETURNEND7、設(shè)在采用SQL Server 2008數(shù)據(jù)庫(kù)的圖書館應(yīng)用系統(tǒng)中有三個(gè)基本表,表結(jié)構(gòu)如下所示,請(qǐng)用SQL語(yǔ)句完成下列兩個(gè)查詢:(1)SELECT LOANS.借書證號(hào),姓名,系名,COUNT(*) AS 借書數(shù)量FROM BORROWER,LOANSWHERE BORROWER.借書證號(hào)=LOANS.借書證號(hào)GROUP BY LOANS.借書證號(hào)HAVING COUNT(*)>=5;(2)SELECT 姓名,系名,書名,借書日期FROM BORROWER,LOANS , BOOKS WHERE BORROWER.借書證號(hào)=LOANS.借書證號(hào)

33、AND LOANS.圖書登記號(hào)=BOOKS.圖書登記號(hào)AND 索書號(hào) IN(SELECT 索書號(hào) FROM BORROWER,LOANS,BOOKS WHERE BORROW.借書證號(hào)=LOANS.借書證號(hào) AND LOANS.圖書館登記號(hào)=BOOKS.圖書登記號(hào)AND 姓名="王麗")8、設(shè)某全國(guó)性的運(yùn)輸企業(yè)建立了大型OLTP系統(tǒng),并在該系統(tǒng)之上建立了數(shù)據(jù)倉(cāng)庫(kù)。OLTP系統(tǒng)和數(shù)據(jù)倉(cāng)庫(kù)中有如下數(shù)據(jù)表:運(yùn)輸明細(xì)表(運(yùn)輸單ID,發(fā)送站ID,終到站ID,貨物ID,貨物重量,運(yùn)輸價(jià)格,發(fā)貨日期)匯總表1(發(fā)送站ID,終到站ID,貨物ID,發(fā)貨日期,總重,總運(yùn)價(jià))匯總表2(發(fā)送站ID

34、,終到地區(qū)ID,貨物ID,發(fā)貨日期,總重,總運(yùn)價(jià))匯總表3(發(fā)送站ID,終到站ID,貨物ID,發(fā)貨月份,總重,總運(yùn)價(jià))匯總表4(發(fā)送地區(qū)ID,終到地區(qū)ID,貨物類別ID,發(fā)貨日期,總重,總運(yùn)價(jià))該企業(yè)管理的貨運(yùn)站約有100個(gè),貨物約有500種共10類,各匯總表都建有主碼,且各表有合理的維護(hù)策略,在每次維護(hù)后數(shù)據(jù)能保持一致。設(shè)有視圖V,該視圖的訪問(wèn)頻率很高,其查詢結(jié)果模式為(發(fā)送地區(qū)ID,終到站ID,發(fā)貨月份,總重,總運(yùn)價(jià)),該視圖現(xiàn)以匯總表1為計(jì)算數(shù)據(jù)源。經(jīng)監(jiān)控發(fā)現(xiàn),匯總表1的被訪問(wèn)頻率過(guò)高,導(dǎo)致系統(tǒng)整體性能下降,而其它匯總表被訪問(wèn)頻率較低。在不增加匯總表和索引的情況下,請(qǐng)給出一個(gè)改善系統(tǒng)服務(wù)

35、性能的優(yōu)化方案,并簡(jiǎn)要說(shuō)明理由。(10分)由于匯總表1和視圖的模式訪問(wèn)頻率都很高,而且視圖的數(shù)據(jù)源來(lái)自匯總表1,又因?yàn)槠渌麉R總表的訪問(wèn)率較低,所以只需要將視圖的數(shù)據(jù)源綁定為匯總表3,因?yàn)閰R總表3也可以滿足視圖的輸出模式。這樣不僅提升了匯總表3的數(shù)據(jù)訪問(wèn)率,而且降低了匯總表1的數(shù)據(jù)訪問(wèn)率,系統(tǒng)性能和服務(wù)性能得到了很大的優(yōu)化。又因?yàn)樨浳锛s有500種,共10類,可以再建立一個(gè)視圖綁定數(shù)據(jù)源為匯總表4,這樣就可以充分利用匯總表4的數(shù)據(jù)信息,從而可以進(jìn)一步優(yōu)化系統(tǒng)性能。9、在進(jìn)行某學(xué)校教務(wù)管理系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),數(shù)據(jù)庫(kù)設(shè)計(jì)人員設(shè)計(jì)了如下幾個(gè)關(guān)系模式:系(系號(hào),系名),系號(hào)為主碼學(xué)生(學(xué)號(hào),姓名,所在系號(hào)

36、),學(xué)號(hào)為主碼課程(課程號(hào),課程名,開(kāi)課系號(hào)),課程號(hào)為主碼選課(學(xué)號(hào),課程號(hào),選課時(shí)間),學(xué)號(hào)和課程號(hào)為主碼(8分)開(kāi)發(fā)人員在將關(guān)系模式實(shí)施到SQL Server 2008的"教務(wù)"數(shù)據(jù)庫(kù)時(shí),使用了如下表結(jié)構(gòu)定義語(yǔ)句:CREATE TABLE 系 (系號(hào) varchar(10) NOT NULL ,系名 varchar(100)CREATE TABLE 學(xué)生 (學(xué)號(hào) varchar(50) NOT NULL ,姓名 varchar(50),所在系號(hào) varchar(10)CREATE TABLE課程 (課程號(hào) varchar(50) NOT NULL ,課程名 varch

37、ar(100),開(kāi)課系號(hào) varchar(10)CREATE TABLE 選課 (學(xué)號(hào) varchar(50) NOT NULL ,課程號(hào) varchar(50) NOT NULL ,選課時(shí)間 datetime )在執(zhí)行如下查詢語(yǔ)句時(shí)發(fā)現(xiàn)執(zhí)行效率很低:SELECT * FROM 選課 JOIN 學(xué)生 ON 學(xué)生.學(xué)號(hào) = 選課.學(xué)號(hào)JOIN 系 ON 系.系號(hào) = 學(xué)生.所在系號(hào) JOIN 課程 ON 課程.課程號(hào) = 選課.課程號(hào)WHERE 系.系號(hào)=012 AND convert(varchar(10),選課時(shí)間,120) >= 2010-01-01(1)在查找原因時(shí)發(fā)現(xiàn)建表語(yǔ)句有問(wèn)

38、題。請(qǐng)指出問(wèn)題并說(shuō)明該問(wèn)題是否會(huì)影響此查詢語(yǔ)句的執(zhí)行效率。(4分)(2)設(shè)已在"選課"表的"選課時(shí)間"列及"學(xué)生"表的"所在系號(hào)"列上建立了索引。請(qǐng)問(wèn)這兩個(gè)索引是否能夠提高該查詢語(yǔ)句的執(zhí)行效率?如果不能,請(qǐng)說(shuō)明原因。(4分)建表時(shí)沒(méi)有設(shè)置主鍵,也沒(méi)有說(shuō)明外鍵,但不會(huì)影響此查詢語(yǔ)句的執(zhí)行效率。"選課"表的"選課時(shí)間"可以建立索引,從而提高查詢效率,而"學(xué)生"表的"所在系號(hào)"建立索引不會(huì)提高查詢效率。索引的意義就是將記錄按目標(biāo)關(guān)鍵字順序排列

39、,這樣查找某個(gè)目標(biāo)關(guān)鍵字的對(duì)應(yīng)值的位置就縮小了查找范圍。"選課時(shí)間"的重復(fù)率低,所以可以作為索引,而學(xué)生"所在系號(hào)"的重復(fù)率太高,則不會(huì)提高查詢效率。10、某商場(chǎng)商品經(jīng)營(yíng)管理系統(tǒng)使用SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng),此系統(tǒng)上線運(yùn)行1年后,業(yè)務(wù)人員使用某統(tǒng)計(jì)功能(此功能每月使用一次)時(shí)發(fā)現(xiàn)速度很慢。該統(tǒng)計(jì)功能主要執(zhí)行的SQL語(yǔ)句如下:SELECT 商品號(hào),SUM(銷售數(shù)量*銷售價(jià)格) 銷售額 FROM 銷售明細(xì) GROUP BY 商品號(hào);該銷售明細(xì)表的建表語(yǔ)句如下:CREATE TABLE 銷售明細(xì)(序列號(hào) intIDENTITY(1,1) N

40、OT NULL,商品號(hào) intNOT NULL,銷售日期 datetime NULL,銷售數(shù)量 intNOT NULL,銷售價(jià)格 intNOT NULL);并在銷售明細(xì)表上建有如下索引:CREATE index ix_銷售明細(xì)_商品號(hào) on 銷售明細(xì)(商品號(hào));某技術(shù)人員提出通過(guò)執(zhí)行下述語(yǔ)句以提高此查詢的運(yùn)行效率:CREATE VIEW 商品銷售額視圖 WITH SCHEMABINDING AS SELECT 商品號(hào),SUM(銷售數(shù)量*銷售價(jià)格) 銷售額,COUNT_BIG(*) cntFROM dbo.銷售明細(xì) GROUP BY 商品號(hào);CREATE UNIQUE CLUSTERED IND

41、EX ix_商品銷售額 ON 商品銷售額視圖(商品號(hào));(10分)(1) 請(qǐng)分析該技術(shù)人員給出的語(yǔ)句功能以及對(duì)原有查詢語(yǔ)句的性能影響,并給出原因。語(yǔ)句功能:建立包含(商品號(hào),銷售額,該商品表中出現(xiàn)次數(shù))帶索引的視圖,并建立按商品號(hào)對(duì)應(yīng)銷售額UNIQUE聚簇排序的索引,大大縮小了查詢語(yǔ)句的查詢范圍,提高了查詢效率。原因:視圖中將間接相關(guān)的屬性列(序列號(hào),銷售日期,商品號(hào),銷售數(shù)量,銷售價(jià)格)轉(zhuǎn)換成了目標(biāo)屬性列,減少了搜索空間;同時(shí)建立UNIQUE CLUSTERED索引,使查詢商品號(hào)的數(shù)據(jù)記錄唯一,降低了搜索范圍,提高了搜索效率。(2)此商場(chǎng)的銷售量很大,每天有大量數(shù)據(jù)插入到銷售明細(xì)表中。請(qǐng)從數(shù)

42、據(jù)庫(kù)整體性能角度分析,此技術(shù)人員提出的優(yōu)化方法是否合適,并給出原因。不合適,每天大量的插入操作使得在修改表的同時(shí)也要對(duì)視圖進(jìn)行修改,增加了系統(tǒng)的負(fù)擔(dān),然而該統(tǒng)計(jì)功能一個(gè)月才用一次,這樣導(dǎo)致系統(tǒng)的利用率也較為低下。11、某教務(wù)管理系統(tǒng)使用SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng),數(shù)據(jù)庫(kù)軟硬件配置信息如下: 數(shù)據(jù)庫(kù)運(yùn)行在兩路Intel Xeon E5-2609 2.4GHz CPU(每路CPU4核心),128GB內(nèi)存、2塊300GB 15000轉(zhuǎn)SAS硬盤(RAID 1)的服務(wù)器上;服務(wù)器操作系統(tǒng)為Windows 2003 32位企業(yè)版,安裝SP2補(bǔ)?。粩?shù)據(jù)庫(kù)為SQL Server 2008

43、Enterprise(32 位),數(shù)據(jù)庫(kù)中總數(shù)據(jù)量近130GB。近一個(gè)學(xué)期以來(lái),用戶反映系統(tǒng)運(yùn)行緩慢,經(jīng)程序員定位,確定為數(shù)據(jù)庫(kù)服務(wù)器響應(yīng)緩慢,需要進(jìn)行調(diào)優(yōu)。(10分)根據(jù)SQL Server 2008數(shù)據(jù)庫(kù)的特性以及題目中的條件,綜合給出以下的調(diào)優(yōu)方案。(1) 表結(jié)構(gòu)優(yōu)化:重新優(yōu)化數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)構(gòu),規(guī)范數(shù)據(jù)庫(kù)邏輯設(shè)計(jì);設(shè)計(jì)主鍵和外鍵;設(shè)計(jì)合適大小的字段。(2) 硬件優(yōu)化:購(gòu)買一塊同樣大小的硬盤,將硬盤做成RAID5,用以提高數(shù)據(jù)庫(kù)讀寫速度;增加服務(wù)器 CPU個(gè)數(shù);擴(kuò)大服務(wù)器的內(nèi)存。(3) 索引優(yōu)化:采用對(duì)經(jīng)常作為條件查詢的列設(shè)計(jì)索引,在查詢中經(jīng)常用到的列上建立非聚簇索引,在頻繁進(jìn)行范圍查詢、排

44、序、分組的列上建立聚簇索引,對(duì)于有頻繁進(jìn)行刪除、插入操作的表不要建立過(guò)多的索引。(4)采用視圖:合理使用視圖和分區(qū)視圖,在需要更新和刪除操作不多、查詢操作頻繁的表上建立索引視圖。(5) SQL語(yǔ)句優(yōu)化:選擇運(yùn)算應(yīng)盡可能先做,并在對(duì)同一個(gè)表進(jìn)行多個(gè)選擇運(yùn)算時(shí),選擇影響較大的語(yǔ)句放在前面,較弱的選擇條件寫在后面,這樣就可以先根據(jù)較嚴(yán)格的條件得出數(shù)據(jù)較少的信息,再在這些信息中根據(jù)后面較弱的條件得到滿足條件的信息。應(yīng)避免使用相關(guān)子查詢,把子查詢轉(zhuǎn)換成聯(lián)結(jié)來(lái)實(shí)現(xiàn)。字段提取按照"需多少,提多少"的原則,避免"SELECT *","SELECT *"

45、;需要數(shù)據(jù)庫(kù)返回相應(yīng)表的所有列信息,這對(duì)于一個(gè)列較多的表無(wú)疑是一項(xiàng)費(fèi)時(shí)的操作,采用存儲(chǔ)過(guò)程,使用存儲(chǔ)過(guò)程提高數(shù)據(jù)處理速度。12、某采購(gòu)中心采購(gòu)了一套商品批發(fā)查詢管理系統(tǒng),此系統(tǒng)采用SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng),該系統(tǒng)需要經(jīng)常處理百萬(wàn)級(jí)以上的數(shù)據(jù)查詢。同時(shí)該系統(tǒng)提供了第三方人員開(kāi)發(fā)的SQL接口,第三方人員可以根據(jù)自己的需要開(kāi)發(fā)自己的應(yīng)用程序來(lái)訪問(wèn)數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù)。(10分)(1)系統(tǒng)在使用的過(guò)程中,業(yè)務(wù)人員反應(yīng)系統(tǒng)操作速度很慢。經(jīng)過(guò)工程師檢查測(cè)試后,數(shù)據(jù)庫(kù)系統(tǒng)本身及網(wǎng)絡(luò)傳輸過(guò)程中存在著一些問(wèn)題,請(qǐng)給出針對(duì)數(shù)據(jù)庫(kù)系統(tǒng)本身及網(wǎng)絡(luò)傳輸過(guò)程中可能的一些調(diào)優(yōu)方案。(2)工程師在完成數(shù)據(jù)庫(kù)

46、系統(tǒng)本身和網(wǎng)絡(luò)問(wèn)題的優(yōu)化后,發(fā)現(xiàn)第三方開(kāi)發(fā)人員的SQL查詢語(yǔ)句存在很多沒(méi)有優(yōu)化的問(wèn)題,請(qǐng)從第三方開(kāi)發(fā)人員角度給出一些優(yōu)化方案。(1)把數(shù)據(jù)、日志、索引放到不同的I/O設(shè)備上,增加讀取速度,數(shù)據(jù)量(尺寸)越大,提高I/O越重要??v向、橫向分割表,減少表的尺寸。升級(jí)硬件,擴(kuò)大服務(wù)器的內(nèi)存,Windows 2000和SQL Server 2000能支持4-8G的內(nèi)存。配置虛擬內(nèi)存,虛擬內(nèi)存大小應(yīng)基于計(jì)算機(jī)上并發(fā)運(yùn)行的服務(wù)進(jìn)行配置。增加服務(wù)器 CPU個(gè)數(shù)。分布式分區(qū)視圖可用于實(shí)現(xiàn)數(shù)據(jù)庫(kù)服務(wù)器聯(lián)合體。聯(lián)合體是一組分開(kāi)管理的服務(wù)器,但它們相互協(xié)作分擔(dān)系統(tǒng)的處理負(fù)荷。這種通過(guò)分區(qū)數(shù)據(jù)形成數(shù)據(jù)庫(kù)服務(wù)器聯(lián)合體的

47、機(jī)制能夠擴(kuò)大一組服務(wù)器,以支持大型的多層 Web 站點(diǎn)的處理需要。重建索引:DBCC REINDEX ,DBCC INDEXDEFRAG;收縮數(shù)據(jù)和日志:DBCC SHRINKDB,DBCC SHRINKFILE。設(shè)置自動(dòng)收縮日志,對(duì)于大的數(shù)據(jù)庫(kù)不要設(shè)置數(shù)據(jù)庫(kù)自動(dòng)增長(zhǎng),它會(huì)降低服務(wù)器的性能。優(yōu)化鎖結(jié)構(gòu)。(2)對(duì)查詢進(jìn)行優(yōu)化,盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則引擎將放棄使用索引而進(jìn)行全表掃描。任何地方都不要使用 select * from 進(jìn)行全表掃描 ,用具體的字段列代替&

48、quot;*",不要返回冗余字段。避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過(guò)1萬(wàn)行,那么就應(yīng)該考慮改寫。盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。13、6-32008數(shù)據(jù)庫(kù)管理系統(tǒng)。此系統(tǒng)上線運(yùn)行前,需將商場(chǎng)原有的數(shù)據(jù)導(dǎo)入到新系統(tǒng)中。原有系統(tǒng)使用SQL Server 2000,數(shù)據(jù)結(jié)構(gòu)與新系統(tǒng)不完全一致。因此需要把數(shù)據(jù)從SQL Server 2000導(dǎo)入到SQL Server 2008中,為了保證數(shù)據(jù)一致性,數(shù)據(jù)導(dǎo)入過(guò)程中要求暫停業(yè)務(wù)且必須在3小時(shí)內(nèi)完成。(1)在原有數(shù)據(jù)導(dǎo)入新系統(tǒng)的過(guò)程中,實(shí)施人員發(fā)現(xiàn)原有數(shù)據(jù)量很大,導(dǎo)

49、入數(shù)據(jù)需要四小時(shí),業(yè)務(wù)無(wú)法接受。經(jīng)分析某工程師認(rèn)為,數(shù)據(jù)導(dǎo)入過(guò)程中的數(shù)據(jù)庫(kù)I/O很高,但導(dǎo)入數(shù)據(jù)的程序本身對(duì)系統(tǒng)資源占用率很低。該工程師建議將數(shù)據(jù)導(dǎo)入過(guò)程中的數(shù)據(jù)恢復(fù)模式從"完整"模式改為"簡(jiǎn)單"模式以提高數(shù)據(jù)導(dǎo)入速度;而另一位工程師則認(rèn)為此方法未必能提高數(shù)據(jù)導(dǎo)入速度,而且還可能導(dǎo)致數(shù)據(jù)丟失,不建議使用此方法。請(qǐng)分析此方法是否能夠提高數(shù)據(jù)導(dǎo)入速度并給出理由,同時(shí)分析此操作的數(shù)據(jù)丟失風(fēng)險(xiǎn)。(5分)(2)在成功導(dǎo)入歷史數(shù)據(jù)后,此系統(tǒng)順利上線運(yùn)行。在上線運(yùn)行的第一周,發(fā)現(xiàn)數(shù)據(jù)庫(kù)服務(wù)器的CPU使用率很高,達(dá)到近90%,高峰期間達(dá)到100%,且系統(tǒng)內(nèi)存占用率達(dá)到9

50、0%,但系統(tǒng)I/O很輕。業(yè)務(wù)人員反應(yīng)系統(tǒng)操作速度很慢。為了提高系統(tǒng)運(yùn)行速度。在不修改應(yīng)用程序的前提下,兩位工程師提出了不同的解決辦法:.為服務(wù)器增加2顆CPU,緩解CPU使用率很高的問(wèn)題;.為服務(wù)器增加一倍內(nèi)存,緩解內(nèi)存使用率很高的問(wèn)題??紤]成本,現(xiàn)階段只能按照一種方案實(shí)施。請(qǐng)指出在現(xiàn)有情況下,哪種方案更合理并給出理由。(5分)(1)此方法能夠提高數(shù)據(jù)導(dǎo)入速度。原因:此系統(tǒng)I/O很高,修改恢復(fù)模式后,系統(tǒng)最大限度減少日志開(kāi)銷,可提高導(dǎo)入速度。由于僅在數(shù)據(jù)導(dǎo)入過(guò)程中修改恢復(fù)模式,所以并無(wú)數(shù)據(jù)丟失風(fēng)險(xiǎn)。(2)第一種方案比較合理。原因:SQL Server 2008采用將數(shù)據(jù)緩沖在內(nèi)存的方式,因此內(nèi)

51、存的使用率比較高是正常情況,且現(xiàn)階段I/O并不存在問(wèn)題,表明內(nèi)存滿足需求。此階段CPU使用率很高,表明CPU計(jì)算資源不足,因此增加CPU數(shù)量對(duì)解決問(wèn)題有效。14、在SQL Server 2008中,設(shè)有教師表(教師號(hào), 姓名, 所在部門號(hào), 職稱)和部門表(部門號(hào), 部門名, 高級(jí)職稱人數(shù))。請(qǐng)編寫滿足下列要求的后觸發(fā)型觸發(fā)器(設(shè)觸發(fā)器名字為tri_zc)。每當(dāng)在教師表中插入一名具有高級(jí)職稱("教授"或"副教授")的教師時(shí),或者將非高級(jí)職稱教師的職稱更改為高級(jí)職稱時(shí),均修改部門表中相應(yīng)部門的高級(jí)職稱人數(shù)。(假設(shè)一次操作只插入或更改一名教師的職稱)(10分

52、)CREATE TRIGGER tri_zcON 教師表AFTER INSERT,UPDATEASBEGINDECLATEzc varchar(10),dept varchar(30)SELECT dept=所在部門號(hào),2c=職稱 FROM insertedIF zc =教授 or 副教授Update 部門表SET 高級(jí)職稱人數(shù) = 高級(jí)職稱人數(shù) + 1Where 部門號(hào) = deptEnd15、已知某教務(wù)管理系統(tǒng)的設(shè)計(jì)人員在需求分析階段收集到下列原始數(shù)據(jù)表格:已知該業(yè)務(wù)系統(tǒng)存在如下規(guī)則:I每個(gè)教師有唯一的教師號(hào),每個(gè)教師號(hào)對(duì)應(yīng)唯一的一名教師;II每門課程有唯一的課程號(hào),每個(gè)課程號(hào)對(duì)應(yīng)唯一的一門課程;II

溫馨提示

  • 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)論