114 關務特考三等 資訊處理(選試英文)科別 資料庫應用 考古題詳解
第 一 題30 分
假設某個銀行需要管理顧客借款的資料,而定義了三個表格。其中:
- CUSTOMER 表格記錄顧客基本資料,包含身分證字號(ID)、姓名(Name)、地址(Address)和連絡電話(Telephone)。
- LOAN 表格記錄每筆借款的基本資料,包含借款編號(LoanNO)、借款金額(Amount)和辦理借款的銀行分行名稱(Branch)。
- BORROWER 表格則記錄借貸關係,包含借款顧客(ID)、借款編號(LoanNO)和借貸成立日期(Date)。
所有屬性除了「借款金額」為數字型態之外,其餘皆為字串型態。此三個表格的綱要簡列如下,且每個表格的主鍵以底線標註:
CUSTOMER(ID, Name, Address, Telephone)
LOAN(LoanNO, Amount, Branch)
BORROWER(ID, LoanNO, Date)
請利用 SQL 查詢指令,分別回答下列問題:(每小題 10 分,共 30 分)
(一) 找出那些顧客曾經在此銀行的「忠孝東路」分行辦理借款,列出其顧客身分證字號、借款編號和借款金額。
(二) 找出每家分行的最大借款金額。
(三) 找出住在臺北市且借款超過 3 次以上的顧客身分證字號。
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯式資料庫的 JOIN、分組聚合與分組後篩選:
- CUSTOMER 以
ID識別顧客;LOAN 以LoanNO識別借款;BORROWER 以(ID, LoanNO)識別顧客與借款的借貸關係。 - 顧客與借款是多對多關係,須透過 BORROWER 連接 CUSTOMER 與 LOAN。
WHERE篩選明細資料;GROUP BY將資料分組;MAX計算組內最大值;HAVING篩選分組後的結果。
解題方法
(一)曾在「忠孝東路」分行辦理借款
從 BORROWER 取得借款關係,再以 LoanNO 連接 LOAN;篩選分行名稱後,輸出顧客身分證字號、借款編號及金額。
SELECT B.ID, B.LoanNO, L.Amount
FROM BORROWER AS B
JOIN LOAN AS L
ON B.LoanNO = L.LoanNO
WHERE L.Branch = '忠孝東路';
題目未要求顧客姓名或其他基本資料,因此不必連接 CUSTOMER。每筆符合條件的借貸關係會列出一列;若同一筆借款由多位顧客共同借貸,則各顧客各列一筆。
(二)找出每家分行的最大借款金額
依分行名稱分組,再對各組的 Amount 使用 MAX。
SELECT Branch, MAX(Amount) AS MaxAmount
FROM LOAN
GROUP BY Branch;
GROUP BY Branch 會將同一分行的借款歸為一組;MAX(Amount) 則取該組中的最大金額。若不同借款編號的金額相同,最大值仍只顯示該金額。
(三)住在臺北市且借款超過 3 次的顧客身分證字號
第 二 題20 分
假設在關聯式資料庫系統中,資料庫管理者(DBA)定義了一個 MEMBER 表格,並以三個字串型態的屬性記錄會員的基本資料,包含:編號(ID)、姓名(Name)、電話號碼(Telephone)。
經統計分析發現,此系統的使用者經常利用會員姓名查詢其電話號碼,如下列的範例 SQL 查詢句所示:
select Telephone from MEMBER where Name = ‘Wu’;
請問此資料庫管理者應該替那個或那些屬性建立索引(Index),以提升資料庫系統的查詢處理效率?進一步以範例資料畫出此索引的樹狀結構,並詳加說明此結構具有何種特性,可協助達到提升效率的目的。
登入後即可作答並保存紀錄。
核心觀念
本題考查索引的設計與 B+ 樹索引。查詢條件是 Name = 'Wu',因此應在 Name 屬性建立索引,讓資料庫能依姓名快速找到符合的會員,再取得其電話號碼。
因為查詢只輸出 Telephone,而索引鍵只有 Name 時,找到姓名後通常還要依索引中的資料列指標回到 MEMBER 表格,讀取電話號碼。若採用涵蓋索引,也可將 Telephone 一併納入索引,但本題的基本答案是對 Name 建立索引。
解題方法
先看 WHERE 子句中的搜尋條件,再據此選擇索引屬性:
select Telephone
from MEMBER
where Name = 'Wu';
資料庫需要尋找 Name 等於 'Wu' 的資料,因此在 Name 上建立索引最直接。ID 和 Telephone 都沒有出現在搜尋條件中;單獨替它們建立索引,無法直接加速依姓名篩選的查詢。
以下以 Name 為索引鍵,並以索引項目中的資料列指標表示對應的會員資料。假設資料按姓名排序,範例資料為:
| Name | Telephone |
|---|---|
| Chen | 02-1111 |
| Lin | 02-2222 |
| Wang | 02-3333 |
| Wu | 02-4444 |
| Wu | 02-5555 |
| Yang | 02-6666 |
示意 B+ 樹如下(為便於說明,假設每個葉節點最多容納 3 個索引項目):
第 三 題30 分
假設一家零售商希望對顧客的購買行為進行資料分析,而考慮是否在現有的交易處理系統(Transaction Processing System)之外,另外再建立一個資料倉儲(Data Warehouse)。
請根據不同面向說明此兩種系統的差別,包含:
- 資料來源多寡或資料時間特性。
- 綱要(Schema)的設計理念,例如是強調正規化還是處理效率。
- 較常使用的 SQL 指令,例如新增、刪除、修改、查詢等。
並根據上述比較的結果,建議此廠商分開建立成兩個系統或整合成一個系統。
登入後即可作答並保存紀錄。
核心觀念
本題在比較**交易處理系統(Transaction Processing System,TPS)與資料倉儲(Data Warehouse,DW)**的設計目的與資料特性。TPS 支援日常營運交易;資料倉儲整合歷史資料,供分析、報表及決策使用。兩者的工作負載不同,因此在資料來源、時間特性、綱要設計及 SQL 操作上也不同。
解題方法
依題目指定的三個面向逐一比較,再由系統用途推導建置建議。零售商若要同時處理即時交易與跨期間的購買行為分析,應讓交易處理和分析工作各自使用適合的系統。
| 比較面向 | 交易處理系統(TPS) | 資料倉儲(DW) |
|---|---|---|
| 資料來源與時間特性 | 通常以單一企業或應用系統的營運資料為主,資料反映目前狀態,重視最新、即時的交易內容。例如結帳、付款、庫存異動。 | 整合多個資料來源,例如銷售、會員、商品、門市及網路商店資料;保存長時間的歷史資料,支援依期間或維度進行分析。 |
| 綱要設計理念 | 以交易正確性、一致性及降低更新異常為重點,常使用正規化設計,避免重複儲存資料。 | 以查詢與彙總效率為重點,常採維度模型,例如星狀綱要或雪花綱要;事實資料記錄交易或彙總數值,維度資料描述時間、商品、顧客、地區等分析角度。可能適度冗餘,以減少查詢時的連接成本。 |
第 四 題20 分
JSON(JavaScript Object Notation)格式經常被用來表示半結構化資料(Semi-Structured Data)。
假設我們要建立多筆顧客的資料,其中顧客編號(No)和姓名(Name)為字串型態,而子女(Children)則為數個字串組合而成的陣列。兩個顧客的範例資料如下:
| No | Name | Children |
|---|---|---|
| 1 | 張三 | John, Mary |
| 2 | 李四 | John, Tom, Sandy |
請將上述內容以一個集合(collection)內含兩個 JSON 文件(document)表示,並讓一個顧客對應到一個 JSON 文件。
登入後即可作答並保存紀錄。
核心觀念
本題考查 JSON 的基本結構,以及如何用陣列表示一對多資料。
- **JSON 文件(document)**以物件表示,物件由一組組「鍵(key):值(value)」構成。
- **集合(collection)**可視為多筆文件的集合;本題有兩位顧客,因此集合內應有兩個顧客文件。
- 顧客編號
No、姓名Name是字串;子女Children是由多個字串組成的陣列。
解題方法
每位顧客各建立一個 JSON 物件,並將共同欄位 No、Name、Children 放入其中。Children 的值使用方括號 [] 表示陣列,各子女姓名以字串形式列出。
依題目資料,集合可表示如下: