2017上半年數(shù)據(jù)庫系統(tǒng)工程師考試案例分析真題(5)

數(shù)據(jù)庫系統(tǒng)工程師 責(zé)任編輯:小布丁 2017-05-25

添加老師微信

備考咨詢

加我微信

摘要:希賽網(wǎng)為大家整理了2017上半年數(shù)據(jù)庫系統(tǒng)工程師考試案例分析真題,以下為第五部分。 試題五(共15分) 閱讀下列說明,回答問題1和問題2,將解答填入答題紙的對應(yīng)欄內(nèi)。【說明】

    希賽網(wǎng)為大家整理了2017上半年數(shù)據(jù)庫系統(tǒng)工程師考試案例分析真題,以下為第五部分。


試題五(共15分)
閱讀下列說明,回答問題1和問題2,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
某搶紅包軟件規(guī)定發(fā)紅包人可以一次拋出多個紅包,由多個人來搶。要求每個搶紅包的人最多只能搶到同一批次中的一個紅包,且存在多個人同時搶同一紅包的情況。給定的紅包關(guān)系模式如下:
Red(ID,BatchID,SenderID,Money,ReceiverID)
其中ID標(biāo)識每一個紅包;BatchID為發(fā)紅包的批次,一個BatchID值可以對應(yīng)多個ID值;SenderID為發(fā)紅包人的標(biāo)識;Money為紅包中的錢數(shù);ReceiverID記錄搶到紅包的人的標(biāo)識。
發(fā)紅包人一次拋出多個紅包,即向紅包表中插入多條記錄,每條記錄表示一個紅包,其ReceiverID值為空值。
搶某個紅包時,需要判定該紅包記錄的ReceiverID值是否為空,不為空時表示該紅包己被搶走,不能再搶,為空時搶紅包人將自己的標(biāo)識寫入到ReceiverID宇段中,即為搶到紅包。
【問題1】(9分)
引入兩個偽指令a=R(X)和W(b,X)。其中a=R(X)表示讀取當(dāng)前紅包記錄的ReceiverID字段(記為數(shù)據(jù)項X)到變量a中,W(b,X)表示將搶紅包人的標(biāo)識b的值寫入到當(dāng)前紅包記錄的ReceiverID字段(數(shù)據(jù)項X)中,變量a為空值時才會執(zhí)行W(b,X)操作。假設(shè)有多個人同時搶同一紅包(即同時對同一記錄進(jìn)行操作),用aj=Rj(X)和Wi(bi,X)表示系統(tǒng)依次響應(yīng)的第i個人的搶紅包操作。假設(shè)當(dāng)前數(shù)據(jù)項X為空值,同時有三個人搶同一紅包,則
(1)如下的調(diào)度執(zhí)行序列:
aJ=RJ(刻,a2=R2(X),Wj(bj,X),W2仇,刻,a3=R3(X)
搶到紅包的是第幾人?并說明理由。
(2)引入共享鎖指令SLockj(X)、獨占鎖指令XLock i(X)和解鎖指令ULock i(X),其中下標(biāo)i表示第i個搶紅包人的指令。如下的調(diào)度執(zhí)行序列:
SLockj(X),aj=Rj(X),SLock2(X),a2=R2(X),XLockj(X)......
是否會產(chǎn)生死鎖?并說明理由。(3)為了保證系統(tǒng)第一個響應(yīng)的搶紅包人為最終搶到紅包的人,請使用上述。)中
引入的鎖指令,對上述(1)中的調(diào)度執(zhí)行序列進(jìn)行修改,在滿足2PL協(xié)議的前提下,給出一個不產(chǎn)生死鎖的完整的調(diào)度執(zhí)行序列。
【問題2】(6分)
下面是用SQL實現(xiàn)的搶紅包程序的一部分,請補全空缺處的代碼CREATE PROCEDURE ScrambleRed(IN Batchl詞。VARCHAR(20),
因RecvrNo VARCHAR仰))
--紅包批號一接收紅包者--是否已搶過此批紅包
if exists(SELECT*FROM Red
WHERE BatchID=BatchNo AND ReceiverID=ReçvrNo)也m
return-1,;
讀取此批派發(fā)紅包中未領(lǐng)取的紅包記錄ID
DECLARENonR vedRedCURSORFOR SELECTID'>
FROMRed
WHERE BatchID=BatchNo AND ReceiverID IS NULL;
-打開游標(biāo)
OPEN NonRecvedRed;
FETCH NonRecvedRed INTO NonRecvedNo;
while not error
一搶紅包事務(wù)
BEGIN TRANSACTION;
H寫入紅包記錄
UPDATE RED STE RECDIVER ID=RecvrNo
WHERE ID=nonRECVED AND(a)
//執(zhí)行狀態(tài)判定
If(修改的記錄數(shù))=1 THEN
COMMIT
(B);
Return 1’
Else
ROLLBACK
End if
(c)
End while
關(guān)閉游標(biāo)
CLOSE NnoRecved RD
Return0;
END


>>>>返回目錄:2017上半年數(shù)據(jù)庫系統(tǒng)工程師考試案例分析真題(匯總)
>>>>進(jìn)入估分:2017上半年軟考分?jǐn)?shù)早知道,在線估分+真題解析
>>>>點擊查看:2017上半年數(shù)據(jù)庫系統(tǒng)工程師考試案例分析真題答案和解析

更多資料
更多課程
更多真題
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!

軟考備考資料免費領(lǐng)取

去領(lǐng)取

!
咨詢在線老師!