112 地方特考三等 資訊處理類科 資料庫應用 考古題詳解

112 年・地方特考・三等・資訊處理類科
試題代碼 資料庫應用

第 一 題25 分

某圖書館有下列已知的相關資訊:

  • 每本「書」有一個 ISBN 號碼,這個號碼是唯一的。每本書也有書名、作者、出版社等資料需要記載下來。
  • 每個「讀者」都有身分證號碼、姓名和手機號碼。有些讀者可能有二個或者更多個手機,其號碼都要記錄下來。若某讀者來到圖書館,從來沒有借書,那麼他的個人資料,圖書館就不會記錄下來。只有那些有借過書的,圖書館才會記錄他的個資。
  • 圖書館有若干「館員」,每個館員有身分證號碼、姓名、隸屬組別。其中,隸屬組別指的是館員的工作性質。例如,有的是採購組,有的是編目組,有的是服務組等。每位館員只會隸屬於一個組。館員中,只有服務組的館員會參與處理讀者借書的程序。
  • 所有的「借閱紀錄」都要存記下來,也就是某位讀者借出某一本書,經由某位館員處理的資訊要記錄下來。同時,也要記錄借出日期和歸還日期。讀者每次可借閱多本書。
  • 此外,圖書館會不定期檢查圖書的「書籍狀態」。每次檢查若發現有狀況的書籍,則會把相關資訊記錄下來。這部分的資訊包括檢查日期和狀態說明,例如遺失、破損等。

根據上述說明,請使用實體-關係模型(Entity-Relationship model)為這些資料設計出正確的綱目(ER schema),繪出其綱目圖(schema diagram)。其中,關係(relationship)的基數比(cardinality ratio)請使用 1:N1:N、M:NM:N 等方式表示,並且請在圖中標示出參與限制條件(participation constraint)。

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

這一題的完整詳解

核心觀念

本題考查 ER 模型中的實體、屬性、鍵、關係、基數比與參與限制。設計時要依題意辨認:

  • 實體:具有可辨識身分、需要獨立記錄的對象。
  • 鍵屬性:能唯一識別實體的屬性。
  • 基數比:限制關係中各實體可參與的數量,例如 1:N1:N、M:NM:N。
  • 參與限制:實體參與某關係是否為必要條件;全參與通常以雙線表示,部分參與以單線表示。
  • 多值屬性:同一實體可有多個值的屬性,例如讀者的手機號碼。

解題方法

先找出題目要求記錄的對象,再依「每筆資料如何識別」決定鍵;接著把借書和書籍狀況檢查分別建成關係,依每個對象可參與的次數判斷基數及參與限制。

1. 實體與屬性

  • 書(Book):以 ISBN 為鍵,另記錄書名、作者、出版社。
  • 讀者(Reader):以身分證號碼為鍵,另記錄姓名與手機號碼。手機號碼是多值屬性,圖中以雙橢圓表示。
  • 館員(Librarian):以身分證號碼為鍵,另記錄姓名及隸屬組別。每位館員只屬於一組,因此「隸屬組別」是單值屬性。
  • 借閱紀錄(Borrowing):每筆記錄表示某位讀者借出某一本書,由某位館員處理,並記錄借出日期、歸還日期。
  • 書籍狀態檢查(Inspection):記錄書籍檢查日期及狀態說明。日期與說明屬於檢查關係的屬性。

題目只要求保存有借書的讀者資料,因此 Reader 不必設計成可獨立存在、未曾借書的讀者名冊;每位已記錄的讀者至少參與一筆借閱。

2. 借閱關係

以三元關係 借閱(Borrow) 連結 Reader、Book、Librarian,並將借出日期、歸還日期放在此關係上。

依題意:

  • 每一筆借閱紀錄對應一位讀者、一本書及一位處理館員。
  • 一位讀者可借閱多本書,也可有多筆借閱紀錄。
  • 一本書可在不同時間被不同讀者借閱。
  • 一位館員可處理多筆借閱紀錄。

因此,以「借閱紀錄」為關係記錄時,三個實體到借閱關係皆為 1:N1:N;讀者、書、館員各自對應多筆借閱紀錄。Reader 與 Book 的借閱歷史若單獨觀察,則為 M:NM:N。

參與限制方面:

  • Reader 對 Borrow 為全參與:圖書館只記錄有借過書的讀者。
  • Book 對 Borrow 為部分參與:題目未說每本書都一定借出過。
  • Librarian 對 Borrow 為部分參與:只有服務組館員處理借書,但題目未說每位服務組館員都一定處理過借閱。

借閱關係另有條件限制:參與 Borrow 的館員必須隸屬服務組。ER 圖可在圖旁註明此約束;基本 ER 基數與參與線本身無法完整表達這項組別條件。

3. 書籍狀態檢查關係

以 檢查(Inspection) 連結 Book,並記錄檢查日期、狀態說明。

🔒

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

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

免費註冊

第 二 題20 分

有一機票購買資料庫,含有以下的關連(relations):

旅客(護照號碼,姓名,電話,年齡)

航班(航班編號,航空公司,出發時間,抵達時間,出發地,目的地)

購票資訊(護照號碼,航班編號,座位,票價)

請用關連式代數(Relational Algebra)回答以下查詢(queries):

(一)所有從「臺北」出發,到達目的地是「洛杉磯」的直飛航班(亦即中間沒有停留任何其他機場),列出這些航班上的旅客護照號碼和姓名。

(二)針對從「臺北」出發的每一個航班,列出航班編號和此航班所有乘客的平均年齡。

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

這一題的完整詳解

核心觀念

本題考查關連式代數中的選擇、投影、連接,以及延伸關連式代數中的分組與聚合。

  • 選擇 σ\sigma:依條件篩選資料列。
  • 投影 π\pi:挑選所需欄位。
  • 連接 ⋈\bowtie:依共同屬性或指定條件,組合不同關連中的資料。
  • 分組聚合:依群組欄位計算平均值;以 γ\gamma 表示,AVG⁡\operatorname{AVG} 表示平均。

解題方法

令旅客、航班、購票資訊三個關連分別為 旅客旅客、航班航班、購票資訊購票資訊。

(一)列出臺北直飛洛杉磯航班上的旅客護照號碼與姓名

「直飛」在題目所給資料中的判斷方式,是航班的出發地為臺北,且目的地為洛杉磯;航班關連沒有中途停留欄位,因此依題意以這兩個欄位條件篩選。

先從航班關連挑出符合條件的航班:

H←σ出發地=臺北 ∧ 目的地=洛杉磯(航班)H \leftarrow \sigma_{\text{出發地}=\text{臺北}\ \land\ \text{目的地}=\text{洛杉磯}}(航班)

再以航班編號連接購票資訊,取得這些航班的乘客護照號碼;最後以護照號碼連接旅客,取出姓名,並投影出題目要求的兩個欄位:

π護照號碼,姓名(旅客⋈旅客.護照號碼=購票資訊.護照號碼(購票資訊⋈購票資訊.航班編號=H.航班編號H))\pi_{\text{護照號碼},\text{姓名}} \left( 旅客 \bowtie_{旅客.\text{護照號碼}=購票資訊.\text{護照號碼}} \left( 購票資訊 \bowtie_{購票資訊.\text{航班編號}=H.\text{航班編號}} H \right) \right)

(二)列出臺北出發航班及其乘客平均年齡

先篩選出發地為臺北的航班,再依航班編號連接購票資訊,並依護照號碼連接旅客,以取得乘客年齡。最後依航班編號分組,對年齡計算平均值:

🔒

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

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

免費註冊

第 三 題20 分

承上題的資料庫綱目(schema),請用 SQL 回答下列查詢:

(一)我們想要查出有哪些旅客,他們從來沒有搭乘過「甲航空」的任何一個航班,列出這些旅客的護照號碼和姓名。

(二)我們想要找出有哪些航班的乘客人數低於 1010 人(i.e., <10<10),請列出這些航班所屬的航空公司、該航班的航班編號,以及搭乘該航班的人數(注意,是低於 1010 人的)。

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

這一題的完整詳解

核心觀念

本題考查多表連接、集合差異,以及分組與條件篩選。

(一)「從來沒有搭乘過甲航空」表示該旅客不存在任何一筆搭乘甲航空航班的紀錄,可用 NOT EXISTS 表示。此寫法能直接表達「不存在符合條件的資料」。

(二)要計算每個航班的乘客人數,先依航空公司與航班編號分組,再以 HAVING 篩選人數少於 10 的航班。航班資料與搭乘紀錄使用 LEFT JOIN,才能將沒有乘客的航班也計入,其人數為 0。

解題方法

題目提到「承上題的資料庫綱目」,但本題未附綱目與欄位名稱。以下依題意假設有旅客、航空公司、航班及搭乘紀錄等資料表,並以 Passenger、Airline、Flight、Booking 作為表名;實際作答時應替換成前題的表名與欄位名稱。假設 Booking 每筆資料代表一位旅客搭乘一個航班。

(一)找出從未搭乘甲航空的旅客

SELECT p.PassportNo, p.Name
FROM Passenger AS p
WHERE NOT EXISTS (
 SELECT 1
 FROM Booking AS b
 JOIN Flight AS f
 ON f.AirlineID = b.AirlineID
 AND f.FlightNo = b.FlightNo
 JOIN Airline AS a
 ON a.AirlineID = f.AirlineID
 WHERE b.PassportNo = p.PassportNo
 AND a.AirlineName = '甲航空'
);

子查詢逐一檢查目前旅客是否有搭乘紀錄,並透過航班連到航空公司。若找不到航空公司為「甲航空」的搭乘紀錄,NOT EXISTS 條件成立,該旅客便會出現在結果中。

若前題的航班編號只在航空公司內唯一,連接 Booking 與 Flight 時須同時使用航空公司代號及航班編號,避免不同航空公司的同號航班被誤認為同一航班。

(二)找出乘客人數少於 10 人的航班

🔒

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

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

免費註冊

第 四 題25 分

有 55 個交易(transactions)T1T_1、T2T_2、T3T_3、T4T_4、T5T_5,在被執行時形成以下的程序(schedule)。假設該資料庫管理系統的恢復機制(recovery mechanism)使用的是延遲更新協定(deferred update protocol)。並且假設系統在查核點時(checkpoint),會使所有正在執行的交易工作暫停,將已經完成的交易(committed transaction)的結果,強迫儲存(force write)到二線儲存器(secondary storage)。

請說明這 55 個交易在系統當機後重新恢復時,各需要對這 55 個交易作什麼處置,並說明理由。

[start-transaction, T1T_1]

[read_item, T1T_1, AA]

[start-transaction, T3T_3]

[read_item, T3T_3, CC]

[write_item, T1T_1, AA, 1010]

[start-transaction, T4T_4]

[read_item, T4T_4, DD]

[commit, T1T_1]

[write_item, T3T_3, CC, 2020]

[checkpoint]

[read_item, T3T_3, EE]

[write_item, T4T_4, DD, 3030]

[start-transaction, T2T_2]

[write_item, T3T_3, EE, 4040]

[commit, T3T_3]

[read_item, T2T_2, BB]

[start-transaction, T5T_5]

[write_item, T2T_2, BB, 5050]

[read_item, T5T_5, GG]

[commit, T2T_2]

[read_item, T4T_4, HH]

[write_item, T5T_5, GG, 6060]

← system crash

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

這一題的完整詳解

核心觀念

本題考查**延遲更新協定(deferred update protocol)**下,當機後如何依交易日誌與查核點(checkpoint)進行復原。

延遲更新會先把交易的更新記錄在日誌中,交易提交後才將更新套用到資料庫。因此:

  • 已提交的交易:需重做(REDO),確保其結果反映在資料庫中。
  • 尚未提交的交易:不需復原其更新;在延遲更新下,未提交交易的更新尚未寫入資料庫,因此不需復原(UNDO)。
  • 查核點的作用:題目指定查核點會暫停所有交易,並將已提交交易的結果強迫寫入二線儲存器。因此,查核點前已提交的交易不必再重做;查核點後已提交的交易則需重做。

解題方法

依序判斷每個交易的提交狀態,以及提交點相對於查核點的位置:

交易執行情形當機時狀態復原處置
T1T_1查核點前已提交已提交且結果已強迫寫入不需處置
T2T_2查核點後已提交已提交REDO
T3T_3查核點後已提交已提交REDO
T4T_4當機時尚未提交未提交不需處置
🔒

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

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

免費註冊

第 五 題10 分

試說明下列名詞之意涵:

(一)第二正規化(Second Normal Form)的定義。

(二)何謂 NoSQL。

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

這一題的完整詳解

核心觀念:第二正規化是關聯式資料庫的正規化規則,重點在消除非主屬性對複合候選鍵一部分的部分相依。

一個關聯模式符合第二正規化,須先符合第一正規化,且每一個非主屬性都完全相依於每一個候選鍵;換言之,非主屬性不得只相依於複合候選鍵中的一部分。主屬性是至少屬於一個候選鍵的屬性;非主屬性則是不屬於任何候選鍵的屬性。

若候選鍵只有單一屬性,便不存在對候選鍵「一部分」的相依,因此只要符合第一正規化,該關聯即符合第二正規化。

**解題方法:**先找出候選鍵,再檢查每個非主屬性的函數相依。若複合候選鍵的一部分已能決定某個非主屬性,便有部分相依,不符合第二正規化;可將資料拆成多個關聯,以消除該相依。

例如,選課資料的候選鍵為 (學號,課程編號)(學號, 課程編號),且有函數相依 學號→學生姓名學號 \to 學生姓名。學生姓名只相依於候選鍵的一部分「學號」,所以此關聯不符合第二正規化。可將學生資料拆出為「學生(學號, 學生姓名)」,選課資料則保留「選課(學號, 課程編號)」。

解題技巧:看到複合候選鍵時,特別檢查非主屬性是否只由鍵的一部分決定;單一屬性鍵則沒有部分相依問題。第二正規化處理的是部分相依,不可與第三正規化常檢查的傳遞相依混淆。

(二)NoSQL

🔒

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

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

免費註冊

其他考古題