115 一般警察特考三等 警察資訊管理人員類別 資料庫應用 考古題詳解
第 一 題25 分
闡述下列資料庫專有名詞的意涵:
(一) 分散式資料庫(5 分)
(二) ACID(Atomicity, Consistency, Isolation, Durability)(10 分)
(三) 資料倉儲(Data Warehouse)(5 分)
(四) 線上分析處理(OLAP)(5 分)
登入後即可作答並保存紀錄。
核心觀念
本題測驗資料庫系統的四組基本概念:資料如何跨節點管理、交易如何維持可靠性、分析資料如何集中整理,以及如何對資料進行多維度分析。作答時應先給出明確定義,再說明主要特性與用途。
解題方法
依名詞分別掌握「定義+關鍵特性+典型用途」:
- 分散式資料庫:說明資料分布在多個節點,但由整體資料庫系統統一管理。
- ACID:逐一解釋四項交易性質,並搭配簡短例子。
- 資料倉儲:說明其面向分析的資料集合及主要特性。
- OLAP:說明其以多維度方式分析資料,並舉常見操作。
(一)分散式資料庫(5 分)
分散式資料庫是由多個透過網路連接的資料庫節點共同組成,資料可能分散儲存在不同地點或電腦上,但整體仍由分散式資料庫管理系統協調,使使用者能以一致的方式存取資料。
常見資料分布方式包括:
- 資料分割(fragmentation):將資料表依列、欄或其他規則切分,分別存放於不同節點。
- 資料複製(replication):將同一份資料複製至多個節點,以提高可用性或讀取效率。
其設計通常追求位置透明性、資料共享、可擴充性與容錯能力;但因資料分布於多個節點,也須處理網路延遲、節點故障,以及跨節點交易的一致性問題。
(二)ACID(10 分)
ACID 是確保資料庫交易可靠執行的四項性質:
-
原子性(Atomicity) 一項交易內的操作視為不可分割的整體:全部成功,或全部失敗並回復,不留下只完成一部分的狀態。 例如轉帳時,扣款與入帳必須一併完成;若入帳失敗,扣款也須回復。
-
一致性(Consistency) 交易執行前後,資料庫都必須符合預先定義的完整性限制與業務規則。交易可以改變資料,但不能使資料違反規則。 例如帳戶餘額不得低於規定下限,或外鍵必須參照存在的資料。
-
隔離性(Isolation) 多筆交易同時執行時,彼此不應產生不當干擾;其效果應符合某種序列化執行的結果。實際隔離程度依資料庫的隔離等級而異,較低等級可能容許髒讀、不可重複讀或幻讀等現象。 例如兩筆交易同時更新同一帳戶時,資料庫須避免更新互相覆蓋而造成錯誤餘額。
-
持久性(Durability) 交易一旦成功提交,其結果即應持續保存;即使之後發生當機,系統恢復後仍能保留已提交的結果。資料庫通常透過交易日誌、檢查點及復原機制達成此性質。
第 二 題20 分
一位學生可以選修多門課程,且至少必須選修一門課程;一門課程可以被多位學生選修,但也有可能沒有學生選修。請依此敘述繪製實體關係圖(Entity-Relationship Diagram)。另外針對學生資料與課程資料,也各列出 4 個屬性並說明之。
登入後即可作答並保存紀錄。
核心觀念
本題考查實體關係圖(Entity-Relationship Diagram, ERD)中的基數(cardinality)與參與限制(participation constraint):
- 一位學生必須選修至少一門課程,因此學生端的最小參與數為 1。
- 一位學生可以選修多門課程,因此學生端的最大參與數為多。
- 一門課程可以有多位學生選修,也可能沒有學生選修,因此課程端的最小參與數為 0,最大參與數為多。
因此,「選修」關係是多對多(M:N);學生對選修關係為全參與,課程對選修關係為部分參與。
解題方法
先分辨兩種實體及其關係:
- 實體:學生、課程。
- 關係:選修。
再將敘述中的「至少一門」與「可能沒有」轉成最小基數,將「多門」與「多位」轉成最大基數:
- 學生:
- 課程:
ERD 可用最小-最大基數表示如下:
學生 (1, N) ───── 選修 ───── (0, N) 課程
這表示每位學生至少參與一次選修關係;每門課程可以完全沒有學生選修,也可以有多位學生選修。若採用烏鴉腳表示法,兩端都標示「多」,學生端以實線表示必須參與,課程端以圓圈表示可以不參與。
第 三 題20 分
在資料庫交易(transactions)中,隔離性(isolation)是指當多個交易並行執行時,一個交易不應該干擾另一個交易。如果隔離性不足,就可能會發生數種並行處理問題(isolation issues),包括 Dirty Read(髒讀)、Non-Repeatable Read(不可重複讀)、Lost Update(更新遺失)、Phantom Read(幻讀)。請闡述 Dirty Read 與 Lost Update 可能發生的情境。
登入後即可作答並保存紀錄。
核心觀念
本題考查交易隔離性不足時的兩種並行控制問題。交易(Transaction)是一組需視為整體執行的資料庫操作;隔離性要求並行交易的執行效果,應避免彼此不當干擾。
- Dirty Read(髒讀):某交易讀取了另一交易尚未提交(未
COMMIT)的資料。若寫入資料的交易之後回復(ROLLBACK),讀取者取得的就是未正式成立的資料。 - Lost Update(更新遺失):兩個交易讀取同一筆資料後,各自計算並寫回新值;後寫入的結果覆蓋先前交易的更新,使其中一筆更新未反映在資料中。
解題方法
回答情境題時,可用兩筆交易按時間先後列出操作,指出關鍵的讀寫順序,再說明錯誤結果如何產生。
一、Dirty Read 情境
假設帳戶餘額原為 1,000 元:
| 順序 | 交易 T1 | 交易 T2 |
|---|---|---|
| 1 | 將餘額改為 800 元,尚未提交 | |
| 2 | 讀取餘額,讀得 800 元 | |
| 3 | 因操作失敗而回復,餘額恢復為 1,000 元 | |
| 4 | 依據先前讀得的 800 元繼續計算或處理 |
第 四 題20 分
下列表格有 5 筆資料,其屬性 為主鍵(Primary Key)。假設有下列規則:一位學生可以修習多門課程;一門課程可以有多位學生修習;每一門課程只由一位教師授課;每一位教師只教授一門課程。請回答下列問題:(每小題 10 分,共 20 分)
| StudentID | CourseID | Instructor |
|---|---|---|
| S001 | C101 | Dr. Chen |
| S002 | C101 | Dr. Chen |
| S003 | C102 | Dr. Lin |
| S004 | C102 | Dr. Lin |
| S005 | C103 | Dr. Wang |
(一) 請說明為何此表不符合 BCNF 正規化原則?
(二) 請運用 BCNF 正規化原則,將此表格拆解成 2 個表格。
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- 函數相依(Functional Dependency, FD)
- 候選鍵與超鍵
- BCNF(Boyce-Codd Normal Form)
- 依函數相依進行關聯分解
原表格為:
題目給定主鍵為:
依題意可得到兩個函數相依:
- 每一門課程只由一位教師授課:
- 每一位教師只教授一門課程:
解題方法
BCNF 的判定原則是:
對於關係中的每一個非平凡函數相依 ,決定因素 必須是超鍵。
也就是說,若 成立,則 必須能唯一決定整筆資料。
一、判斷原表是否符合 BCNF
原表的主鍵為:
因此,單獨的 並不是超鍵,因為同一門課程可以有多位學生修習。例如:
| StudentID | CourseID | Instructor |
|---|---|---|
| S001 | C101 | Dr. Chen |
| S002 | C101 | Dr. Chen |
對應到多位學生,因此單獨的 無法唯一識別一筆資料。
但是依題意:
所以存在一個函數相依,其決定因素 不是超鍵,違反 BCNF。
同理, 也不是原表的超鍵,但依題意:
例如 Dr. Chen 只教授 C101,故此函數相依也成立;然而 單獨無法唯一識別學生修課資料,因此同樣違反 BCNF。
因此,原表不符合 BCNF,主要原因是:
與
的左側決定因素都不是原關係的超鍵。
二、依 BCNF 分解成兩個表格
將描述「課程與教師對應關係」的資料獨立拆出:
表一:CourseInstructor
第 五 題15 分
有一 Orders 資料表,內容如下:
| OrderID | CustomerName | ProductCategory | Quantity | TotalAmount |
|---|---|---|---|---|
| 1 | Alice | Laptop | 1 | 1200.00 |
| 2 | Bob | Laptop | 2 | 2400.00 |
| 3 | Cathy | Phone | 1 | 800.00 |
| 4 | David | Phone | 3 | 2400.00 |
| 5 | Eva | Tablet | 1 | 500.00 |
| 6 | Frank | Tablet | 2 | 1000.00 |
| 7 | Grace | Laptop | 1 | 1200.00 |
| 8 | Helen | Phone | 2 | 1600.00 |
| 9 | Ian | Keyboard | 5 | 500.00 |
| 10 | Jack | Keyboard | 3 | 300.00 |
下列 SQL 指令是針對上表的資料處理,請說明其功能或目的為何?執行後的結果集(result set)也請列出。
SELECT
ProductCategory,
SUM(TotalAmount) AS TotalSales
FROM Orders
GROUP BY ProductCategory
HAVING SUM(TotalAmount) > 3000;
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的彙總查詢,重點包括:
GROUP BY:依ProductCategory將資料分組。SUM(TotalAmount):計算每一類商品的銷售金額總和。AS TotalSales:將彙總結果命名為TotalSales。HAVING:對分組及彙總後的結果設定條件。WHERE與HAVING的差異:WHERE先篩選個別資料列;HAVING則是在分組及彙總後篩選群組。
解題方法
先依 ProductCategory 分組,再計算各組的 TotalAmount 總和:
- Laptop:
- Phone:
- Tablet:
- Keyboard:
接著套用條件:
只有銷售總額大於 3000 的商品類別能保留,因此 Laptop 與 Phone 會出現在結果集中。
SQL 指令功能說明
SELECT ProductCategory,
SUM(TotalAmount) AS TotalSales
FROM Orders
GROUP BY ProductCategory
HAVING SUM(TotalAmount) > 3000;
其功能是: