三、設(shè)計(jì)與應(yīng)用題(共30分)
1.現(xiàn)有論文和作者兩個(gè)實(shí)體,論文實(shí)體的屬性包括題目、期刊名稱、年份、期刊號(hào);作者實(shí)體的屬性包括姓名、單位、地址;一篇論文可以有多個(gè)作者,且每一位作者寫過多篇論文,在每一篇論文中有作者的順序號(hào)。請(qǐng)完成以下操作:(10分)
(1)畫出E-R圖。
(2)將E-R圖轉(zhuǎn)換成關(guān)系模式,并指出每個(gè)關(guān)系模式的主鍵(加下劃線)和外鍵(加波浪線)。
2.設(shè)有圖書管理數(shù)據(jù)庫(kù),包含三張表:
圖書明細(xì)表(圖書編號(hào),圖書類別,圖書名稱,作者,出版社,出版日期,定價(jià));
讀者表(借書證號(hào),姓名,系別,*日期);
借出信息表(借出編號(hào),借書證號(hào),圖書編號(hào),借書日期);
完成下列操作:(10分)
定義一個(gè)多語(yǔ)句表值函數(shù),用于查詢學(xué)生借書情況,只需提供參數(shù):借書證號(hào),就可以通過調(diào)用函數(shù)返回此學(xué)生的借書情況,若有借書籍,則返回所借書籍的編號(hào)、書籍名稱、定價(jià)和借書日期;若沒有在借書籍,則返回記錄為空。設(shè)函數(shù)名為:f_BorrowBook(@jszh char(20))。
3.某采購(gòu)中心采購(gòu)了一套商品批發(fā)查詢管理系統(tǒng),此系統(tǒng)采用SQL Server 2008數(shù)據(jù)庫(kù)管理系統(tǒng),該系統(tǒng)需要經(jīng)常處理以上的數(shù)據(jù)查詢。同時(shí)該系統(tǒng)提供了第三方人員開發(fā)的SQL接口,第三方人員可以根據(jù)自己的需要開發(fā)自己的應(yīng)用程序來訪問數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù)。(10分)
(1)系統(tǒng)在使用的過程中,業(yè)務(wù)人員反應(yīng)系統(tǒng)操作速度很慢。經(jīng)過工程師檢查測(cè)試后,數(shù)據(jù)庫(kù)系統(tǒng)本身及網(wǎng)絡(luò)傳輸過程中存在著一些問題,請(qǐng)給出針對(duì)數(shù)據(jù)庫(kù)系統(tǒng)本身及網(wǎng)絡(luò)傳輸過程中可能的一些調(diào)優(yōu)方案。
(2)工程師在完成數(shù)據(jù)庫(kù)系統(tǒng)本身和網(wǎng)絡(luò)問題的優(yōu)化后,發(fā)現(xiàn)第三方開發(fā)人員的SQL查詢語(yǔ)句存在很多沒有優(yōu)化的問題,請(qǐng)從第三方開發(fā)人員角度給出一些優(yōu)化方案。
三、設(shè)計(jì)與應(yīng)用題
1.【解題思路】
(1)ER圖的設(shè)計(jì)原則
在設(shè)計(jì)ER圖時(shí),首先應(yīng)根據(jù)需求分析,確認(rèn)實(shí)體、屬性和聯(lián)系這三種ER圖的基本要素。需要強(qiáng)調(diào)的三條設(shè)計(jì)原則如下:
①相對(duì)原則
建模的過程實(shí)際上是對(duì)對(duì)象抽象的過程。實(shí)體、屬性和聯(lián)系是對(duì)同一個(gè)對(duì)象抽象過程的不同解釋和理解。在同一情況下不同的人,或同一人在不同的情況下,對(duì)事物抽象的結(jié)果可能是不同的。在ER圖的整個(gè)設(shè)計(jì)過程中,實(shí)體、屬性和聯(lián)系不是一成不變,而是可能會(huì)被不斷的調(diào)整和優(yōu)化。
②一致原則
同一對(duì)象在同一個(gè)管理系統(tǒng)中的不同子系統(tǒng)抽象的結(jié)果要求保持一致。
③簡(jiǎn)單原則
為簡(jiǎn)化ER圖,現(xiàn)實(shí)世界中的事物能作屬性對(duì)待時(shí),應(yīng)盡量作為屬性處理。屬性與實(shí)體和聯(lián)系之間,并無一定界限。當(dāng)屬性滿足如下兩個(gè)條件時(shí),就不能作實(shí)體或關(guān)系對(duì)待:不再具有需要進(jìn)一步描述的性質(zhì),因?yàn)閷傩栽诤x上是不可再分的數(shù)據(jù)項(xiàng);屬性不能再與其它實(shí)體具有聯(lián)系,即ER圖中的聯(lián)系只能是實(shí)體之間的聯(lián)系。
(2)ER圖的組成元素是實(shí)體、屬性和聯(lián)系
①實(shí)體
把客觀存在并且可以相互區(qū)別的事物稱為實(shí)體。實(shí)體可以是實(shí)際事物,也可以是抽象事件。如一個(gè)職工、一場(chǎng)比賽等。
②屬性
描述實(shí)體的特性稱為屬性。如職工的職工號(hào),姓名,性別,出生日期,職稱等。
③聯(lián)系
聯(lián)系是實(shí)體間有意義的相互作用,即實(shí)體問存在的關(guān)聯(lián)。
在ER圖中,分別用矩形框表示實(shí)體,橢圓表示屬性,菱形框表示聯(lián)系。
(3)聯(lián)系的類型
實(shí)體之間的聯(lián)系分為三種類型:一對(duì)一(1:1)、一對(duì)多(1:n)和多對(duì)多(n:m)。
題目給出了兩個(gè)實(shí)體論文和作者,并且指明了論文實(shí)體的屬性包括題目、期刊名稱、年份、期刊號(hào),作者實(shí)體的屬性包括姓名、單位、地址。實(shí)體問的關(guān)系包括:一篇論文可以有多個(gè)作者,且每一位作者寫過多篇論文,在每一篇論文中有作者的順序號(hào),可以知道論文和作者是多對(duì)多的關(guān)系。同時(shí)可知論文題目和期刊號(hào)的聯(lián)合是論文關(guān)系模式的主鍵,姓名是作者關(guān)系模式的主鍵,而需要作者姓名和論文題目才能確定發(fā)表的關(guān)系模式。
【參考答案】
(1)

(2)關(guān)系模式:
論文(題目,期刊名稱,年份,期刊號(hào))
作者(姓名,單位,地址)
發(fā)表(姓名,題目,順序號(hào))
2.【解題思路】
SQL Server 2008多語(yǔ)句表值函數(shù)的格式為:
CREATE FUNCTION[schema_name.]function_name
([{@parameter_name[As][type_schema_name.]parameter data_type
[=default]}
[….n]
]
)
RETURNS@return_variable TABLE
[AS]
BEGIN
function_body
RETURN
END
[;]
({
[table_constraint][,...n])
采用三表聯(lián)合查詢,通過傳入的借書證號(hào)查出借出信息表中的圖書編號(hào),然后查出圖書明細(xì)表的信息。
【參考答案】
CREATE FUNCTION BorrowBook(@jszh char(20))
RETURNS@jsqkb TABLE(書籍編號(hào)char(20),書籍名稱char(50),定價(jià)float,借書日期datetime)
AS
BEGIN
INSERT@jsqkb
SELECT圖書明細(xì)表.圖書編號(hào),圖書名稱,定價(jià),借出信息表.借書日期FROM借出信息表,圖書明細(xì)表
WHERE借出信息表.圖書編號(hào)=圖書明細(xì)表.圖書編號(hào)AND借出信息表.借書證號(hào)=@jszh
RETURN
END
3.【解題思路】
從數(shù)據(jù)庫(kù)本身和網(wǎng)絡(luò)傳輸?shù)慕嵌瘸霭l(fā),數(shù)據(jù)庫(kù)性能低下的因素一般有:I/O吞吐量小,形成了瓶頸效應(yīng);沒有創(chuàng)建計(jì)算列導(dǎo)致查詢不優(yōu)化;SQL Server數(shù)據(jù)庫(kù)內(nèi)存不足;網(wǎng)絡(luò)速度慢;查詢出的數(shù)據(jù)量過大(可以采用多次查詢或其他的方法降低數(shù)據(jù)量)以及鎖或者死鎖(這也是查詢慢最常見的問題,是程序設(shè)計(jì)的缺陷)。
從SQL查詢語(yǔ)句角度來考慮優(yōu)化響應(yīng)時(shí)間,應(yīng)該從查詢條件、臨時(shí)表、游標(biāo)、返回?cái)?shù)據(jù)量、大事務(wù)操作等方面進(jìn)行調(diào)優(yōu)。
【參考答案】
(1)①把數(shù)據(jù)、日志、索引放到不同的I/O設(shè)備上,增加讀取速度,數(shù)據(jù)量(尺寸)越大,提高I/O越重要。
②縱向、橫向分割表,減少表的尺寸。
③升級(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)合體是一組分開管理的服務(wù)器,但它們相互協(xié)作分擔(dān)系統(tǒng)的處理負(fù)荷。這種通過分區(qū)數(shù)據(jù)形成數(shù)據(jù)庫(kù)服務(wù)器聯(lián)合體的機(jī)制能夠擴(kuò)大一組服務(wù)器,以支持大型的多層Web站點(diǎn)的處理需要。
⑤重建索引:DBCC REINDEX,DBCC INDEXDEFRAG;收縮數(shù)據(jù)和日志:DBCC SHRINKDB,DBCCSHRINKFILE。設(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)行全表掃描,用具體的字段列代替“*”,不要返回冗余字段。
④避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。
⑤盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過1萬行,那么就應(yīng)該考慮改寫。
⑥盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。