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