113 調查局特考三等 資訊科學組 資料庫應用 考古題詳解
第 一 題25 分
SQL 資料庫和 NoSQL 資料庫做比較,就資料模型的靈活性、資料庫的可擴展性、資料庫的可用性、資料的一致性和完整性、查詢效率、維護性等六方面,敘述優缺點並申論之。
登入後即可作答並保存紀錄。
核心觀念
本題比較關聯式 SQL 資料庫與 NoSQL 資料庫,重點不在判定哪一類「全面較好」,而是依資料結構、交易需求、規模與維運條件,選擇合適的資料管理方式。
SQL 資料庫通常以表格、欄位、資料列及關聯表示資料,並以結構描述(schema)規定資料型別與限制。NoSQL 是多種非關聯式資料庫的統稱,常見模型包括鍵值、文件、寬欄與圖形資料庫;其資料模型與一致性保證依產品和設定而異,不能一概而論。
解題方法
依題目指定的六個面向逐項比較。作答時先交代兩類資料庫的典型特性,再說明各特性帶來的優勢、代價及適用情境;尤其要避免將「SQL 等同於只能垂直擴充」或「NoSQL 等同於沒有一致性」等概括說法當成絕對規則。
六方面比較與申論
一、資料模型的靈活性
- **SQL 優點:**資料表與欄位結構明確,可透過主鍵、外鍵及資料型別描述資料關係與限制。結構固定時,資料格式一致、容易維持規範。
- **SQL 缺點:**新增欄位或變更資料結構,通常需調整 schema 與相關應用程式;若資料型態多變、欄位經常增減,變更成本較高。
- **NoSQL 優點:**文件型或鍵值型資料庫常可依紀錄保存不同欄位,適合資料結構快速演變,或不同來源資料格式不一致的情況。
- **NoSQL 缺點:**結構限制較少,資料格式與欄位規範可能由應用程式承擔;若缺乏驗證機制,容易出現欄位不一致或資料品質下降。
- **申論:**靈活不代表不需要資料設計。資料關係複雜、格式穩定時,SQL 的明確結構有助管理;格式多樣且變動頻繁時,NoSQL 通常較有彈性。
二、資料庫的可擴展性
- **SQL 優點:**成熟的 SQL 系統可採索引、讀取副本、分區及分片等方式擴充;垂直擴充也常見,適合交易關係複雜且須維持一致性的系統。
- **SQL 缺點:**跨節點分片與資料重分布可能增加設計與維運複雜度,分散式交易也可能帶來額外成本。
- **NoSQL 優點:**許多 NoSQL 系統以分散式架構為設計目標,可透過增加節點進行水平擴充,適合資料量或流量快速成長的服務。
- **NoSQL 缺點:**水平擴充不會自動解決資料分布、熱點、跨分片查詢與一致性等問題,仍須依工作負載設計。
- **申論:**可擴展性取決於資料庫產品、部署架構與查詢型態。比較時應說明水平與垂直擴充的取捨,不宜直接斷言 SQL 無法水平擴充。
三、資料庫的可用性
- **SQL 優點:**可透過複寫、備援、故障移轉及叢集等方式提高服務可用性,適用於停機成本高的系統。
- **SQL 缺點:**高可用架構需要設定與監控;若要求分散式環境下同時維持強一致性,故障時的處理可能影響可用性或回應時間。
- **NoSQL 優點:**許多分散式 NoSQL 系統以多節點與資料複寫支援容錯;部分系統可在節點故障時仍提供服務。
- **NoSQL 缺點:**複寫延遲、網路分割或節點故障時,不同副本可能暫時呈現不同資料;高可用不等於資料必然即時一致。
- **申論:**可用性要連同故障時的資料一致性、復原時間與復原點需求一起評估。不能只以「有複寫」推論系統一定符合所有可用性需求。
四、資料的一致性和完整性
第 二 題25 分
有一長照機構收容有需要被照顧的長者多名,每一名被照顧的長者在機構內皆需登記身分證字號、姓名、性別和生日,且須登記與其他長者的關係(如夫妻、兄弟、姊妹等)。
同時,還需有至少一名緊急聯絡人。緊急聯絡人在機構內需留有身分證字號、姓名和電話等資料,不同長者可以有相同之緊急聯絡人。
機構擁有許多房間,分為 2 床型房和 4 床型房。2 床型房有 A 床和 B 床;4 床型房有 A 床、B 床、C 床和 D 床。每一房間皆有房號,每一名被照顧的長者會被分配到一張床。
分配原則如下:
- 2 床型房可以分配給夫妻或同性別的長者。
- 4 床型房僅可以分配給同性別的長者。
長照機構聘請多名照護員。照護員需記載員工編號、員工身分證字號、姓名、性別、住址、E-mail 和電話,其中員工編號和員工身分證字號是唯一的,電話則可以有多支。
每一照護員皆須照顧長者,以房間為照顧單位:
- 每一男性照護員照顧一間 4 床型房男性長者的房間,或兩間 2 床型房男性長者的房間。
- 每一女性照護員照顧一間 4 床型房女性長者的房間,或兩間 2 床型房非男性長者的房間。
機構還有一項服務,即被照顧的長者需要看醫生時,機構會為其預約。因此,機構記錄有每一位長者的最近看診日期、下次預約日期及看診醫生。
看診醫生紀錄有醫院名稱、醫生編號、醫生姓名和科別,醫院名稱和醫生編號合起來是唯一的。
根據以上敘述,分析資料需求,畫出實體關係圖(ER-diagram)。圖中必須標明實體型態(Entity Type)、弱實體型態(Weak Entity Type)、關係型態(Relationship Type)、識別關係型態(Identifying Relationship Type)、屬性(Attribute)等,亦需呈現基數比(Cardinality ratio)和參與度(Participation Constraint)兩種結構上的限制。若有需要,可自行假設需求,但必須寫清楚。
登入後即可作答並保存紀錄。
核心觀念
本題考查概念式資料庫設計,重點是辨認實體、屬性、主鍵、弱實體、關係,以及以基數比和參與度表示業務限制。題目不是選擇題,故無選項分析。
繪圖時可採 Chen ER 表示法:實體用矩形、弱實體用雙矩形、關係用菱形、識別關係用雙菱形;主鍵加底線,弱實體的部分鍵用虛線底線。基數比可標 、 或 ;完全參與以雙線表示,部分參與以單線表示。
解題方法與合理假設
先將題幹名詞分成「有自身資料、可獨立辨識的對象」與「描述對象間的連結」,再依唯一性判定主鍵。床位以「房間+床位代號」辨識,因此建模為弱實體;員工電話可多支,建模為多值屬性。房間入住與照護安排的性別及房型限制,屬於額外語意限制,不能只靠一般基數比完整表達。
為使圖示具體,採以下假設:
- 每名長者在本題所述期間只分配一張床;每張床最多分配一名長者。
- 每名長者至少有一位緊急聯絡人;同一聯絡人可聯絡多名長者。
- 每名長者有一筆最近看診日期、下次預約日期及看診醫生資料;尚未預約時,下次預約日期可為空。
- 長者關係以兩名長者間的關係表示,關係種類由「夫妻、兄弟、姊妹等」記載,視為對稱關係。
- 每間房都配置一名照護員;照護員依題述規則照顧一間四床房或兩間二床房。
實體、屬性與鍵
可在答案紙上先畫出下列實體及屬性:
- 長者(強實體):身分證字號(主鍵)、姓名、性別、生日。
- 緊急聯絡人(強實體):身分證字號(主鍵)、姓名、電話。
- 房間(強實體):房號(主鍵)、房型(2 床型/4 床型)。
- 床位(弱實體):床位代號(部分鍵;A、B、C、D)。其完整識別鍵為「房號+床位代號」。
- 照護員(強實體):員工編號、員工身分證字號、姓名、性別、住址、E-mail、電話(多值屬性)。員工編號與員工身分證字號皆唯一,兩者均可作候選鍵;圖中選員工編號為主鍵,並將身分證字號標為唯一鍵。
- 醫生(依醫院識別的實體):醫院名稱、醫生編號、醫生姓名、科別。主鍵是醫院名稱+醫生編號,兩者合組底線。
床位必須隸屬某一房間,不能脫離房間單獨辨識,因此是弱實體;「房間—設有—床位」為識別關係型態。每間房有 2 個或 4 個床位,床位只屬於一間房。
關係型態、基數比與參與度
| 關係型態 | 基數比 | 參與度及題意 |
|---|---|---|
| 長者—具有—緊急聯絡人 | 長者完全參與,至少一位聯絡人;聯絡人端部分參與,題目未要求每位聯絡人必須聯絡長者。 | |
| 長者—與另一長者有關係—長者 | 遞迴 | 一名長者可與多名長者有關係;關係屬性為「關係種類」。兩端各標示長者角色,例如「當事長者」與「關係對象」。 |
第 三 題30 分
假設一個交易(transaction)有五種基本運算:
- :交易 開始。
- :將硬碟資料項 讀到主記憶體變數 。
- :將主記憶體變數 寫到硬碟資料項 。
- :交易 提交,表示 成功結束。
- :交易 被駁回。
假設資料庫紀錄檔(database log)中用五種方式記錄交易的運算:
- :交易 開始。
- :交易 讀取資料項 。
- :交易 更新資料項 。
- :交易 提交。
- :交易 被駁回。
在 WAL(Write-Ahead Logging)機制下,考慮交易 、、 和 四個交易及以下的排程。
【排程表】 (此題原卷文字擷取不全,請參考原卷。)
假設資料項之初始值為 、 和 ,且記憶體夠大,作業系統不主動將記憶體緩衝區的資料或 LOG 紀錄寫回硬碟,回答以下問題。
每小題 10 分,共 30 分。
(1)執行時間序 8 之後(時間序 9 之前),記憶體和硬碟中資料項和紀錄檔的內容各為何?
(2)執行時間序 16 之後(時間序 17 之前),記憶體和硬碟中資料項和紀錄檔的內容各為何?
(3)發生系統當機,系統復原後硬碟中資料項 、 和 的值為何?
登入後即可作答並保存紀錄。
核心觀念
本題考查 WAL(Write-Ahead Logging)與交易復原:
- 寫入資料前,對應的 LOG 必須先寫入硬碟。
- 交易提交時,至少須將該交易的 LOG 強制寫入硬碟;髒資料頁不必立即寫回硬碟。
- Checkpoint 會將目前的 LOG 與記憶體中的資料緩衝區寫回硬碟。
- 系統復原時:
- 已提交交易的結果予以保留。
- 未完成交易的更新予以撤銷。
- 已 rollback 的交易不保留其更新。
採用標準 LOG 順序,且將交易提交視為強制寫入目前尚未落盤的 LOG。
解題方法
依排程逐步計算資料值:
- 初始值:
- :讀取 ,計算 ,寫回
- :讀取 ,計算 ,寫回
- :讀取 ,計算 ,寫回
- :讀取 ,之後讀取 ,計算 ,寫回 ,但尚未提交
(1)時間序 8 之後、時間序 9 之前
記憶體中的資料
時間序 8 已執行:
T0: begin
T0: read(Y,a) → a=425
T0: a=a×10 → a=4250
T0: write(a,Y) → Y=4250
T0: commit
因此記憶體資料為:
| 資料項 | 記憶體值 |
|---|---|
| 100 | |
| 4250 | |
| 800 |
其中 尚未寫回硬碟。
硬碟中的資料
作業系統尚未主動寫回資料緩衝區,因此硬碟仍為初始值:
| 資料項 | 硬碟值 |
|---|---|
| 100 | |
| 425 | |
| 800 |
記憶體中的 LOG
截至時間序 8 的 LOG 為:
[start,T0]
[read,T0,Y]
[start,T2]
[read,T2,X]
[start,T1]
[write,T0,Y,425,4250]
[commit,T0]
硬碟中的 LOG
因為 執行 commit,LOG 被強制寫入硬碟,因此硬碟中的 LOG 亦為:
[start,T0]
[read,T0,Y]
[start,T2]
[read,T2,X]
[start,T1]
[write,T0,Y,425,4250]
[commit,T0]
(2)時間序 16 之後、時間序 17 之前
時間序 9 至 15 執行結果如下:
T1: read(Y,c) → c=4250
T1: c=c+30 → c=4280
T2: b=b+100 → b=200
T2: write(b,X) → X=200
T3: begin
T1: write(c,Y) → Y=4280
T3: read(Z,d) → d=800
第 四 題20 分
全國高中籃球聯賽記錄球員資料的關聯綱目(Schema)為:
球隊編號、球隊名稱、學校名稱、比賽場次、球員編號、球員姓名、位置、球員學號、年級、得分數、犯規數。
例如:
('T105', '火球隊', '冠軍高中', 5, 23, '王小明', '得分後衛', 'B2123456', 2, 28, 3)
其功能相依(Functional Dependency,簡稱 FD)集合 如下:
(1)求 的最小集合(minimal set)。
(2)關聯鍵(Relational Key)或候選鍵(Candidate Key)為何?
(3)分解成滿足 3NF 的關聯綱目和每一關聯綱目之 FD。
登入後即可作答並保存紀錄。
核心觀念
本題考功能相依的最小集合、候選鍵與 3NF 分解。
- 最小集合:右側每個屬性皆為單一屬性;左側不可再刪除任何屬性;且不可刪除任何一條相依而改變原相依集合所能推出的結果。
- 候選鍵:能決定關聯中所有屬性的最小屬性集合。
- 3NF:對每個非平凡 FD ,至少符合其一: 是超鍵,或 是主屬性(出現在某個候選鍵中)。
解題方法
先將所有右側屬性拆成單一屬性,再檢查各 FD 的左側是否可約簡、是否有冗餘相依。接著以「未出現在任何 FD 右側的屬性必須在每個候選鍵中」為切入點求鍵,最後以最小集合中的 FD 建立 3NF 關聯,並加入候選鍵所在的關聯以確保無損分解。
以下以簡寫表示屬性:
- :球隊編號;:球隊名稱;:學校名稱;:比賽場次
- :球員編號;:球員姓名;:位置;:球員學號;:年級
- :得分數;:犯規數
(1)求 的最小集合
先拆開右側:
檢查左側約簡:
- 中, 或 均不能刪除,因為沒有其他 FD 能單獨推出球員屬性。
- 中,、 均不能刪除。
- 中, 均不能刪除。
- 的左側已是單一屬性。
檢查冗餘 FD:上述各相依均不能由其餘 FD 推出。例如 不能由 推出,因為 只能決定 ,不能反向決定 ;同理 也不能由 推出。
故最小集合為:
(2)候選鍵
未出現在任何 FD 右側的屬性為 ,因此任何候選鍵都必須包含球隊編號與比賽場次。
由 可知,還必須取得 才能決定比賽資料中的位置、得分數與犯規數。候選鍵有兩種取得 的方式:
以及
因 ,包含 後可取得 。故可用 或 配合 取得另一個球員識別屬性,分別形成: