110 中華郵政招考營運職 資料庫管理 關聯式資料庫系統技術 考古題詳解

110 年・中華郵政招考・營運職・資料庫管理
試題代碼 110年中華郵政營運職 資料庫管理(關聯式資料庫系統技術)

第 第一題 題25 分

請回答下列問題:

(一)關聯式資料庫中的正規化(Normalization),用來消除遞移相依(Transitive Dependency)的是哪一種正規型式(Normal Form)?

(二)何謂預存程序(Stored Procedure)?使用預存程序有何種優點?

(三)實體關係模型(Entity-Relationship Model)是設計資料庫的重要方法,包含 1 對 1、1 對多、多對多等關係。請舉例說明何謂多對多關係。

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

這一題的完整詳解

核心觀念

本題考查三個資料庫管理基本觀念:

  1. 正規化各階段所消除的資料相依問題。
  2. 預存程序的定義與實務優點。
  3. 實體關係模型中的多對多關係及其資料表設計方式。

本題非選擇題,因此沒有選項需要逐一分析。

解題方法

判斷正規型式時,先辨識題目所描述的相依問題:

  • 第一正規型式(1NF):消除重複群組,使每個欄位值具原子性。
  • 第二正規型式(2NF):消除部分相依,主要針對複合主鍵。
  • 第三正規型式(3NF):消除遞移相依。
  • Boyce-Codd 正規型式(BCNF):要求每一個決定因素都是候選鍵。

因此,題目明確提到「消除遞移相依」,即可判斷答案為第三正規型式。


(一)消除遞移相依的正規型式

核心觀念

消除遞移相依(Transitive Dependency)所使用的是:

第三正規型式(Third Normal Form,3NF)。

遞移相依是指:

A→B,B→CA \rightarrow B,\quad B \rightarrow C

因此形成:

A→CA \rightarrow C

其中,AA 通常是主鍵,而 CC 不是直接依賴主鍵,而是透過非鍵屬性 BB 間接依賴主鍵。

例子

假設有下列表格:

學號系所代碼系所名稱
S001CS資訊工程學系

其函數相依為:

學號→系所代碼學號 \rightarrow 系所代碼 系所代碼→系所名稱系所代碼 \rightarrow 系所名稱

因此:

學號→系所名稱學號 \rightarrow 系所名稱

「系所名稱」是透過「系所代碼」間接依賴「學號」,形成遞移相依。

正規化處理

可拆成兩個關聯:

學生表

學號系所代碼
S001CS

系所表

系所代碼系所名稱
CS資訊工程學系

如此可消除遞移相依,降低資料重複及更新異常。

解題技巧

可利用下列口訣快速判斷:

  • 1NF:欄位值不可再分。
  • 2NF:消除「部分依賴」。
  • 3NF:消除「傳遞依賴」。
  • BCNF:決定因素必須是候選鍵。

因此看到「遞移相依」,直接回答 3NF。


(二)預存程序

核心觀念

預存程序(Stored Procedure)是指:

預先以資料庫所支援的程序語言或 SQL 撰寫,並儲存在資料庫伺服器中的一組具名稱、可重複執行的 SQL 敘述與程序邏輯。

預存程序可以包含:

  • SQL 查詢與資料異動指令。
  • 變數宣告。
  • 條件判斷。
  • 迴圈。
  • 參數。
  • 例外處理。
  • 交易控制。

使用者或應用程式只需呼叫預存程序名稱,並傳入必要參數,即可由資料庫伺服器執行相關作業。

簡單示意

例如建立查詢員工資料的預存程序:

CREATE PROCEDURE GetEmployee
 @EmployeeID INT
AS
BEGIN
 SELECT *
 FROM Employee
 WHERE EmployeeID = @EmployeeID;
END;

應用程式呼叫時,只需執行:

EXEC GetEmployee @EmployeeID = 1001;

使用預存程序的優點

1. 提高程式碼重用性

常用的查詢或交易邏輯集中儲存在資料庫中,各個應用程式均可呼叫同一個預存程序,避免重複撰寫相同 SQL。

2. 降低網路傳輸量

應用程式只需傳送預存程序名稱及參數,不必每次傳送大量 SQL 敘述,可減少用戶端與資料庫伺服器間的網路傳輸。

3. 提升執行效率

預存程序通常可由資料庫管理系統進行語法解析、最佳化及執行計畫快取,重複執行時能減少部分處理成本。實際效能仍取決於資料庫系統、索引及 SQL 寫法。

4. 增加安全性

🔒

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

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

免費註冊

第 第二題 題25 分

有一關聯式資料庫包含下列資料表(table):

  • 學生(學號、學生姓名、班級編號),共 50 筆資料。
  • 老師(老師編號、老師姓名、班級編號),共 8 筆資料。
  • 班級(班級編號、班級名稱),共 6 筆資料。
  • 期末考試(學號、科目、成績),共 20 筆資料。

有底線的欄位表示為該資料表的主鍵(Primary Key),請回答下列問題:

(一)寫出 SQL 語法,查詢出每個班級的老師姓名與學生人數。

(二)寫出 SQL 語法,查詢班級名稱為「資管一甲」的期末考試「數學」科目全班平均成績。

(三)下列 SQL 語法執行後,顯示的結果為何?

SELECT COUNT(*) FROM 學生, 老師, 班級

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

這一題的完整詳解

核心觀念

本題考查:

  • 多資料表連接(JOIN)
  • 主鍵與外鍵的關聯
  • GROUP BY 分組統計
  • 聚合函數 COUNT、AVG
  • 笛卡兒積(Cartesian Product)

資料表間的主要關聯如下:

  • 學生.班級編號 = 班級.班級編號
  • 老師.班級編號 = 班級.班級編號
  • 期末考試.學號 = 學生.學號

(一)查詢每個班級的老師姓名與學生人數

解題方法

以「班級」為主表,分別連接老師與學生:

  1. 班級連接老師,取得各班老師姓名。
  2. 班級連接學生,計算各班學生人數。
  3. 使用 GROUP BY 依班級及老師分組。
  4. 使用 COUNT(DISTINCT 學生.學號) 計算學生人數,避免同一班有多位老師時,學生資料被重複計算。
SELECT
 班級.班級名稱,
 老師.老師姓名,
 COUNT(DISTINCT 學生.學號) AS 學生人數
FROM 班級
LEFT JOIN 老師
 ON 班級.班級編號 = 老師.班級編號
LEFT JOIN 學生
 ON 班級.班級編號 = 學生.班級編號
GROUP BY
 班級.班級編號,
 班級.班級名稱,
 老師.老師編號,
 老師.老師姓名;

說明

使用 LEFT JOIN 可保留所有班級,即使某班沒有老師或沒有學生,仍會列出該班;沒有學生時,COUNT(DISTINCT 學生.學號) 的結果為 00。

若題目保證每個班級一定有老師與學生,也可使用 INNER JOIN:

SELECT
 班級.班級名稱,
 老師.老師姓名,
 COUNT(DISTINCT 學生.學號) AS 學生人數
FROM 班級
JOIN 老師
 ON 班級.班級編號 = 老師.班級編號
JOIN 學生
 ON 班級.班級編號 = 學生.班級編號
GROUP BY
 班級.班級編號,
 班級.班級名稱,
 老師.老師編號,
 老師.老師姓名;

(二)查詢「資管一甲」班級數學科目的全班平均成績

解題方法

查詢路徑為:

班級→學生→期末考試班級 \rightarrow 學生 \rightarrow 期末考試

篩選條件:

  • 班級名稱 = '資管一甲'
  • 科目 = '數學'

最後使用 AVG 計算平均成績。

SELECT AVG(期末考試.成績) AS 數學平均成績
FROM 班級
JOIN 學生
 ON 班級.班級編號 = 學生.班級編號
JOIN 期末考試
 ON 學生.學號 = 期末考試.學號
WHERE 班級.班級名稱 = '資管一甲'
 AND 期末考試.科目 = '數學';

說明

AVG 的計算方式為:

🔒

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

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

免費註冊

第 第三題 題25 分

請回答下列問題:

(一)資料庫系統需儲存巨量的資料錄,常使用「獨立磁碟機冗餘陣列」(RAID,Redundant Arrays of Independent Disks),藉以提高資料的容錯性與存取效能。若於相同等級容量的硬碟顆數下,請問於 RAID-6、RAID-5、RAID-1、RAID-0 等四種架構中,何者的資料儲存「使用率」最高為 100%?何者的資料儲存「使用率」至多為 50%?

(二)RAID-0 為條帶式(Striped)結構、RAID-1 為鏡像式(Mirrored)結構;若將資料區塊劃分為 A1、A2、A3、A4、A5、A6、A7、A8 等,請問採用 RAID 1+0 作資料儲存時,於四顆同等級容量硬碟(Disk 1~Disk 4)下,請圖示 A1~A8 資料區塊作儲存之分佈狀態。

(三)若 RAID-6、RAID-5 皆採用四顆相同等級容量硬碟,請問兩者可允許「容錯的」硬碟顆數分別為何?

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

這一題的完整詳解

核心觀念

RAID 的資料儲存使用率,是指:

儲存使用率=可供使用的資料容量所有硬碟總容量\text{儲存使用率} = \frac{\text{可供使用的資料容量}}{\text{所有硬碟總容量}}

設共有 NN 顆相同容量硬碟,每顆容量為 CC:

  • RAID-0:所有容量皆存放資料,無冗餘。
  • RAID-1:資料完整鏡像,通常一半容量用於資料,另一半用於副本。
  • RAID-5:以分散式同位元檢查碼提供容錯,需保留相當於一顆硬碟的容量。
  • RAID-6:以兩組分散式同位元檢查碼提供容錯,需保留相當於兩顆硬碟的容量。

(一)資料儲存使用率

RAID-0

RAID-0 不儲存鏡像資料,也不儲存同位元檢查碼,因此:

使用率=NCNC=100%\text{使用率} = \frac{NC}{NC} = 100\%

因此,RAID-0 的使用率最高,為 100%100\%。

RAID-1

RAID-1 將資料複製成兩份,資料與副本各占一半容量:

使用率=NC/2NC=50%\text{使用率} = \frac{NC/2}{NC} = 50\%

RAID-5

RAID-5 相當於使用一顆硬碟容量儲存同位元檢查碼,因此:

使用率=(N−1)CNC=N−1N\text{使用率} = \frac{(N-1)C}{NC} = \frac{N-1}{N}

若以四顆硬碟為例:

4−14=34=75%\frac{4-1}{4} = \frac{3}{4} = 75\%

RAID-6

RAID-6 相當於使用兩顆硬碟容量儲存兩組同位元檢查碼,因此:

使用率=(N−2)CNC=N−2N\text{使用率} = \frac{(N-2)C}{NC} = \frac{N-2}{N}

若以四顆硬碟為例:

4−24=24=50%\frac{4-2}{4} = \frac{2}{4} = 50\%

選項分析

本小題雖非列出式選擇題,四種架構的判斷如下:

  • RAID-0:使用率 100%100\%,正確。
  • RAID-1:使用率通常為 50%50\%,正確。
  • RAID-5:使用率為 N−1N\frac{N-1}{N},四顆硬碟時為 75%75\%,不是最高,也不屬於至多 50%50\%。
  • RAID-6:四顆硬碟時使用率為 50%50\%;硬碟數增加時使用率高於 50%50\%,因此「至多為 50%50\%」是依四顆硬碟或 RAID-1 的一般鏡像概念判斷。

【答案】

  • 資料儲存使用率最高、為 100%100\%:RAID-0。
  • 資料儲存使用率至多為 50%50\%:RAID-1;若 RAID-6 採四顆硬碟,亦為 50%50\%。

(二)RAID 1+0 的資料分佈

解題方法

RAID 1+0,又稱 RAID 10,是先做鏡像,再做條帶:

  1. 將四顆硬碟分成兩組鏡像組:
  • Disk 1 與 Disk 2
  • Disk 3 與 Disk 4
  1. 資料先以 RAID-0 條帶方式分散到兩組鏡像組。
  2. 每一個資料區塊在所屬鏡像組內複製一份。

可將資料區塊依序分配為:

  • 第一個條帶:A1A1、A2A2
  • 第二個條帶:A3A3、A4A4
  • 第三個條帶:A5A5、A6A6
  • 第四個條帶:A7A7、A8A8
🔒

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

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

免費註冊

第 第四題 題25 分

請回答下列問題:

(一)資料庫系統於執行交易(transaction)過程中,視情況需要會下達 COMMIT 或 ROLLBACK 指令,請問執行此兩項指令之時機與目的分別為何?

(二)設有關聯表 Project,若下達 SQL 指令句分別如下,請問兩者之執行效用有何相異處?

  1. DROP TABLE Project;

  2. DELETE FROM Project;

(三)設關聯表 Project 外來鍵為 MAG_id,其參照至關聯表 Manager 主鍵 MAG_id,請問下列 SQL 語句中「ON DELETE CASCADE」之宣告作用為何?其目的又為何?

CREATE TABLE Project ( … FOREIGN KEY (MAG_id) REFERENCES Manager ON DELETE CASCADE, … );

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

這一題的完整詳解

核心觀念

本題考查三個資料庫管理的重要觀念:

  1. 交易的確認與撤銷:COMMIT、ROLLBACK。
  2. DROP TABLE 與 DELETE 對資料表及資料的影響。
  3. 外來鍵的參照完整性,以及 ON DELETE CASCADE 的連鎖刪除機制。

本題非法律法規題,無法條適用;以下依民國 110 年常見關聯式資料庫與 SQL 規範作答。


(一)COMMIT 與 ROLLBACK 的時機與目的

1. COMMIT

執行時機

當交易中的所有 SQL 操作均已正常完成,且結果符合業務規則與完整性限制時,執行 COMMIT。例如:

  • 新增、修改或刪除資料均成功。
  • 所有必要的資料檢查均已通過。
  • 交易的整體結果符合預期。
  • 不再需要撤銷本次交易內容。

執行目的

COMMIT 的目的,是將目前交易中尚未永久保存的資料異動正式確認,使其成為資料庫的永久狀態。

執行後通常具有下列效果:

  • 確認交易中的 INSERT、UPDATE、DELETE 等異動。
  • 使其他交易能看到已確認的資料。
  • 結束目前交易。
  • 釋放交易所持有的鎖定資源。
  • 通常代表交易已完成其「全部成功」的要求。

例如轉帳交易必須同時完成:

  1. 扣除甲帳戶金額。
  2. 增加乙帳戶金額。

兩個步驟均成功後,才應執行 COMMIT,確保轉帳結果完整保存。


2. ROLLBACK

執行時機

當交易執行過程發生錯誤,或交易結果不符合要求時,執行 ROLLBACK。常見情況包括:

  • SQL 執行失敗。
  • 違反主鍵、外來鍵或其他完整性限制。
  • 交易中途發生系統錯誤。
  • 使用者取消交易。
  • 交易條件未全部滿足。
  • 交易無法完成所有必要操作。

執行目的

ROLLBACK 的目的,是撤銷尚未提交的交易異動,使資料庫回復到交易開始前的狀態;若指定儲存點,也可回復至指定的 SAVEPOINT。

執行後通常具有下列效果:

  • 撤銷尚未 COMMIT 的新增、修改及刪除。
  • 維持資料庫的一致性。
  • 結束目前交易,並釋放相關鎖定。
  • 避免交易只完成一部分而造成錯誤結果。

以前述轉帳為例,若扣款成功但入帳失敗,便不可只保留扣款結果,應執行 ROLLBACK,將扣款一併撤銷。

解題技巧

可用「全成全敗」判斷:

  • 全部操作成功且結果正確:COMMIT。
  • 任一重要操作失敗或結果不正確:ROLLBACK。

這正是交易的原子性(Atomicity)精神:交易內的操作視為一個整體,必須全部成功,否則全部撤銷。


(二)DROP TABLE Project 與 DELETE FROM Project 的差異

1. DROP TABLE Project;

功能

DROP TABLE 是資料定義語言(DDL)指令,用來刪除整個 Project 資料表物件。

其影響包括:

  • 刪除 Project 資料表本身。
  • 刪除表中的所有資料列。
  • 移除資料表的結構定義。
  • 通常一併移除該表的索引、限制條件及相關表格定義。
  • 執行後不能再以原本的 Project 資料表名稱進行查詢或新增資料。

概念上相當於將整個資料表物件移除,而不只是清空資料。


2. DELETE FROM Project;

功能

DELETE 是資料操縱語言(DML)指令,用來刪除資料表中的資料列。

由於語句沒有 WHERE 條件,因此會刪除 Project 中的全部資料列:

刪除結果:Project 的所有資料列\text{刪除結果:Project 的所有資料列}

但下列內容仍會保留:

  • Project 資料表本身。
  • 資料表的欄位結構。
  • 欄位資料型態。
  • 主鍵、外來鍵及其他限制條件。
  • 通常存在的索引與相關表格定義。

刪除後仍可繼續使用:

INSERT INTO Project (...);

重新加入資料。


3. 兩者比較

比較項目DROP TABLE ProjectDELETE FROM Project
指令類型DDLDML
刪除資料列是是
刪除資料表結構是否
資料表是否仍存在否是
欄位、限制條件是否保留否是
可否直接重新插入資料必須先重新建立資料表可以
WHERE 條件不適用可使用;本題因無 WHERE 而刪除全部資料
🔒

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

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

免費註冊

其他考古題

110 年資料庫管理的其他科目