111 關務特考三等 資訊處理 資料庫應用 考古題詳解

111 年・關務特考・三等・資訊處理
試題代碼 資料庫應用

第 一 題30 分

某圖書館所建立的關聯式資料庫系統(Relational database system)中,定義了三個表格。其中,MEMBER 表格記錄會員基本資料,包含會員編號(Mid)、姓名(Name)和連絡電話(Telephone);BOOK 表格記錄書本基本資料,包含國際標準書號(ISBN)、書名(Title)和出版社(Publisher);BORROWER 表格記錄借閱資料,包含借書者(Mid)、書號(ISBN)和借閱日期(Date)。除了日期之外,其餘屬性皆為字串型態。

此三個表格的綱要如下,且每個表格的主鍵以底線標註:

MEMBER(Mid, Name, Telephone)

BOOK(ISBN, Title, Publisher)

BORROWER(Mid, ISBN, Date)

請利用 SQL 查詢指令,分別回答下列子題:

(一) 找出曾經借閱過「全華」出版社出版書籍的會員,列出其會員編號、姓名和聯絡電話。(10 分)

(二) 針對每個出版社,找出曾經借閱過 3 本以上(含)該出版社出版書籍的會員。每一筆輸出包含出版社和符合條件的會員編號。(10 分)

(三) 定義一個名為 TimeBookCount 的檢視表(view),輸出每個會員(以 Mid 代表)所借閱之「時報」出版社出版書籍的總數,並將檢視表的第一個屬性命名為「Mid」,第二個屬性命名為「BookCount」。(10 分)

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

這一題的完整詳解

核心觀念

本題考查關聯式資料庫(Relational Database)的標準 SQL 查詢與資料定義語言(DDL),主要涵蓋以下四項核心觀念:

  1. 多資料表結合(Table Join):利用外部鍵(Foreign Key)與主鍵(Primary Key)建立表格間的關聯(MEMBER.Mid = BORROWER.Mid 與 BORROWER.ISBN = BOOK.ISBN),以跨表檢索資料。
  2. 重複資料抑制(DISTINCT):在一對多(1:N)或多對多(M:N)的借閱關係中,同一會員可能多次借閱同一出版社之書籍,需使用 DISTINCT 避免輸出重複的會員資料。
  3. 多欄位群組化與聚集過濾(GROUP BY & HAVING):針對複合維度(出版社、會員)進行資料分組,並透過聚集函數(Aggregate Function)搭配 HAVING 子句對分組後的統計結果進行門檻過濾(≥3\ge 3)。
  4. 檢視表建立(CREATE VIEW)與屬性重新命名:定義虛擬資料表(View)以封裝特定商業邏輯,並透過 View 綱要指定或 AS 別名(Alias)精確命名輸出屬性。

解題方法與步驟

(一) 查詢借閱過「全華」出版社書籍之會員資料

  • 資料表關聯:查詢需求包含會員基本資料(MEMBER 表)與出版社名稱(BOOK 表),兩者需透過借閱紀錄(BORROWER 表)作為中介進行連接。
  • 篩選條件:出版社限定為 Publisher = '全華'。
  • 輸出控制:因一位會員可能借閱多本全華出版的書籍,直接 Join 會產生多筆重複的會員紀錄,故在 SELECT 後方加入 DISTINCT。

(二) 查詢各出版社借閱達 3 本以上(含)之會員

  • 資料表關聯:僅需統計借閱紀錄中的出版社與借書者,故只需結合 BORROWER 與 BOOK 兩張表格,不需連接 MEMBER 表。
  • 分組維度:題目要求「針對每個出版社,找出……會員」,因此分組依據為 BOOK.Publisher 與 BORROWER.Mid 的組合。
  • 聚集條件:分組後的借閱記錄筆數必須大於或等於 3,條件應置於 HAVING COUNT(*) >= 3。

(三) 建立「時報」出版社借閱總數檢視表(TimeBookCount)

  • DDL 語法:使用 CREATE VIEW ViewName (Attr1, Attr2) AS SELECT ... 語法,直接在 View 定義層明確指定輸出屬性名稱為 Mid 與 BookCount。
  • 查詢邏輯:結合 BORROWER 與 BOOK 表格,以 WHERE BK.Publisher = '時報' 鎖定目標出版社,再以 GROUP BY BR.Mid 依會員分組計算借閱數量 COUNT(*)。

【答案】

(一)

🔒

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

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

免費註冊

第 二 題20 分

假設在關聯式資料庫系統中,資料庫管理者(DBA)定義了一個 MEMBER 表格,其中包含三個字串型態的屬性:Mid、Name、Telephone,並根據 Mid 欄位定義一個名為「MyIndex」的 B+-tree 索引(Index)。

首先請說明「MyIndex」索引的樹狀結構,包含其內部節點、葉節點、結構的特性等,答案請以文字敘述或圖形呈現。其次請說明資料庫系統如何利用該索引結構,提升下列 SQL 查詢句的處理效能:

select Name from MEMBER where Mid = ‘M001’

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

這一題的完整詳解

核心觀念

本題評量關聯式資料庫中 B+ 樹索引(B+-tree Index) 的內部結構原理,以及查詢最佳化器(Query Optimizer)如何利用索引結構加速點查詢(Point Query)。主要涉及以下核心觀念:

  1. B+ 樹結構特性:B+ 樹為多路平衡搜尋樹(Multi-way Balanced Search Tree),其所有葉節點(Leaf Nodes)均在同一深度;內部節點(Internal Nodes)僅儲存鍵值(Search Key)與子節點指標,不儲存資料指標;葉節點儲存完整鍵值與對應資料列指標(Record Pointer),且相鄰葉節點間以雙向鏈結串列(Doubly Linked List)相接。
  2. 搜尋與 I/O 複雜度:全資料表掃描(Full Table Scan)之磁碟 I/O 複雜度為 O(N)O(N)(NN 為資料表所佔之資料頁數);利用 B+ 樹進行點查詢時,磁碟 I/O 複雜度降為 O(h)=O(log⁡BN)O(h) = O(\log_B N)(hh 為樹高,BB 為節點分支度/Fan-out)。
  3. 查詢執行路徑:非覆蓋索引(Non-covering Index)的點查詢流程(索引走訪 →\to 葉節點匹配 →\to 回表擷取資料列 →\to 投影指定欄位)。

解題方法

第一部分:說明「MyIndex」索引的樹狀結構

「MyIndex」是以 MEMBER 資料表的 Mid 欄位為搜尋鍵(Search Key)所建立的 B+ 樹索引,其詳細結構與特性如下:

1. 內部節點(Internal Nodes / Non-leaf Nodes)
  • 節點內容:內部節點僅儲存「搜尋鍵值(Mid)」與「指向下一層節點的指標(Child Node Pointer)」。
  • 格式定義:節點格式為 ⟨P1,K1,P2,K2,…,Km−1,Pm⟩\langle P_1, K_1, P_2, K_2, \dots, K_{m-1}, P_m \rangle。
  • KiK_i 為 Mid 鍵值,且滿足遞增排序 K1<K2<⋯<Km−1K_1 < K_2 < \dots < K_{m-1}。
  • PiP_i 為子節點指標。指標 P1P_1 所指子樹的所有鍵值均小於 K1K_1;PiP_i(1<i<m1 < i < m)所指子樹之鍵值滿足 Ki−1≤Key<KiK_{i-1} \le \text{Key} < K_i;PmP_m 所指子樹之鍵值均大於或等於 Km−1K_{m-1}。
  • 功能:扮演路徑導引(Routing)角色,不儲存實際資料列或資料位址指標(RID),使單一節點(磁碟頁)能容納最多的指標,大幅增加分支度(Fan-out)並降低樹高。
2. 葉節點(Leaf Nodes)
  • 節點內容:儲存所有實際存在的 Mid 鍵值及其對應之「資料記錄指標(Record Pointer / Row ID)」。
  • 格式定義:節點格式為 ⟨(K1,ptr1),(K2,ptr2),…,(Kn,ptrn),Pnext,Pprev⟩\langle (K_1, \text{ptr}_1), (K_2, \text{ptr}_2), \dots, (K_n, \text{ptr}_n), P_{\text{next}}, P_{\text{prev}} \rangle。
  • KiK_i 為具體的 Mid(如 'M001', 'M002')。
  • ptri\text{ptr}_i 為指向磁碟中儲存該筆完整會員資料(Mid, Name, Telephone)的實體位址指標。
  • 鏈結特性:所有的葉節點透過指標 PnextP_{\text{next}} 與 PprevP_{\text{prev}} 連接成循序雙向鏈結串列,所有鍵值在葉層由小到大連續排序。
3. 整體結構特性
  • 絕對平衡(Height-balanced):所有葉節點必定落在相同的深度(層級),任何查詢從根節點到達葉節點的搜尋路徑長度皆相等。
  • 高分支度與極低樹高:由於內部節點不存資料指標,分支度 BB 通常可達數百,因此即使資料量達到數千萬筆,樹高 hh 通常僅需 3 至 4 層。
  • 空間利用率穩定:除了根節點外,每個節點至少半滿(符合 B+ 樹節點填充率下限),能有效避免樹結構傾斜退化。
4. 樹狀結構示意圖
🔒

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

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

免費註冊

第 三 題20 分

關聯式資料庫系統在實作異動處理(Transaction Processing)時,大多希望能符合 ACID 四個特性,以確保資料庫內容的正確性。

假設一個異動欲從 P 帳戶轉 1000 元到 Q 帳戶,其中包含下列六個指令:

  1. read(P)
  2. P:=P−1000P:=P-1000
  3. write(P)
  4. read(Q)
  5. Q:=Q+1000Q:=Q+1000
  6. write(Q)

請以該異動具體說明 ACID 所代表的四個要求分別為何?若沒有達到該要求,會造成什麼不良的影響?

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

這一題的完整詳解

核心觀念 本題考查關聯式資料庫管理系統(RDBMS)異動管理(Transaction Management)的核心基石——ACID 四大特性(Atomicity, Consistency, Isolation, Durability)。異動(Transaction)是資料庫執行作業的邏輯單位,由一連串的資料庫操作(如 read 與 write)所組成。資料庫系統必須透過日誌記錄(Write-Ahead Logging, WAL)、鎖定機制(Locking)、併發控制(Concurrency Control)與復原機制(Recovery System),確保在多使用者併發存取或系統發生崩潰時,資料庫內容仍能保持正確性與完整性。


解題方法 針對題目給定由 PP 帳戶轉帳 10001000 元至 QQ 帳戶的異動 TT:

  1. read(P)
  2. P:=P−1000P := P - 1000
  3. write(P)
  4. read(Q)
  5. Q:=Q+1000Q := Q + 1000
  6. write(Q)

切入點為將 ACID 四個抽象定義分別對映至異動指令 1 至 6 的執行過程:

  • 原子性(Atomicity):從指令 1 到 6 的「全有或全無(All or Nothing)」完整性切入。
  • 一致性(Consistency):從轉帳前後「資金總額守恆(P+Q=ConstantP + Q = \text{Constant})」的業務限制切入。
  • 隔離性(Isolation):從多異動併發執行時「中間未提交狀態的不可見性」切入。
  • 持久性(Durability):從異動成功提交(Commit)後「寫入非揮發性儲存媒體」切入。

針對每一特性,均以「基本定義」、「結合本題異動之具體說明」與「未達要求之不良影響」三個層次進行精確說明。


選項分析 (註:本題為申論問答題,以下方針對題目所要求之 ACID 四個特性項目逐一進行深入剖析)

  1. 原子性(Atomicity)
  • 具體要求:異動必須是一個不可分割的最小工作單位。異動中的所有指令操作,要麼全部成功執行並寫入資料庫(Commit),要麼全部不執行並復原至初始狀態(Rollback / Abort),絕不允許停留在只完成部分操作的中間狀態。
  • 本題說明:轉帳異動包含指令 1 至 6。原子性要求指令 1 到 6 必須被視為一個整體,不可分割。
  • 未達要求的不良影響:若系統在執行完指令 3 write(P) 後(此時 PP 帳戶已扣除 10001000 元),因硬體故障、系統斷電或程式例外而中斷,且未達原子性要求(系統未進行 Rollback),則指令 4 至 6 將無法執行。這會導致 PP 帳戶已被扣款 10001000 元,但 QQ 帳戶卻未收到 10001000 元,10001000 元在系統中憑空消失,資料庫處於不完整的中間毀損狀態。
  1. 一致性(Consistency)
  • 具體要求:異動執行前後,資料庫必須從一個正確(一致)的狀態轉變為另一個正確(一致)的狀態,且必須符合系統預先定義的所有完整性限制(Integrity Constraints)與業務邏輯規則(State Preservation)。
  • 本題說明:本轉帳情境中隱含的完整性限制為「資金總額守恆律」。設轉帳前 PP 與 QQ 的金額分別為 PbeforeP_{before} 與 QbeforeQ_{before},轉帳後分別為 PafterP_{after} 與 QafterQ_{after},則必須滿足: Pafter+Qafter=Pbefore+QbeforeP_{after} + Q_{after} = P_{before} + Q_{before}
  • 未達要求的不良影響:若異動程式邏輯撰寫錯誤(例如指令 5 誤寫為 Q:=Q+500Q := Q + 500),或是原子性被破壞導致轉帳只做了一半,資料庫將違反資金總額守恆約束。轉帳後 P+QP+Q 的總和不等於轉帳前的總和,造成帳目不平,破壞資料庫的正確性與業務邏輯限制。
  1. 隔離性(Isolation)
  • 具體要求:在多個異動同時併發(Concurrent)執行的環境下,資料庫必須保證各異動之間相互隔離、不受彼此干擾。每一個異動在執行時,必須感覺不到其他異動也在同時執行;
🔒

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

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

免費註冊

第 四 題30 分

假設我們要建立書籍的資料,其中書籍的編號(No)和書名(Title)為字串型態,而作者(Authors)則為數個字串組合而成的陣列,且每本書籍的編號皆不與其他書籍相同。兩本書籍的範例資料如下:

NoTitleAuthors
1計概[趙先生, 張小姐]
2資料庫[Silbers, Korth, Sudar]

針對上述的資料特性,首先請設計出符合第一正規化(First Normal Form)的關聯式表格,每個表格標註其欄位名稱與主鍵,以及對應上表的範例資料內容。

其次,請將上述表格內容直接以一個集合(collection)內含兩個 JSON(JavaScript Object Notation)文件(document)表示,其中一本書籍對應到一個 JSON 文件。

最後,根據你的答案,詳述結構化(structured)關聯式資料和半結構化(semi-structured)JSON 資料表示法的差異性。

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

這一題的完整詳解

核心觀念

本題旨在考驗考生對**關聯式資料庫正規化(Relational Database Normalization)與文件導向資料庫(Document-oriented Database / NoSQL)**兩種不同資料模型(Data Models)的設計能力與學理比較。核心觀念包含:

  1. 第一正規化(First Normal Form, 1NF):
  • 關聯式資料模型的基本要求,定義為表格中的每一個欄位(Attribute)都必須保持「原子性」(Atomicity),即不可包含多值屬性(Multi-valued Attributes)、複合屬性(Composite Attributes)或重複群組(Repeating Groups)。
  • 當原始資料包含陣列型態的多值屬性(如本題書籍的 Authors 陣列)時,必須透過「屬性展開」或「建立獨立關聯表」將其轉換為單一原子值。
  1. 半結構化資料(Semi-structured Data)與 JSON 文件表示法:
  • JSON(JavaScript Object Notation)屬於半結構化資料格式,原生支援巢狀物件(Nested Objects)與陣列(Arrays)。
  • 無須強制破壞多值屬性的階層結構,能以更直覺且自我描述(Self-describing)的方式封裝實體與其屬性。
  1. 結構化關聯式資料與半結構化 JSON 資料之比較:
  • 比較維度涵蓋:綱要彈性(Schema Flexibility)、正規化與 Join 操作代價、資料完整性限制(Integrity Constraints)、儲存空間與擴展性(Scalability)。

解題方法

子題一:符合 1NF 的關聯式表格設計

原始資料中 Authors 為多值陣列,違反 1NF 的原子性原則。在關聯式資料庫理論中,消去多值屬性主要有兩種正規化切入點:

  • 正統雙表格設計(推薦,兼顧 1NF 與 2NF/3NF 無冗餘設計):
  1. 將書籍基本資料獨立為 Book 主表,主鍵為 NoNo。
  2. 將多值屬性 Authors 獨立為 Book_Author 子表,欄位包含 NoNo(外鍵)與 AuthorAuthor,組合主鍵為 (No,Author)(No, Author)。
  • 單一扁平化表格設計(僅達 1NF,存在資料重複冗餘):
  • 將 Authors 陣列展開,每位作者獨立占有一列。表格欄位為 (No,Title,Author)(No, Title, Author),組合主鍵為 (No,Author)(No, Author)。

註:題目要求「設計出符合第一正規化(First Normal Form)的關聯式表格」,答題時應給出標準高正規化的雙表格設計,並說明單表格扁平化之形態,以求解答完整周延。

子題二:以 JSON 集合(Collection)表示

  • 題目要求「一個集合內含兩個 JSON 文件」,集合在 JSON 規範中以陣列(Array)中括號 [...] 表示,內部包含兩個物件(Object)大括號 {...}。
  • Authors 直接映射為 JSON 的字串陣列 ["作者1", "作者2"]。

子题三:結構化與半結構化資料表示法之差異性

從綱要綁定時機、多值屬性處置、資料整合與查詢、資料完整性約束及擴展能力等五個層面進行系統性對比分析。


子題詳細解析與標準作答

一、 符合第一正規化(1NF)之關聯式表格設計

在標準資料庫設計規範下,去除多值屬性最優化的關聯式設計為雙表格架構:

1. 表格名稱:Book(書籍主表)
  • 欄位名稱與型態:No (String, 主鍵 PK)、Title (String)
  • 主鍵(Primary Key):No
  • 範例資料內容:
No (PK)Title
1計概
2資料庫
2. 表格名稱:Book_Author(書籍作者關聯表)
  • 欄位名稱與型態:No (String, 外鍵 FK 參考 Book.No)、Author (String)
  • 主鍵(Primary Key):組合主鍵 (No, Author)
  • 範例資料內容:
No (PK, FK)Author (PK)
1趙先生
1張小姐
2Silbers
2Korth
2Sudar

(補充:若採用單一扁平化表格 Book_Flat 表示,欄位為 No, Title, Author,主鍵為 (No, Author)。1 號書籍與 2 號書籍之 Title 將隨作者數量重複出現,雖符合 1NF 但未達 2NF/3NF。)


二、 JSON 文件集合(Collection)表示法

符合題意「一個 Collection 包含兩個 Document」之 JSON 格式如下:

🔒

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

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

免費註冊

其他考古題