摘要:希賽網為大家整理了2017上半年數據庫系統(tǒng)工程師考試案例分析真題,以下為第五部分。 試題五(共15分) 閱讀下列說明,回答問題1和問題2,將解答填入答題紙的對應欄內?!菊f明】
希賽網為大家整理了2017上半年數據庫系統(tǒng)工程師考試案例分析真題,以下為第五部分。
試題五(共15分)
閱讀下列說明,回答問題1和問題2,將解答填入答題紙的對應欄內。
【說明】
某搶紅包軟件規(guī)定發(fā)紅包人可以一次拋出多個紅包,由多個人來搶。要求每個搶紅包的人最多只能搶到同一批次中的一個紅包,且存在多個人同時搶同一紅包的情況。給定的紅包關系模式如下:
Red(ID,BatchID,SenderID,Money,ReceiverID)
其中ID標識每一個紅包;BatchID為發(fā)紅包的批次,一個BatchID值可以對應多個ID值;SenderID為發(fā)紅包人的標識;Money為紅包中的錢數;ReceiverID記錄搶到紅包的人的標識。
發(fā)紅包人一次拋出多個紅包,即向紅包表中插入多條記錄,每條記錄表示一個紅包,其ReceiverID值為空值。
搶某個紅包時,需要判定該紅包記錄的ReceiverID值是否為空,不為空時表示該紅包己被搶走,不能再搶,為空時搶紅包人將自己的標識寫入到ReceiverID宇段中,即為搶到紅包。
【問題1】(9分)
引入兩個偽指令a=R(X)和W(b,X)。其中a=R(X)表示讀取當前紅包記錄的ReceiverID字段(記為數據項X)到變量a中,W(b,X)表示將搶紅包人的標識b的值寫入到當前紅包記錄的ReceiverID字段(數據項X)中,變量a為空值時才會執(zhí)行W(b,X)操作。假設有多個人同時搶同一紅包(即同時對同一記錄進行操作),用aj=Rj(X)和Wi(bi,X)表示系統(tǒng)依次響應的第i個人的搶紅包操作。假設當前數據項X為空值,同時有三個人搶同一紅包,則
(1)如下的調度執(zhí)行序列:
aJ=RJ(刻,a2=R2(X),Wj(bj,X),W2仇,刻,a3=R3(X)
搶到紅包的是第幾人?并說明理由。
(2)引入共享鎖指令SLockj(X)、獨占鎖指令XLock i(X)和解鎖指令ULock i(X),其中下標i表示第i個搶紅包人的指令。如下的調度執(zhí)行序列:
SLockj(X),aj=Rj(X),SLock2(X),a2=R2(X),XLockj(X)......
是否會產生死鎖?并說明理由。(3)為了保證系統(tǒng)第一個響應的搶紅包人為最終搶到紅包的人,請使用上述。)中
引入的鎖指令,對上述(1)中的調度執(zhí)行序列進行修改,在滿足2PL協議的前提下,給出一個不產生死鎖的完整的調度執(zhí)行序列。
【問題2】(6分)
下面是用SQL實現的搶紅包程序的一部分,請補全空缺處的代碼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ā)紅包中未領取的紅包記錄ID
DECLARENonR vedRedCURSORFOR SELECTID'>
FROMRed
WHERE BatchID=BatchNo AND ReceiverID IS NULL;
-打開游標
OPEN NonRecvedRed;
FETCH NonRecvedRed INTO NonRecvedNo;
while not error
一搶紅包事務
BEGIN TRANSACTION;
H寫入紅包記錄
UPDATE RED STE RECDIVER ID=RecvrNo
WHERE ID=nonRECVED AND(a)
//執(zhí)行狀態(tài)判定
If(修改的記錄數)=1 THEN
COMMIT
(B);
Return 1’
Else
ROLLBACK
End if
(c)
End while
關閉游標
CLOSE NnoRecved RD
Return0;
END
>>>>返回目錄:2017上半年數據庫系統(tǒng)工程師考試案例分析真題(匯總)
>>>>進入估分:2017上半年軟考分數早知道,在線估分+真題解析
>>>>點擊查看:2017上半年數據庫系統(tǒng)工程師考試案例分析真題答案和解析
軟考備考資料免費領取
去領取