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