閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】
某高速路不停車收費(fèi)系統(tǒng)(ETC)的業(yè)務(wù)描述如下:
(1)車輛駛?cè)敫咚俾啡肟谡军c(diǎn)時(shí),將駛?cè)胄畔ⅲ‥TC卡號(hào),入口編號(hào),駛?cè)霑r(shí)間)寫入登記表;
(2)車輛駛出高速路出口站點(diǎn)(收費(fèi)口)時(shí),將駛出信息(ETC卡號(hào),出口編號(hào),駛出時(shí)間)寫入登記表;根據(jù)入口編號(hào)、出口編號(hào)及相關(guān)收費(fèi)標(biāo)準(zhǔn),清算應(yīng)繳費(fèi)用, 并從綁定的信用卡中扣除費(fèi)用。
一張ETC卡號(hào)只能綁定一張信用卡號(hào),針對(duì)企業(yè)用戶,一張信用卡號(hào)可以綁定多 個(gè)ETC卡號(hào)。使用表綁定(ETC卡號(hào),信用卡號(hào))來描述綁定關(guān)系,從信用卡(信用卡號(hào),余額)表中扣除費(fèi)用。
針對(duì)上述業(yè)務(wù)描述,完成下列問題:
【問題1】(4分)
在不修改登記表的表結(jié)構(gòu)和保留該表歷史信息的前提下,當(dāng)車輛駛?cè)霑r(shí),如何保 證當(dāng)前ETC卡已經(jīng)清算過,而在駛出時(shí)又如何保證該卡已駛?cè)攵瘩偝???qǐng)用100字以內(nèi)文字簡(jiǎn)述處理方案。
【問題2】(5分)
當(dāng)車輛駛出收費(fèi)口時(shí),從綁定信用卡余額中扣除費(fèi)用的偽指令如下:讀取信用卡余額到變量x,記為x=R(A);扣除費(fèi)用指令x=x-a;寫信用卡余額指令記為W(A,x)。
(1)當(dāng)兩個(gè)綁定到同一信用卡號(hào)的車輛同時(shí)經(jīng)過收費(fèi)口時(shí),可能的指令執(zhí)行序列為:x1=R(A),x1=x1-a1,x2=R(A),x2=x2-a2,W(A,x1),W(A,x2)。此時(shí)會(huì)出現(xiàn)什么問題?(100字以內(nèi))
(2)為了解決上述問題,引入獨(dú)占鎖指令XLock(A)對(duì)數(shù)據(jù)A進(jìn)行加鎖,解鎖指令Unlock(A)對(duì)數(shù)據(jù)A進(jìn)行解鎖。請(qǐng)補(bǔ)充上述執(zhí)行序列,使其滿足2PL協(xié)議。
【問題3】(6分)
下面是用E-SQL實(shí)現(xiàn)的費(fèi)用扣除業(yè)務(wù)程序的一部分,請(qǐng)補(bǔ)全空缺處的代碼。
CREATE PROCEDURE 扣除(IN ETC 卡號(hào) VARCHAR(20), IN 費(fèi)用 FLOAT)
BEGIN
UPDATE 信用卡 SET 余額=余額-費(fèi)用
FROM 信用卡,綁定
WHERE 信用卡.信用卡號(hào)=綁定.信用卡號(hào) AND (a) ;
if error then ROLLBACK;
else (b) ;
END