115 高普考高考三級 資訊處理 資料庫應用 考古題詳解

115 年・高普考・高考三級・資訊處理
試題代碼 資料庫應用

第 一 題25 分

隨著資安威脅與法規合規性(如 ISO 27001)要求提升,資料庫稽核(Database Audit)成為確保數據完整性的關鍵機制。假設現有用於記錄該稽核數據之關聯式資料庫,其資料表及內容敘述如下:

  • 稽核政策(政策編號、政策名稱、物件名稱、物件類型、稽核動作、是否啟用、建立者編號)
    • 政策編號為 PK。
    • 物件類型之內容值可為「TABLE」、「VIEW」、「STORE PROCEDURE」、「FUNCTION」之英文。
    • 稽核動作之內容值可為「SELECT」、「INSERT」、「UPDATE」、「DELETE」等指令。
  • 稽核日誌(日誌編號、政策編號、操作時間、操作類型)
    • 日誌編號為 PK。
    • 政策編號為 FK,參考「稽核政策」表中的政策編號。
  • 異常事件(事件編號、日誌編號、嚴重程度、偵測時間、事件描述、是否已結案)
    • 事件編號為 PK。
    • 日誌編號為 FK,參考「稽核日誌」資料表中的日誌編號。
    • 嚴重程度之內容值可為「高」、「中」、「低」。
    • 是否已結案之內容值為「Y」或「N」。
  • 稽核人員(稽核人員編號、姓名、所屬部門)
    • 稽核人員編號為 PK。
  • 事件處理紀錄(處理編號、事件編號、稽核人員編號、處理日期)
    • 處理編號為 PK。
    • 事件編號為 FK,參考「異常事件」資料表中的事件編號。
    • 稽核人員編號為 FK,參考「稽核人員」資料表的稽核人員編號。

請回答下列問題,其中第(2)至第(4)題請使用 SQL 語法進行作答。

(1)請透過上述關聯式綱目畫出實體關聯式模型(Entity-Relationship Model, ER Model)。(10 分)

(2)查詢各嚴重程度異常事件的統計資訊,列出嚴重程度、事件總數、已結案數、未結案數、未結案比例。未結案比例四捨五入計算至小數點後第 2 位,依事件總數由高至低排序。(5 分)

(3)查詢每位稽核人員於 2026 年的處理績效,列出稽核人員姓名、所屬部門、處理事件總數、其中高嚴重程度事件數,只列出處理事件總數大於 5 件的稽核人員,依處理事件總數由高至低排序。(5 分)

(4)假設現新增一筆稽核政策資料,政策編號為「P2025001」,政策名稱為「財務資料表異動稽核」,物件名稱為「Finance」,物件類型為「TABLE」,稽核動作為「DELETE」,是否啟用為「Y」,建立者編號為「U001」。請寫出對應的 SQL 新增語法。(5 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題涵蓋 ER 模型中的主鍵、外鍵與關係基數,以及 SQL 的分組彙總、條件彙總、日期範圍篩選與新增資料。

  • 主鍵(PK):唯一識別資料表中的每筆資料。
  • 外鍵(FK):參照另一資料表的主鍵,用來維持參照完整性。
  • 一對多關係:一筆父表資料可對應多筆子表資料;子表每筆資料透過外鍵參照父表。
  • 分組統計:以 GROUP BY 分組,再用 COUNT、SUM 等彙總函數計算。
  • 條件彙總:以 CASE WHEN 搭配彙總函數,計算符合條件的筆數。
  • 年度篩選:使用年度起日與次年度起日形成左閉右開的日期區間。

解題方法

(1)ER Model

依外鍵找出資料表間的關係:稽核日誌參照稽核政策,異常事件參照稽核日誌,事件處理紀錄則分別參照異常事件與稽核人員。

erDiagram
 稽核政策 ||--o{ 稽核日誌 : "政策編號"
 稽核日誌 ||--o{ 異常事件 : "日誌編號"
 異常事件 ||--o{ 事件處理紀錄 : "事件編號"
 稽核人員 ||--o{ 事件處理紀錄 : "稽核人員編號"

 稽核政策 {
 string 政策編號 PK
 string 政策名稱
 string 物件名稱
 string 物件類型
 string 稽核動作
 string 是否啟用
 string 建立者編號
 }

 稽核日誌 {
 string 日誌編號 PK
 string 政策編號 FK
 datetime 操作時間
 string 操作類型
 }

 異常事件 {
 string 事件編號 PK
 string 日誌編號 FK
 string 嚴重程度
 datetime 偵測時間
 string 事件描述
 string 是否已結案
 }

 稽核人員 {
 string 稽核人員編號 PK
 string 姓名
 string 所屬部門
 }

 事件處理紀錄 {
 string 處理編號 PK
 string 事件編號 FK
 string 稽核人員編號 FK
 date 處理日期
 }

|| 表示一端恰有一筆,o{ 表示另一端可有零筆或多筆。事件處理紀錄是連結異常事件與稽核人員的關聯資料表,因此一筆異常事件可有多筆處理紀錄,一位稽核人員也可有多筆處理紀錄。

(2)各嚴重程度的事件統計

先依嚴重程度分組,再以條件計數取得已結案數與未結案數。未結案比例為「未結案數 ÷ 事件總數」,最後四捨五入至小數點後兩位。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題25 分

某機構資料庫有以下兩張 E 與 C 資料表,並存在其關聯:

  • E(SID、CID、Grade):共 60000 筆資料,每個區塊(Block)存 50 筆資料。
  • C(CID、Name、Credit):共 600 筆資料,每個區塊(Block)存 30 筆資料。

假設該機構系統可用的緩衝區(Buffer)MM 共 22 頁,並執行下面 SQL 語法:

SELECT E.SID, C.Name, E.Grade FROM E JOIN C ON E.CID = C.CID

目前已知關聯式資料庫中,常見的 Join 演算法有三種,即 Simple Nested Loop Join(SNLJ)、Block Nested Loop Join(BNLJ)與 Hash Join,其 I/O 成本分別計算如下:

  • SNLJ:B(R)+∣R∣×B(S)B(R)+|R|\times B(S)
    對 RR 每一筆 Tuple,掃描整個 SS。
  • BNLJ:B(R)+⌈B(R)M−2⌉×B(S)B(R)+\left\lceil\frac{B(R)}{M-2}\right\rceil\times B(S)
    以 Block 為單位分批載入 RR,每批掃描一次 SS;M−2M-2 頁給外層,1 頁給內層,1 頁給輸出。
  • Hash Join:3×(B(R)+B(S))3\times(B(R)+B(S))
    分割階段讀寫各一次,探測階段再讀一次。

演算法內符號說明如下:

  • B(R)B(R) 代表資料表 RR 的區塊(Block)數,也就是以 RR 作為 JOIN 運算的驅動表(Driving Table / Outer Table)。
  • ∣R∣|R| 代表資料表 RR 的資料筆數。
  • MM 代表可用緩衝區(Buffer)頁數。
  • SS 為要計算的資料表。

請回答下面問題,並計算下列各演算法的 I/O 成本(需列計算過程):

(1)使用 SNLJ 法,以資料表 E 為驅動表。(5 分)

(2)使用 BNLJ 法,以資料表 C 為驅動表。(5 分)

(3)使用 Hash Join 法(假設分割後各 Partition 可完整放入記憶體)。(5 分)

(4)綜合比較上述三種結果,在本題情境下應選擇哪種演算法?說明原因。(10 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查巢狀迴圈連接與雜湊連接的 I/O 成本。先由資料筆數及每個區塊可存放的筆數,求出兩表的區塊數:

B(E)=60,00050=1,200,B(C)=60030=20B(E)=\frac{60{,}000}{50}=1{,}200,\qquad B(C)=\frac{600}{30}=20

緩衝區頁數為 M=22M=22,因此 BNLJ 每批可載入外層資料的頁數為 M−2=20M-2=20。

解題方法與計算

(1)SNLJ,以 E 為驅動表

SNLJ 對外層每一筆資料,掃描一次內層資料表。本題 R=ER=E、S=CS=C,故:

I/O=B(E)+∣E∣×B(C)=1,200+60,000×20=1,201,200 次 I/O\begin{aligned} \text{I/O} &=B(E)+|E|\times B(C)\\ &=1{,}200+60{,}000\times20\\ &=\boxed{1{,}201{,}200\text{ 次 I/O}} \end{aligned}

(2)BNLJ,以 C 為驅動表

外層為 CC,每批可載入 2020 頁;CC 本身也有 2020 頁,因此只需一批。內層 EE 需掃描一次:

I/O=B(C)+⌈B(C)M−2⌉×B(E)=20+⌈2022−2⌉×1,200=20+1×1,200=1,220 次 I/O\begin{aligned} \text{I/O} &=B(C)+\left\lceil\frac{B(C)}{M-2}\right\rceil\times B(E)\\ &=20+\left\lceil\frac{20}{22-2}\right\rceil\times1{,}200\\ &=20+1\times1{,}200\\ &=\boxed{1{,}220\text{ 次 I/O}} \end{aligned}

(3)Hash Join

依題目給定公式,分割階段讀寫各一次,探測階段再讀取一次;且題目假設分割後各 Partition 可完整放入記憶體:

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題25 分

假設資料庫中有三個資料項(Data Items):AA、BB、CC,其三者初始值皆為 100。當有三筆交易 T1T1、T2T2 與 T3T3 同時進入系統,各自交易的預期操作順序如下所示:

  • T1T1:read⁡(A)→write⁡(A)→read⁡(B)→write⁡(B)\operatorname{read}(A)\to\operatorname{write}(A)\to\operatorname{read}(B)\to\operatorname{write}(B)
  • T2T2:read⁡(B)→write⁡(B)→read⁡(C)→write⁡(C)\operatorname{read}(B)\to\operatorname{write}(B)\to\operatorname{read}(C)\to\operatorname{write}(C)
  • T3T3:read⁡(C)→read⁡(A)→write⁡(A)\operatorname{read}(C)\to\operatorname{read}(A)\to\operatorname{write}(A)

假設排程器(Scheduler)採用嚴格兩階段鎖定協定(Strict 2PL):

  • 在增長階段(Growing Phase),交易可以取得鎖定,但不能釋放任何鎖定。
  • 在收縮階段(Shrinking Phase),交易持有的所有互斥鎖 X(X-lock)必須持續保留,直到交易提交(Commit)或中斷(Abort)後才能一次釋放。
  • 所有操作皆遵循著「具備鎖定升級」:即若交易已持有共享鎖 S,在執行 write 前必須升級為互斥鎖 X。

考慮排程器依照時間序列 t1t1 至 t9t9 收到下列操作請求:

  • t1t1:T1T1 請求 read⁡(A)\operatorname{read}(A)
  • t2t2:T2T2 請求 read⁡(B)\operatorname{read}(B)
  • t3t3:T3T3 請求 read⁡(C)\operatorname{read}(C)
  • t4t4:T1T1 請求 write⁡(A)\operatorname{write}(A)
  • t5t5:T2T2 請求 write⁡(B)\operatorname{write}(B)
  • t6t6:T1T1 請求 read⁡(B)\operatorname{read}(B)
  • t7t7:T2T2 請求 read⁡(C)\operatorname{read}(C)
  • t8t8:T3T3 請求 read⁡(A)\operatorname{read}(A)
  • t9t9:T1T1 試圖提交(commit)

請回答以下問題:

(1)詳細分析從 t1t1 至 t9t9 的執行過程中,各個交易的鎖定狀態變化,並且標記該時間點交易是否會進入阻塞(Blocked/Waiting)狀態。(書寫時,若某個資料項要使用 S 鎖請標註 Lock-S(資料項);若需要 X 鎖則書寫 Lock-X(資料項)。)(10 分)

(2)此排程於 t9t9 之後的時間,是否有機會形成死結(Deadlock)?若有,請指出是哪些交易互相等待。(10 分)

(3)若排程能順利執行或經由處理後結束,請說明各交易的鎖定點(Lock Point)分別位於哪一個時間點。(5 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查嚴格兩階段鎖定(Strict 2PL)、共享鎖與互斥鎖的相容性、鎖定升級、阻塞與死結,以及鎖定點(Lock Point)。

  • read(X) 前須持有資料項 XX 的共享鎖(S-lock)。
  • write(X) 前須持有資料項 XX 的互斥鎖(X-lock)。若已持有 S-lock,須先升級為 X-lock。
  • 同一資料項的 S-lock 可由多筆交易同時持有;X-lock 與任何其他交易持有的 S-lock 或 X-lock 都不相容。
  • 嚴格 2PL 規定,交易取得鎖後不得在提交或中斷前釋放;本題中特別要求 X-lock 必須保留至交易結束。
  • 鎖定點是交易取得最後一把鎖的時間點。

解題方法

依題目給定的 t1t1 至 t9t9 順序逐項處理:先判斷該操作需要哪種鎖,再檢查其他交易是否持有不相容的鎖。若請求被拒絕,交易進入等待;等待中的交易尚未取得該鎖,後續操作也無法執行。

(1)t1t1 至 t9t9 的鎖定狀態

時間請求與鎖定處理鎖定狀態變化是否阻塞
t1t1T1T1 執行 read⁡(A)\operatorname{read}(A),取得 Lock-S(A)T1T1 持有 S(A)S(A)否
t2t2T2T2 執行 read⁡(B)\operatorname{read}(B),取得 Lock-S(B)T2T2 持有 S(B)S(B)否
t3t3T3T3 執行 read⁡(C)\operatorname{read}(C),取得 Lock-S(C)T3T3 持有 S(C)S(C)否
t4t4T1T1 執行 write⁡(A)\operatorname{write}(A),將 S(A)S(A) 升級為 Lock-X(A)T1T1 持有 X(A)X(A)否;AA 上沒有其他交易的鎖
t5t5T2T2 執行 write⁡(B)\operatorname{write}(B),將 S(B)S(B) 升級為 Lock-X(B)T2T2 持有 X(B)X(B)否;BB 上沒有其他交易的鎖
t6t6T1T1 請求 read⁡(B)\operatorname{read}(B),須取得 Lock-S(B)T2T2 持有 X(B)X(B),與 T1T1 的 S-lock 不相容;T1T1 等待是,T1T1 阻塞
t7t7T2T2 請求 read⁡(C)\operatorname{read}(C),須取得 Lock-S(C)T3T3 持有 S(C)S(C),S-lock 相容;T2T2 取得 S(C)S(C)否
t8t8T3T3 請求 read⁡(A)\operatorname{read}(A),須取得 Lock-S(A)T1T1 持有 X(A)X(A),與 T3T3 的 S-lock 不相容;T3T3 等待是,T3T3 阻塞
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題25 分

BASE 原則(BASE Properties)與 CAP 定理(CAP Theorem)常見於在分散式系統(Distributed Systems)與分散式資料庫的架構設計中,請回答以下問題:

(1)解釋 BASE 原則。(10 分)

(2)解釋 CAP 定理。(10 分)

(3)在分散式資料庫中,CAP 是一項限制,為何一個分散式資料庫不可能同時滿足 CAP?(5 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

(一)BASE 原則

核心觀念

BASE 是分散式資料庫常用的設計取向,名稱來自三項特性:

  • Basically Available(基本可用):系統發生部分故障或節點間通訊受阻時,仍盡力提供服務;部分請求可能收到延遲、降級或不完整的回應。
  • Soft State(軟狀態):資料狀態可能因節點間複寫尚未完成而暫時不一致,且狀態會隨背景同步而改變。
  • Eventual Consistency(最終一致性):若沒有新的更新,且節點間通訊最終恢復,資料經過同步後,各副本終將收斂為一致的狀態。

解題方法

回答 BASE 時,依序說明「服務可用性」、「複本暫時不一致」與「同步後收斂」三層意義,再指出這是以較寬鬆的一致性換取分散式系統的可用性與容錯能力。

BASE 並不代表資料永遠不一致,也不表示系統放棄一致性;它容許短暫不一致,並以後續同步達成最終一致。

解題技巧

記憶順序可掌握為:可用、狀態可暫變、最後一致。常見失分點是把「最終一致性」誤寫成「每次讀取都立即取得最新資料」。


(二)CAP 定理

核心觀念

CAP 定理討論分散式資料系統的三項性質:

  • Consistency(一致性):每次讀取都能取得符合一致性規則的資料;在 CAP 的典型說明中,通常指線性一致性(linearizability),即操作看起來像在單一副本上依時間順序完成。
  • Availability(可用性):每個送到未故障節點的請求,都能在有限時間內收到成功回應。
  • Partition tolerance(分割容錯性):當網路分割使節點彼此無法通訊時,系統仍能繼續運作。

解題方法

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題