114 一般警察特考二等 刑事警察人員類別數位鑑識組 資料庫管理與運用 考古題詳解

114 年・一般警察特考・二等・刑事警察人員類別數位鑑識組
試題代碼 資料庫管理與運用

第 一 題25 分

某創意基地擁有一棟大樓,分隔成多個創意房間(Room)來租借(Lease)給創意團隊(Team)。團隊有其名稱(TName),創意基地也賦予其不同的編號(TID)。房間坪數(Space)大小不一,房間每天的出租費率(Fee)也不同,創意基地對房間指定不同的編號(RNO)。租借是以「天」為單位,租借有開始日期(RBDate)、歸還日期(REDate)、該期間租金(Rent)。

創意基地容許多個團隊來一起共同承租同一期間的一個房間,共同負擔該房間該期間的租金,至於如何分攤是團隊間的事,育成中心不管;但是如有多個團隊租借,資料上還是要清楚記錄該期間有哪些團隊租借、各團隊該期間租借該空間的各自租借用途(Objective),以及租借期間應遵守的條件(Condition)。租期一開始可有多個團隊,但不可中途加入其他團隊,原團隊也不可中途退出。

下圖是某設計師所繪製的實體關係圖(Entity-Relationship Diagram, ERD),其中每一實體(矩形)鄰近某關係(菱形)間均有一對(min, max)的限制,代表該實體參與該關係之 min(至少)、max(至多)次數限制,∗* 代表沒有限制。屬性劃實底線者(有 TID、RNO、RBDate)為 Primary Key(主鍵)的一部份。

(題目附有 ERD 圖,文字擷取未包含圖形內容。)

下列答題,除了下圖中所示的英文屬性外,不得再假設任何其他屬性。

(一) 請先寫出上面敘述所隱含的所有功能相依(Functional Dependency)。(4 分)

(二) 請將此 ERD 轉化成關聯式資料庫綱要(Relation Schema)。再來,若該綱要尚未第三正規化,請將其轉為符合第三正規化關聯式資料庫綱要。(6 分)

(三) 請以新增弱實體(Weak Entity)方法,重新繪製 ERD。再來,若該綱要尚未第三正規化,請將其轉為符合第三正規化關聯式資料庫綱要。(10 分)

(四) 請比較原來的 ERD 與上述(三)所繪製的新 ERD,你認為哪個 ERD 比較好?為什麼?(5 分)

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題考查:

  1. 實體關係圖(ERD)轉換為關聯式資料庫綱要。
  2. 主鍵與功能相依(Functional Dependency, FD)。
  3. 部分相依、傳遞相依與第三正規化(3NF)。
  4. 多對多關係及弱實體(Weak Entity)的設計。

題目附圖中的 ERD 在提供的掃描頁面未顯示,因此以下依題目明確指出的主鍵 TID、RNO、RBDateTID、RNO、RBDate,並採取最符合題意的解讀:

  • TeamTeam 實體具有 TID、TNameTID、TName。
  • RoomRoom 實體具有 RNO、Space、FeeRNO、Space、Fee。
  • 團隊與房間的租借關係具有 RBDate、REDate、Rent、Objective、ConditionRBDate、REDate、Rent、Objective、Condition。
  • 同一房間同一租借開始日的租借,可由多個團隊共同參與。
  • Objective、ConditionObjective、Condition 視為個別團隊在該次租借中的關係屬性。

(一)功能相依

原租借關係的主鍵為:

(TID,RNO,RBDate)(TID,RNO,RBDate)

根據題意可得下列非平凡功能相依:

1. 團隊編號決定團隊名稱

TID→TNameTID \rightarrow TName

2. 房間編號決定房間坪數與每日費率

RNO→SpaceRNO \rightarrow Space RNO→FeeRNO \rightarrow Fee

合併表示為:

RNO→Space,FeeRNO \rightarrow Space,Fee

3. 房間編號與租借開始日決定該次租借資料

由於同一房間同一租借期間可供多個團隊共同承租,因此該房間該期間的歸還日與總租金應相同:

(RNO,RBDate)→REDate,Rent(RNO,RBDate) \rightarrow REDate,Rent

4. 團隊在特定房間、特定租借期間的租借用途與條件

(TID,RNO,RBDate)→Objective,Condition(TID,RNO,RBDate) \rightarrow Objective,Condition

因此最小功能相依集合為:

TID→TNameTID \rightarrow TName RNO→Space,FeeRNO \rightarrow Space,Fee (RNO,RBDate)→REDate,Rent(RNO,RBDate) \rightarrow REDate,Rent (TID,RNO,RBDate)→Objective,Condition(TID,RNO,RBDate) \rightarrow Objective,Condition

其中最後一項的左側為完整主鍵,因此屬於主鍵決定關係屬性的功能相依。


(二)原 ERD 轉換與第三正規化

1. 由原 ERD 轉為關聯式綱要

依原 ERD,可先形成一個租借關係:

LeaseRecord(TID,TName,RNO,Space,Fee,RBDate,REDate,Rent,Objective,Condition)LeaseRecord( TID,TName,RNO,Space,Fee,RBDate,REDate,Rent,Objective,Condition )

主鍵為:

TID,RNO,RBDate‾\underline{TID,RNO,RBDate}

即:

  • TIDTID:團隊編號
  • TNameTName:團隊名稱
  • RNORNO:房間編號
  • SpaceSpace:房間坪數
  • FeeFee:每日費率
  • RBDateRBDate:租借開始日
  • REDateREDate:歸還日
  • RentRent:該期間租金
  • ObjectiveObjective:租借用途
  • ConditionCondition:租借條件

2. 未正規化關係的問題

此關係不是第二正規化,原因如下:

  • TID→TNameTID \rightarrow TName,只依賴主鍵的一部分。
  • RNO→Space,FeeRNO \rightarrow Space,Fee,只依賴主鍵的一部分。
  • (RNO,RBDate)→REDate,Rent(RNO,RBDate) \rightarrow REDate,Rent,也只依賴主鍵的一部分。

因此存在資料重複及異動異常:

  • 同一團隊名稱會重複出現。
  • 同一房間坪數與費率會重複出現。
  • 同一房間同一租期的歸還日與租金會因共同承租團隊數量而重複出現。

3. 分解為第三正規化綱要

團隊關係

Team(TID‾,TName)Team(\underline{TID},TName)

功能相依:

TID→TNameTID \rightarrow TName

房間關係

Room(RNO‾,Space,Fee)Room(\underline{RNO},Space,Fee)

功能相依:

RNO→Space,FeeRNO \rightarrow Space,Fee

房間租期關係

RoomLease(RNO,RBDate‾,REDate,Rent)RoomLease(\underline{RNO,RBDate},REDate,Rent)

功能相依:

(RNO,RBDate)→REDate,Rent(RNO,RBDate) \rightarrow REDate,Rent

其中 RNORNO 為參照 RoomRoom 的外鍵。

團隊參與租借關係

TeamLease(TID,RNO,RBDate‾,Objective,Condition)TeamLease( \underline{TID,RNO,RBDate}, Objective,Condition )

其中:

  • TIDTID 為參照 TeamTeam 的外鍵。
  • (RNO,RBDate)(RNO,RBDate) 為參照 RoomLeaseRoomLease 的外鍵。
  • 主鍵為 (TID,RNO,RBDate)(TID,RNO,RBDate)。

因此第三正規化綱要為:

Team(TID‾,TName)Team(\underline{TID},TName) Room(RNO‾,Space,Fee)Room(\underline{RNO},Space,Fee) RoomLease(RNO,RBDate‾,REDate,Rent)RoomLease(\underline{RNO,RBDate},REDate,Rent) TeamLease(TID,RNO,RBDate‾,Objective,Condition)TeamLease(\underline{TID,RNO,RBDate},Objective,Condition)

各關係中,非主鍵屬性均完全依賴其所在關係的主鍵,且沒有非主鍵屬性決定其他非主鍵屬性的情形,故符合 3NF。


(三)加入弱實體後重新設計

1. 弱實體的設計

將一次特定房間、特定開始日的租借視為一個弱實體 LeaseLease。

原因是:

  • 租借必須依附某一個房間存在。
  • LeaseLease 本身沒有獨立且完整的識別屬性。
  • RBDateRBDate 只能作為部分鍵。
  • 必須與擁有者實體 RoomRoom 合併,才能唯一識別租借。

因此:

  • 強實體:RoomRoom
  • 弱實體:LeaseLease
  • 部分鍵:RBDateRBDate
  • 識別鍵:(RNO,RBDate)(RNO,RBDate)

2. 新 ERD 的文字表示

Room 實體

Room(RNO,Space,Fee)Room(RNO,Space,Fee)

RNORNO 為主鍵。

Lease 弱實體

🔒

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

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

免費註冊

第 二 題25 分

假設關聯式資料庫包含下列三個表格:

Prisoner (PID, Name, BDate, Term, CType, Address, Phone) 代表受刑人編號、姓名、生日、刑期(以「年」為單位)、犯罪類型(「犯罪類型」之內容值可為 Theft、Hurt、Fraud 等,分別代表偷竊、傷害、詐欺等)、原戶籍地址、手機。

Training (TNo, TName, Type, Period, Instructor) 代表職業訓練梯次編號、名稱、訓練類型、訓練期間、訓練指導員姓名。

Performance (PNo, TNo, Evaluation) 代表 PNo 的受刑人接受 TNo 的訓練表現評估(Evaluation,分為甲、乙、丙、丁、戊,共五個等級)。

請以 SQL 語言,寫出下列查詢或運作:

(一) 對訓練梯次人數大於 5 者,列出每個訓練梯次之訓練編號、名稱及該梯次訓練表現評估為「甲」或「乙」者之人數。(8 分)

(二) 找出在所有訓練表現評估均為「甲」之偷竊犯姓名。(6 分)

(三) 找出在所有訓練表現評估沒有任何一次為「戊」之詐欺犯姓名。(6 分)

(四) 更新受刑人李小鳴之訓練表現評估為「丙」。(5 分)

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

這一題的完整詳解

核心觀念

本題考查多表連接、分組與條件彙總,以及以「全稱條件」查詢關聯資料。

  • Prisoner 的 PID 是受刑人識別欄位;Performance.PNo 對應受刑人,Performance.TNo 對應訓練梯次。
  • GROUP BY 可按訓練梯次彙總人數;HAVING 用來篩選彙總後的群組。
  • COUNT(CASE WHEN ... THEN 1 END) 可計算符合條件的資料筆數。
  • 「所有表現均為甲」可用 NOT EXISTS 排除任何一筆非甲的紀錄;「沒有任何一次為戊」則直接以 NOT EXISTS 排除戊的紀錄。

解題方法與 SQL

(一)梯次人數大於 5,並列出甲、乙評估人數

先依訓練梯次分組,以該梯次的表現紀錄筆數判斷人數是否大於 5;再用條件計數統計評估為甲或乙的人數。

SELECT T.TNo,
 T.TName,
 COUNT(CASE WHEN P.Evaluation IN ('甲', '乙') THEN 1 END) AS ABCount
FROM Training AS T
JOIN Performance AS P
 ON P.TNo = T.TNo
GROUP BY T.TNo, T.TName
HAVING COUNT(P.PNo) > 5;

此處以 Performance 中該梯次的紀錄數代表受訓人數,並假設每位受刑人在同一梯次至多有一筆表現紀錄。若資料允許同一受刑人同一梯次重複出現,應改以 COUNT(DISTINCT P.PNo) 計算人數;甲、乙人數也應依資料唯一性調整。

(二)所有訓練表現均為甲的偷竊犯姓名

以 NOT EXISTS 確認該受刑人不存在任何非甲的表現紀錄,再依犯罪類型篩選偷竊犯。

SELECT DISTINCT R.Name
FROM Prisoner AS R
WHERE R.CType = 'Theft'
 AND EXISTS (
 SELECT 1
 FROM Performance AS P
 WHERE P.PNo = R.PID
 )
 AND NOT EXISTS (
 SELECT 1
 FROM Performance AS P
 WHERE P.PNo = R.PID
 AND P.Evaluation <> '甲'
 );
🔒

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

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

免費註冊

第 三 題25 分

假設某關聯式資料庫有表格 R(A,B,C,D,E,F,G,H,J)R(A,B,C,D,E,F,G,H,J),各屬性均無多值(Multi-Value)現象,已知下列功能相依:

FD1:{A,B}→{D,E,G}FD1:\{A,B\}\to\{D,E,G\}

FD2:J→{C,H,F}FD2:J\to\{C,H,F\}

FD3:H→BFD3:H\to B

(一) 請利用功能相依推演規則,寫出功能相依之推演過程,並利用 Closure 概念,找出 RR 所有的候選鍵(Candidate Key)及 Prime attributes、non-Prime attributes。(8 分)

(二) 目前 relation schema 是否符合第二正規化(2NF)?請說明符合或不符合 2NF 的原因。(6 分)

(三) 資料庫設計時,若對表格分解,會要求分解是保持無損連結(lossless join),此要求之目的為何?(5 分)

(四) 若 RR 分解為 R1(A,B,C,E,H)R_1(A,B,C,E,H)、R2(A,B,D,G)R_2(A,B,D,G)、R3(A,B,F,H,J)R_3(A,B,F,H,J),請證明這分解是或不是保持無損連結?(6 分)

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

這一題的完整詳解

核心觀念

本題考查功能相依(Functional Dependency, FD)的推演、屬性閉包、候選鍵、第二正規化(2NF),以及分解是否為無損連結(lossless join)。

  • 屬性閉包 X+X^+:由功能相依可從屬性集 XX 推得的所有屬性。
  • 超鍵:X+X^+ 包含關係的全部屬性。
  • 候選鍵:最小超鍵;移除其中任一屬性後,就不再是超鍵。
  • Prime attribute:至少出現在一個候選鍵中的屬性;其餘為 non-Prime attribute。
  • 2NF:關係已符合 1NF,且每個非 Prime attribute 都完全相依於每一個候選鍵,不得只依賴複合候選鍵的一部分。
  • 無損連結分解:分解後的各關係自然連結,恰好還原原關係,不會產生額外的虛假資料列。

(一)推演功能相依並找出候選鍵

已知:

AB→DEG,J→CHF,H→BAB\to DEG,\qquad J\to CHF,\qquad H\to B

依功能相依推演規則,可分別拆解右側屬性:

AB→D,AB→E,AB→GAB\to D,\quad AB\to E,\quad AB\to G J→C,J→H,J→FJ\to C,\quad J\to H,\quad J\to F

再由傳遞律 J→HJ\to H、H→BH\to B,得到:

J→BJ\to B

求候選鍵

先觀察未出現在任何功能相依右側的屬性。右側屬性為 B,C,D,E,F,G,HB,C,D,E,F,G,H,因此 AA、JJ 不在右側。這兩個屬性無法由其他屬性推得,故每個候選鍵都必須包含 A,JA,J。

計算閉包:

(AJ)+={A,J}(AJ)^+=\{A,J\}

由 J→C,H,FJ\to C,H,F,加入 C,H,FC,H,F;由 H→BH\to B,加入 BB;由 AB→D,E,GAB\to D,E,G,再加入 D,E,GD,E,G。因此:

(AJ)+={A,B,C,D,E,F,G,H,J}=R(AJ)^+=\{A,B,C,D,E,F,G,H,J\}=R

所以 AJAJ 是超鍵。又 AA 與 JJ 都必須出現在每個超鍵中,故 AJAJ 不可再縮小,是候選鍵。

由此可得唯一候選鍵為:

AJ\boxed{AJ}

因此:

  • Prime attributes:A,JA,J
  • non-Prime attributes:B,C,D,E,F,G,HB,C,D,E,F,G,H

(二)是否符合 2NF

不符合 2NF。

候選鍵 AJAJ 是複合鍵。由 J→C,H,FJ\to C,H,F,可知非 Prime attributes C,H,FC,H,F 只依賴候選鍵的一部分 JJ,而非完整候選鍵 AJAJ。這構成部分相依,違反 2NF。

🔒

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

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

免費註冊

第 四 題25 分

請回答下列問題:

(一) 當電腦只有一個 CPU,資料庫是否就沒有同時存取的可能?為什麼?(2 分)

(二) 若無很好的資料庫管理系統的同時存取控制(Concurrency Control),可能會出現很多問題,請舉例說明更新遺失(Lost Update)的現象。(5 分)

(三) 下列假設 ri(x)r_i(x) 代表交易 ii 去讀(read)資料項目 xx,wi(x)w_i(x) 代表交易 ii 去寫(write)資料項目 xx,也就是若 r2(x);w2(y);r4(x)r_2(x);w_2(y);r_4(x),代表系統的時程安排(Schedule)是先為交易 2 讀 xx,再為交易 2 寫 yy,之後為交易 4 讀 xx。

對下列 Schedule 請先繪出其「優先次序圖」(Precedence Graph),再以其來說明是否是「衝突可序列化」(Conflict Serializable)?若是,應等於何種「循序排程」(Serial Schedule)?(18 分)

r2(x);w2(x);r4(x);w4(x);r2(y);r1(y);w1(y);w1(z);r1(x);w1(x);r3(y);w3(y);r3(z);w5(z)r_2(x);w_2(x);r_4(x);w_4(x);r_2(y);r_1(y);w_1(y);w_1(z);r_1(x);w_1(x);r_3(y);w_3(y);r_3(z);w_5(z)

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

這一題的完整詳解

核心觀念

本題考資料庫交易的同時存取、更新遺失,以及以「優先次序圖」判斷衝突可序列化。

  • 同時存取不要求電腦有多個 CPU;單一 CPU 也能藉由快速切換交易,讓交易的操作交錯執行。
  • 衝突操作是來自不同交易、存取同一資料項目,且至少一個操作是寫入的操作組合:讀寫、寫讀或寫寫。讀讀不構成衝突。
  • 優先次序圖以交易為節點。若交易 TiT_i 的某項操作先於 TjT_j 的衝突操作,就畫出邊 Ti→TjT_i \to T_j。
  • 若圖中沒有有向環,排程即為衝突可序列化;任一拓樸排序代表一個等價的循序排程。

(一)單一 CPU 是否仍可能同時存取?

可能。 單一 CPU 同一瞬間只執行一個指令,但作業系統與資料庫管理系統可在交易操作之間切換執行。例如先執行交易 T1T_1 的讀取,再切換執行 T2T_2 的操作,形成交錯排程。這就是邏輯上的同時存取;不必是多個 CPU 在物理上同一瞬間執行。

(二)更新遺失的現象

假設資料項目 xx 原值為 100100,交易 T1T_1 要加 2020,交易 T2T_2 要減 1010:

順序操作結果
1T1T_1 讀取 x=100x=100T1T_1 暫存計算結果 120120
2T2T_2 讀取 x=100x=100T2T_2 暫存計算結果 9090
3T1T_1 寫入 x=120x=120資料庫變成 120120
4T2T_2 寫入 x=90x=90資料庫變成 9090

正確循序執行時,先加後減或先減後加,最後都應為 110110。但上述交錯執行中,T2T_2 依舊值 100100 計算並寫回 9090,覆蓋了 T1T_1 已寫入的 120120;因此 T1T_1 的更新遺失,最終值錯誤地成為 9090。

(三)優先次序圖與衝突可序列化

解題方法

逐一檢查不同交易對同一資料項目的操作。只要操作衝突,就依排程中的先後順序加入有向邊;同一對交易若由多個資料項目導出相同方向的邊,只需保留一條。

排程:

r2(x);w2(x);r4(x);w4(x);r2(y);r1(y);w1(y);w1(z);r1(x);w1(x);r3(y);w3(y);r3(z);w5(z)r_2(x);w_2(x);r_4(x);w_4(x);r_2(y);r_1(y);w_1(y);w_1(z);r_1(x);w_1(x);r_3(y);w_3(y);r_3(z);w_5(z)

逐項建立邊

  • 資料項目 xx:
  • T2T_2 的 r2(x)r_2(x)、w2(x)w_2(x) 先於 T4T_4 的 r4(x)r_4(x)、w4(x)w_4(x),產生 T2→T4T_2 \to T_4。
🔒

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

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

免費註冊

其他考古題

刑事警察人員類別數位鑑識組《資料庫管理與運用》其他年度