110 中華郵政招考營運職 資料庫管理 關聯式資料庫系統技術 考古題詳解
第 第一題 題25 分
請回答下列問題:
(一)關聯式資料庫中的正規化(Normalization),用來消除遞移相依(Transitive Dependency)的是哪一種正規型式(Normal Form)?
(二)何謂預存程序(Stored Procedure)?使用預存程序有何種優點?
(三)實體關係模型(Entity-Relationship Model)是設計資料庫的重要方法,包含 1 對 1、1 對多、多對多等關係。請舉例說明何謂多對多關係。
登入後即可作答並保存紀錄。
核心觀念
本題考查三個資料庫管理基本觀念:
- 正規化各階段所消除的資料相依問題。
- 預存程序的定義與實務優點。
- 實體關係模型中的多對多關係及其資料表設計方式。
本題非選擇題,因此沒有選項需要逐一分析。
解題方法
判斷正規型式時,先辨識題目所描述的相依問題:
- 第一正規型式(1NF):消除重複群組,使每個欄位值具原子性。
- 第二正規型式(2NF):消除部分相依,主要針對複合主鍵。
- 第三正規型式(3NF):消除遞移相依。
- Boyce-Codd 正規型式(BCNF):要求每一個決定因素都是候選鍵。
因此,題目明確提到「消除遞移相依」,即可判斷答案為第三正規型式。
(一)消除遞移相依的正規型式
核心觀念
消除遞移相依(Transitive Dependency)所使用的是:
第三正規型式(Third Normal Form,3NF)。
遞移相依是指:
因此形成:
其中, 通常是主鍵,而 不是直接依賴主鍵,而是透過非鍵屬性 間接依賴主鍵。
例子
假設有下列表格:
| 學號 | 系所代碼 | 系所名稱 |
|---|---|---|
| S001 | CS | 資訊工程學系 |
其函數相依為:
因此:
「系所名稱」是透過「系所代碼」間接依賴「學號」,形成遞移相依。
正規化處理
可拆成兩個關聯:
學生表
| 學號 | 系所代碼 |
|---|---|
| S001 | CS |
系所表
| 系所代碼 | 系所名稱 |
|---|---|
| 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. 增加安全性
第 第二題 題25 分
有一關聯式資料庫包含下列資料表(table):
- 學生(學號、學生姓名、班級編號),共 50 筆資料。
- 老師(老師編號、老師姓名、班級編號),共 8 筆資料。
- 班級(班級編號、班級名稱),共 6 筆資料。
- 期末考試(學號、科目、成績),共 20 筆資料。
有底線的欄位表示為該資料表的主鍵(Primary Key),請回答下列問題:
(一)寫出 SQL 語法,查詢出每個班級的老師姓名與學生人數。
(二)寫出 SQL 語法,查詢班級名稱為「資管一甲」的期末考試「數學」科目全班平均成績。
(三)下列 SQL 語法執行後,顯示的結果為何?
SELECT COUNT(*) FROM 學生, 老師, 班級
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- 多資料表連接(
JOIN) - 主鍵與外鍵的關聯
GROUP BY分組統計- 聚合函數
COUNT、AVG - 笛卡兒積(Cartesian Product)
資料表間的主要關聯如下:
學生.班級編號 = 班級.班級編號老師.班級編號 = 班級.班級編號期末考試.學號 = 學生.學號
(一)查詢每個班級的老師姓名與學生人數
解題方法
以「班級」為主表,分別連接老師與學生:
- 班級連接老師,取得各班老師姓名。
- 班級連接學生,計算各班學生人數。
- 使用
GROUP BY依班級及老師分組。 - 使用
COUNT(DISTINCT 學生.學號)計算學生人數,避免同一班有多位老師時,學生資料被重複計算。
SELECT
班級.班級名稱,
老師.老師姓名,
COUNT(DISTINCT 學生.學號) AS 學生人數
FROM 班級
LEFT JOIN 老師
ON 班級.班級編號 = 老師.班級編號
LEFT JOIN 學生
ON 班級.班級編號 = 學生.班級編號
GROUP BY
班級.班級編號,
班級.班級名稱,
老師.老師編號,
老師.老師姓名;
說明
使用 LEFT JOIN 可保留所有班級,即使某班沒有老師或沒有學生,仍會列出該班;沒有學生時,COUNT(DISTINCT 學生.學號) 的結果為 。
若題目保證每個班級一定有老師與學生,也可使用 INNER JOIN:
SELECT
班級.班級名稱,
老師.老師姓名,
COUNT(DISTINCT 學生.學號) AS 學生人數
FROM 班級
JOIN 老師
ON 班級.班級編號 = 老師.班級編號
JOIN 學生
ON 班級.班級編號 = 學生.班級編號
GROUP BY
班級.班級編號,
班級.班級名稱,
老師.老師編號,
老師.老師姓名;
(二)查詢「資管一甲」班級數學科目的全班平均成績
解題方法
查詢路徑為:
篩選條件:
班級名稱 = '資管一甲'科目 = '數學'
最後使用 AVG 計算平均成績。
SELECT AVG(期末考試.成績) AS 數學平均成績
FROM 班級
JOIN 學生
ON 班級.班級編號 = 學生.班級編號
JOIN 期末考試
ON 學生.學號 = 期末考試.學號
WHERE 班級.班級名稱 = '資管一甲'
AND 期末考試.科目 = '數學';
說明
AVG 的計算方式為:
第 第三題 題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 的資料儲存使用率,是指:
設共有 顆相同容量硬碟,每顆容量為 :
- RAID-0:所有容量皆存放資料,無冗餘。
- RAID-1:資料完整鏡像,通常一半容量用於資料,另一半用於副本。
- RAID-5:以分散式同位元檢查碼提供容錯,需保留相當於一顆硬碟的容量。
- RAID-6:以兩組分散式同位元檢查碼提供容錯,需保留相當於兩顆硬碟的容量。
(一)資料儲存使用率
RAID-0
RAID-0 不儲存鏡像資料,也不儲存同位元檢查碼,因此:
因此,RAID-0 的使用率最高,為 。
RAID-1
RAID-1 將資料複製成兩份,資料與副本各占一半容量:
RAID-5
RAID-5 相當於使用一顆硬碟容量儲存同位元檢查碼,因此:
若以四顆硬碟為例:
RAID-6
RAID-6 相當於使用兩顆硬碟容量儲存兩組同位元檢查碼,因此:
若以四顆硬碟為例:
選項分析
本小題雖非列出式選擇題,四種架構的判斷如下:
- RAID-0:使用率 ,正確。
- RAID-1:使用率通常為 ,正確。
- RAID-5:使用率為 ,四顆硬碟時為 ,不是最高,也不屬於至多 。
- RAID-6:四顆硬碟時使用率為 ;硬碟數增加時使用率高於 ,因此「至多為 」是依四顆硬碟或 RAID-1 的一般鏡像概念判斷。
【答案】
- 資料儲存使用率最高、為 :RAID-0。
- 資料儲存使用率至多為 :RAID-1;若 RAID-6 採四顆硬碟,亦為 。
(二)RAID 1+0 的資料分佈
解題方法
RAID 1+0,又稱 RAID 10,是先做鏡像,再做條帶:
- 將四顆硬碟分成兩組鏡像組:
- Disk 1 與 Disk 2
- Disk 3 與 Disk 4
- 資料先以 RAID-0 條帶方式分散到兩組鏡像組。
- 每一個資料區塊在所屬鏡像組內複製一份。
可將資料區塊依序分配為:
- 第一個條帶:、
- 第二個條帶:、
- 第三個條帶:、
- 第四個條帶:、
第 第四題 題25 分
請回答下列問題:
(一)資料庫系統於執行交易(transaction)過程中,視情況需要會下達 COMMIT 或 ROLLBACK 指令,請問執行此兩項指令之時機與目的分別為何?
(二)設有關聯表 Project,若下達 SQL 指令句分別如下,請問兩者之執行效用有何相異處?
-
DROP TABLE Project;
-
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, … );
登入後即可作答並保存紀錄。
核心觀念
本題考查三個資料庫管理的重要觀念:
- 交易的確認與撤銷:
COMMIT、ROLLBACK。 DROP TABLE與DELETE對資料表及資料的影響。- 外來鍵的參照完整性,以及
ON DELETE CASCADE的連鎖刪除機制。
本題非法律法規題,無法條適用;以下依民國 110 年常見關聯式資料庫與 SQL 規範作答。
(一)COMMIT 與 ROLLBACK 的時機與目的
1. COMMIT
執行時機
當交易中的所有 SQL 操作均已正常完成,且結果符合業務規則與完整性限制時,執行 COMMIT。例如:
- 新增、修改或刪除資料均成功。
- 所有必要的資料檢查均已通過。
- 交易的整體結果符合預期。
- 不再需要撤銷本次交易內容。
執行目的
COMMIT 的目的,是將目前交易中尚未永久保存的資料異動正式確認,使其成為資料庫的永久狀態。
執行後通常具有下列效果:
- 確認交易中的
INSERT、UPDATE、DELETE等異動。 - 使其他交易能看到已確認的資料。
- 結束目前交易。
- 釋放交易所持有的鎖定資源。
- 通常代表交易已完成其「全部成功」的要求。
例如轉帳交易必須同時完成:
- 扣除甲帳戶金額。
- 增加乙帳戶金額。
兩個步驟均成功後,才應執行 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資料表本身。- 資料表的欄位結構。
- 欄位資料型態。
- 主鍵、外來鍵及其他限制條件。
- 通常存在的索引與相關表格定義。
刪除後仍可繼續使用:
INSERT INTO Project (...);
重新加入資料。
3. 兩者比較
| 比較項目 | DROP TABLE Project | DELETE FROM Project |
|---|---|---|
| 指令類型 | DDL | DML |
| 刪除資料列 | 是 | 是 |
| 刪除資料表結構 | 是 | 否 |
| 資料表是否仍存在 | 否 | 是 |
| 欄位、限制條件是否保留 | 否 | 是 |
| 可否直接重新插入資料 | 必須先重新建立資料表 | 可以 |
WHERE 條件 | 不適用 | 可使用;本題因無 WHERE 而刪除全部資料 |