114 調查局特考三等 資訊科學組 資料庫應用 考古題詳解
第 一 題6 分
為設計某調查局資料庫,其簡化情境如下:
各調查團隊(Team)有其編號(TID)、名稱(Name),他們均會向供應商(Supplier)購買裝備(Equipment);供應商有其代號(SID),裝備有其編號(Eno)。
每次購買會記錄其時間(Time)。每次購買只有一個供應商,亦即不會由多個供應商聯合提供;每次最多買 20 種裝備,每種裝備可能購買若干數量(Quantity)。
原卷附有實體關係圖(Entity-Relationship Diagram)。圖例說明如下:
每一實體鄰近某關係間均有一個對應比率(min, max),代表該實體參與該關係之最少(min)及最多(max)次數, 代表沒有限制。屬性劃實底線者為主鍵(Primary Key)的一部分。
【原卷附實體關係圖,文字層未擷取圖形內容】
(一) 請說明該圖是否能忠實地反映上述資訊需求,以及哪些資訊無法由該圖得知。
(二) 請以新增弱實體(Weak Entity)的方式,重新繪製實體關係圖,以真正完整反映上述資訊需求。此圖只可使用二元(binary)關係,可新增必要的關係,但除了弱實體外,不得再考慮其他實體。
登入後即可作答並保存紀錄。
核心觀念
本題考查**實體關係模型(ER Model)**的基數限制、三元關係、弱實體與識別關係。
原圖把 Purchase 畫成連結 Team、Supplier、Equipment 的三元關係,並將 Time、Quantity 設為關係屬性。圖上三個實體旁的基數皆為 ,表示每個實體參與該關係的次數可以是零次以上,沒有上限。
但題目中的「一次購買」是一個採購事件:一次事件由一個團隊向一家供應商購買,並可包含多種裝備;每一種裝備還有自己的購買數量。因此,應把採購事件和該次採購中的裝備明細分開表示。
(一)原圖能否忠實反映需求
不能完整忠實反映。
原圖可表示團隊、供應商與裝備之間存在購買關係,也可以把時間和數量附在該關係上;但它無法完整表示以下需求:
-
無法明確識別一次採購事件。 三元關係的一筆關係實例是「某團隊、某供應商、某裝備」的組合。一次採購若包含多種裝備,會被拆成多筆三元關係,圖中沒有共同的採購識別資料把這些裝備明細歸為同一次採購。
-
無法保證一次採購只有一家供應商。 「每次採購只有一個供應商」是對採購事件的限制;原圖沒有獨立的採購事件可套用此限制。圖上的 只說明實體參與三元關係的次數,不能表達「一個採購事件恰有一個供應商」。
-
無法限制每次採購最多包含 20 種裝備。 原圖沒有可計算明細數量的採購事件,因此不能對每次採購設定裝備種類數的上限。
-
不能保證每個團隊至少購買一次。 圖上 Team 端為 ,允許團隊完全不參與購買;題意則說各團隊均會購買,至少應參與一次。
此外,原圖沒有給採購事件一個識別方式,因此也無法明確區分同一團隊重複向同一供應商購買同一裝備的不同採購事件。
(二)以弱實體改畫 ER 圖
可用兩個弱實體表示採購事件及其裝備明細;所有關係均為二元關係。
實體與屬性
- Team:
TID為主鍵,另有Name。 - Supplier:
SID為主鍵。 - Equipment:
Eno為主鍵。 - Purchase(弱實體,採購事件):有
Time,並新增部分鍵PNo,用來區分同一團隊的不同採購事件。 - PurchaseDetail(弱實體,採購明細):有
Quantity,以Eno作為部分鍵;它與所屬 Purchase 合併識別後,代表該次採購中的一種裝備。
第 二 題5 分
假設資料庫對交易(Transaction)採用基本的兩階段鎖(basic two-phase locking)機制。在此機制下,有可能產生死鎖(deadlock)。
假設 代表交易讀取資料項目 , 代表交易對資料項目 寫入新值; 代表交易對 下讀鎖(read lock), 代表交易對 下寫鎖(write lock),其餘操作依此類推。
、 兩個交易原先預計進行的內容如下:
實際上,系統不是序列化(Serial)排程,而是將交易交織進行。假設在兩個交易交織進行的 排程(Schedule)中, 在時間戳(Timestamp)為 1000 時開始, 在時間戳為 1010 時開始。在此 排程下,系統偵測到有死鎖產生的可能。
(一) 請繪出其可能導致死鎖的等待圖(wait-for graph),其中必須標註等待的資源。
(二) 在上述 排程下,資料庫管理系統有死鎖預防機制(deadlock prevention scheme)以避免死鎖。下列各種不同機制,請說明每個交易分別會發生的情況。
- 採 Wait-die。
- 採 Wound-wait。
- 採 No waiting。
- 採 Cautious waiting。
登入後即可作答並保存紀錄。
核心觀念
本題考基本兩階段鎖定(Basic Two-Phase Locking, Basic 2PL)與四種死鎖預防機制。
基本 2PL 將交易分為兩階段:
- 成長階段:可以取得新鎖,但不能釋放鎖。
- 縮減階段:可以釋放鎖,但不能再取得新鎖。
基本 2PL 可確保衝突可序列化,但交易仍可能互相等待而形成死鎖。等待圖中,若 等待的資源由 持有,就畫有向邊 ,並標註資源;圖中若有循環,表示存在死鎖。
四種預防機制以交易時間戳比較年齡。時間戳較小者較舊:
因此 是較舊交易, 是較新交易。
解題方法
依題目表格順序追蹤鎖的取得、持有與釋放,再以鎖相容性判斷等待關係:
- 讀鎖與讀鎖相容。
- 寫鎖與任何其他交易持有的讀鎖或寫鎖都不相容。
由於 先開始,可先取得 的讀鎖。接著 取得 、 的讀鎖。當 要取得 的寫鎖時, 持有 的讀鎖,因此 等待 。之後 要取得 的寫鎖時, 持有 的讀鎖,因此 等待 。兩條等待邊構成循環。
(一)等待圖
等待 A 的寫鎖
T2 ───────────────▶ T1
▲ │
└───────────────────┘
等待 C 的寫鎖
- : 等待 的寫鎖; 的讀鎖由 持有。
- : 等待 的寫鎖; 的讀鎖由 持有。
等待圖包含循環 ,故有死鎖。
(二)死鎖預防機制
判斷每種機制時,先確認提出請求者與持鎖者,再比較兩者時間戳。以下依題目交織情境,說明死鎖產生時相關鎖請求的處理。
1. Wait-die
規則:
- 較舊交易要求較新交易持有的鎖:較舊交易等待。
- 較新交易要求較舊交易持有的鎖:較新交易中止(die),之後以原時間戳重啟。
套用本題:
- (舊)要求 的寫鎖,而 (新)持有 的讀鎖: 等待 。
- (新)要求 的寫鎖,而 (舊)持有 的讀鎖: 中止並釋放已持有的鎖; 可取得 的寫鎖並繼續。
2. Wound-wait
規則:
第 三 題4 分
為設計一個調查局的關聯式資料庫,假設有關聯模式 ,各屬性均無多值(Multi-Value)現象,其功能相依如下:
(一) 請以功能相依的推導,找出 的閉包(Closure),即 。
(二) 請以功能相依的推導與找屬性閉包的方法,找出 所有的候選鍵(Candidate Key),並列出全部的主屬性(Prime attributes)及非主屬性(non-Prime attributes)。
(三) 請說明上述關聯模式(relation schema)是否符合第三正規化(3NF),並說明原因。
(四) 若 分解為 、、,請說明此分解是否保持無損連接(lossless join),並說明原因。
登入後即可作答並保存紀錄。
核心觀念
本題考查功能相依(Functional Dependency, FD)的屬性閉包、候選鍵、第三正規化(3NF),以及分解的無損連接判定。
- 屬性閉包 :從屬性集 出發,反覆套用功能相依,直到無法增加屬性;所得屬性集就是 。
- 候選鍵:能決定關係中所有屬性,且去掉其中任一屬性後便不再能決定所有屬性的最小屬性集。
- 3NF:對每一個非平凡功能相依 ,至少符合以下一項:
- 是超鍵;或
- 是主屬性,也就是至少出現在一個候選鍵中。
- 無損連接:分解後自然連接所得的結果恰為原關係,不會產生額外的虛假資料列。二元分解 的判定條件是: 或 可由功能相依推出。
(一)求
以 為起點,逐項套用功能相依:
- 由 ,加入 。
- 由 ,加入 。
- 由 ,加入 ; 原已在閉包中。
- 由 ,加入 。
目前得到 。 不在起始集合中,也沒有任何功能相依能由目前的屬性推出 ,因此閉包計算結束:
(二)求所有候選鍵與主屬性
先找出不會出現在任何功能相依右側的屬性。右側屬性為 ,因此只有 不在右側。
由於沒有功能相依能推出 ,任何候選鍵都必須包含 。
再看 本身無法推出其他屬性;因此還需要找出能補足其餘屬性的屬性組合。由 ,若鍵包含 ,即可推出 ,再由 、、 推得所有屬性:
故 是超鍵。其子集 與 都不能決定全部屬性,所以 是候選鍵。
第 四 題10 分
某機構使用安全機制設計資料庫,採用相較傳統作法更為嚴格的強制存取控制(Mandatory Access Control)機制。
使用者的安全許可與資料物件安全等級均分為四級,由高至低為 Top Secret(TS)、Secret(S)、Confidential(C)、Unclassified(U),並採行常用的 Bell-LaPadula 模式。
(一) 請分別舉例說明此模式下的「簡單安全屬性特性」(Simple Security Property)與「星號安全屬性特性」(Star Security Property)。
(二) 假設資料庫中的 Employee(Name, Salary, Job_Performance)表格只有四筆紀錄,其值如下表。在強制存取控制下,會自動新增一個屬性 TC(Tuple Classification),以註記每筆紀錄整筆的安全等級。
例如,第一筆紀錄之 Name、Salary、Job_Performance 屬性的安全等級分別為 C、S、C,因此第一筆整筆紀錄的安全等級,取三者最高者為 S。第二筆紀錄之 Name、Salary、Job_Performance 屬性的安全等級分別為 U、TS、U,因此第二筆整筆紀錄的安全等級為 TS。
原卷表格文字層擷取不全,請依原卷表格內容,假設某使用者的安全許可為 C,說明其執行 SELECT * FROM EMPLOYEE 所產生的結果。
登入後即可作答並保存紀錄。
核心觀念
本題考強制存取控制(Mandatory Access Control, MAC)中的 Bell–LaPadula 機密性模型。安全等級由低至高為 ;比較安全等級時,最高等級指機密性最高者。
模型的兩項主要規則是:
- 簡單安全屬性(Simple Security Property):不得向上讀(no read up)。使用者只能讀取安全等級不高於自己許可的資料。
- 星號安全屬性(Star Security Property):不得向下寫(no write down)。使用者只能寫入安全等級不低於自己許可的資料。
前者限制讀取,後者限制寫入,目的都是避免機密資訊流向較低安全等級。
解題方法
(一)舉例說明兩項屬性
假設使用者許可為 :
- 依簡單安全屬性,使用者可以讀取 、 資料,但不得讀取 、 資料。例如, 許可的使用者不得讀取 等級的薪資資料。
- 依星號安全屬性,使用者可以寫入 、、 等級的資料,但不得寫入 等級的資料。例如, 許可的使用者不得把自己處理的資料寫入 等級物件,以免高等級資訊流向低等級。
(二)計算可見紀錄並說明查詢結果
題目以各欄位中最高的安全等級作為整筆紀錄的 Tuple Classification(TC):