111 國安局特考三等 資訊組(選試英文) 資料庫應用 考古題詳解
第 一 題
一篇學術文章通常有許多屬性,包括唯一編號(paper_ID)、論文名稱(title)、發表期刊(journal)、發表卷期(vol)、發表年(year)、起始頁(start)及結束頁(end),若可對應到先前提出過的一或多篇技術報告,則另加上該技術報告編號(TR-ID)。每一本期刊一年可出刊多次,每次都有不同的卷期(連續但不重複),且視論文長短,結束頁一定不會小於起始頁,且不會把兩篇論文(部分)內容編排在同一頁。請用以下關連及資料表回答問題。
Paper (ID, title, journal, vol, year, start, end, TR-ID)
| paper_ID | title | journal | vol | year | start | end | TR-ID |
|---|---|---|---|---|---|---|---|
| 142 | Dynamic Prog. | Algo | 41 | 2017 | 34 | 34 | 104 |
| 524 | Mysql DB | JDB | 56 | 2022 | 26 | 41 | 723 |
| 524 | Mysql DB | JDB | 56 | 2022 | 26 | 41 | 724 |
| 103 | Sorting | Algo | 32 | 2015 | 15 | 25 | 142 |
| 712 | Dynamic Prog. | Algo | 01 | 2022 | 1 | 50 | 156 |
| 301 | Hashing | Algo | 01 | 2022 | 51 | 52 | |
| 199 | Mysql DB | JDB | 67 | 2022 | 71 | 101 | 511 |
| 87 | Queue | DataStruct | 32 | 2021 | 27 | 28 | |
| 65 | Stack | DataStruct | 03 | 2020 | 49 | 56 |
(一) 下列屬性(attributes)那幾個可以是主鍵(primary key)?(5分)
- {paper_ID}
- {paper_ID, TR-ID}
- {paper_ID, title, TR-ID}
- {title, year}
- {start, journal, issue}
(二) 下列那幾個存在功能相依性(Functional Dependencies)?(5分)
(三) 請進行 BCNF 正規化,並寫出正規化後的關連。(10分)
(四) 下列那幾個是正確的 SQL 語法?(5分)
- SELECT * FROM Paper WHERE end-start>10;
- SELECT * FROM Paper WHERE end-start<0;
- SELECT SUM(title) FROM Paper;
- SELECT year,COUNT(*) FROM Paper GROUP BY year;
- SELECT year,COUNT(*) FROM Paper ORDER BY year;
(五) 下列 SQL 語法執行後會產生幾行(tuples)的資料?(5分)
- SELECT paper_ID FROM Paper WHERE year<=2022;
- SELECT DISTINCT paper_ID FROM Paper WHERE year<=2022;
- SELECT AVG(year) FROM Paper GROUP BY journal;
- SELECT * FROM Paper WHERE journal LIKE '%t';
- SELECT title FROM Paper ORDER BY year;
登入後即可作答並保存紀錄。
核心觀念
本題涵蓋:
- 主鍵與候選鍵:主鍵必須能唯一識別每一筆資料,且應具最小性。
- 功能相依性:若屬性集合 能唯一決定屬性集合 ,則記為 。
- BCNF:關係中每一個非平凡功能相依性 ,其決定項 必須是超鍵。
- SQL 查詢語法、聚合函數、
GROUP BY、ORDER BY、DISTINCT與LIKE。
(一)可作為主鍵的屬性集合
解題方法
先判斷每個屬性集合是否:
- 能唯一識別每一筆 tuple;
- 具最小性;
- 符合題目所給的資料語意。
由於同一篇論文可能對應多個技術報告,因此單獨使用 paper_ID 不一定唯一。
選項分析
1. {paper_ID}
錯誤。
paper_ID = 524 出現兩筆,分別對應 TR-ID = 723 與 724,因此 paper_ID 無法唯一識別 tuple。
2. {paper_ID, TR-ID}
正確。
同一個 paper_ID 若對應多個技術報告,可由 TR-ID 區分。例如:
兩者不同,因此此組合可唯一識別資料列,且沒有多餘屬性,屬於候選鍵,可作為主鍵。
3. {paper_ID, title, TR-ID}
錯誤。
此集合雖然能唯一識別資料列,但 title 可由 paper_ID 決定,並非必要屬性,違反候選鍵的最小性。因此它是超鍵,不是候選鍵。
4. {title, year}
錯誤。
資料中有兩篇論文的 title = Mysql DB 且 year = 2022,無法唯一識別 tuple。
5. {start, journal, issue}
錯誤。
題目關係的屬性是 vol,並沒有 issue 屬性。依題目所給關係模式,此集合不是合法的屬性集合。
【答案】
2
(二)功能相依性
解題方法
依題目語意與資料限制判斷:
- 論文編號能決定論文本身的固定資料;
- 同一期刊的卷期可決定出版年度;
- 技術報告編號具有唯一性,可對應一篇論文;
- 單獨的起始頁不能決定其他欄位。
選項分析
1.
正確。
paper_ID 是論文唯一編號,同一篇論文的名稱固定,因此可決定 title。
2.
錯誤。
起始頁單獨不能決定結束頁。頁碼只在同一期刊的特定卷期中具有編排意義,不同期刊或不同卷期可能使用相同的起始頁。
題目只保證:
並未保證 start 能唯一決定 end。
3.
正確。
同一本期刊的卷期連續且不重複,因此由期刊與卷期可決定出版年度。
4.
正確。
一個 paper_ID 代表一篇固定論文,因此其起始頁、結束頁、期刊與卷期均固定。
5.
正確。
技術報告編號可唯一識別一份技術報告,而每份技術報告至多對應一篇論文。因此 TR-ID 可決定其對應的 paper_ID。
TR-ID 為空值的資料列代表沒有對應技術報告,不影響非空技術報告編號所形成的功能相依性。
【答案】
1、3、4、5
(三)BCNF 正規化
核心觀念
BCNF 要求:
對關係中的每個非平凡功能相依性 , 必須是超鍵。
原始關係為:
主要功能相依性為:
判斷原始關係的候選鍵
由於一篇論文可能對應多個技術報告,paper_ID 單獨不是鍵。
候選鍵為:
但 paper_ID 可決定論文資料,且 paper_ID 不是超鍵,因此原始關係不符合 BCNF。
此外,journal, vol 可決定 year,但同一期刊同一卷期可能包含多篇論文,因此 journal, vol 也不是超鍵,亦違反 BCNF。
分解步驟
第一步:拆出期刊卷期資料
建立:
第 二 題
延續第一題所給的 Paper 關連與資料表,連同新增加發表者及聯絡人兩關連如下,
Paper (paper_ID, title, journal, vol, year, start, end, TR-ID) Authors (au_ID, name):發表者 ID(au_ID)及發表者姓名(name) Paper_Authors (paper_ID, au_ID):論文 ID(paper_ID)及發表者(au_ID)
每篇論文可以有多位發表者,但每位發表者都只有一個對應的發表者 ID,且可以(共同)發表多篇論文。
(一) 請寫 SQL 指令以列舉每篇論文的 ID 及名稱。(5分) (二) 請說明以下 SQL 指令所查詢出的資料為何?(5分) SELECT DISTINCT P.title FROM Paper P, Authors A, Paper_Authors PA WHERE P.paper_ID=PA.paper_ID AND A.au_ID=PA.au_ID AND name='Johnny Goodyear';
(三) 請說明以下 SQL 指令所查詢出的資料為何?(5分) SELECT COUNT(DISTINCT A.au_ID) FROM Authors A, Paper_Authors PA1, Paper_Authors PA2 WHERE PA1.au_ID=A.au_ID AND A.name='Johnny Goodyear' AND PA2.au_ID<>A.au_ID AND PA1.paper_ID=PA2.paper_ID;
(四) 請寫出對應以下關聯式代數(Relational Algebra)的 SQL 指令。(5分)
登入後即可作答並保存紀錄。
核心觀念
本題主要考查:
- 關聯式資料庫中的投影(Projection)與選擇(Selection)。
- 多對多關係的連接:
Paper、Authors、Paper_Authors。 - SQL 的表格連接與條件連接。
DISTINCT去除重複資料。COUNT(DISTINCT ...)對不重複值進行計數。- 使用不同別名表示同一關聯表中的不同角色。
其中,Paper_Authors 是論文與發表者之間的中介關聯,用來處理「一篇論文有多位發表者、每位發表者也能發表多篇論文」的多對多關係。
解題方法
查詢論文及其發表者時,必須透過下列連接條件:
若只查詢論文本身的欄位,直接使用 Paper 關聯即可;若要查詢作者或共同作者,則必須透過 Paper_Authors 進行連接。
(一)列舉每篇論文的 ID 及名稱
SQL 指令
SELECT paper_ID, title
FROM Paper;
說明
paper_ID 與 title 都是 Paper 關聯中的屬性,因此直接從 Paper 投影出這兩個欄位即可。
由於每篇論文具有唯一的 paper_ID,正常情況下不需要使用 DISTINCT。
(二)查詢 Johnny Goodyear 發表過的論文名稱
題目 SQL
SELECT DISTINCT P.title
FROM Paper P, Authors A, Paper_Authors PA
WHERE P.paper_ID=PA.paper_ID
AND A.au_ID=PA.au_ID
AND name='Johnny Goodyear';
查詢結果
此指令會查詢:
Johnny Goodyear 曾經發表之所有論文的名稱。
解題分析
-
P.paper_ID = PA.paper_ID將每篇論文與其發表者關聯起來。 -
A.au_ID = PA.au_ID將中介關聯中的發表者 ID 對應至Authors中的發表者資料。 -
name = 'Johnny Goodyear'篩選出姓名為 Johnny Goodyear 的發表者。 -
SELECT DISTINCT P.title只輸出論文名稱,並刪除重複的名稱。
解題技巧與陷阱
DISTINCT是針對title去除重複,不是針對paper_ID去除重複。- 若不同論文恰好具有相同的標題,結果中只會出現一次該標題。
- 這段 SQL 使用舊式逗號連接語法,等價於使用
JOIN的寫法:
SELECT DISTINCT P.title
FROM Paper P
JOIN Paper_Authors PA
ON P.paper_ID = PA.paper_ID
JOIN Authors A
ON A.au_ID = PA.au_ID
WHERE A.name = 'Johnny Goodyear';
(三)查詢 Johnny Goodyear 是否與其他發表者共同發表論文
題目 SQL
SELECT COUNT(DISTINCT A.au_ID)
FROM Authors A, Paper_Authors PA1, Paper_Authors PA2
WHERE PA1.au_ID=A.au_ID
AND A.name='Johnny Goodyear'
AND PA2.au_ID<>A.au_ID
AND PA1.paper_ID=PA2.paper_ID;
查詢結果的意義
此指令查詢的是:
姓名為 Johnny Goodyear 的發表者 ID 中,有多少個曾經與其他發表者共同發表至少一篇論文。
若通常假設資料中只有一位名為 Johnny Goodyear 的發表者,則:
第 三 題
資料庫的應用
(一) 請說明 NoSQL 資料庫的特性,及與關聯式資料庫的差異。(10分) (二) 請選擇一個 NoSQL 資料庫並說明適合的使用場合及該資料庫的特性。(10分)
登入後即可作答並保存紀錄。
核心觀念
本題旨在考驗考生對巨量資料時代「非關聯式資料庫(NoSQL Database)」之核心架構與實務應用之熟悉度。主要涵蓋以下兩大核心觀念:
- NoSQL 的核心特性與系統設計哲學:包含分散式架構下的 BASE 理論(Basically Available, Soft state, Eventual consistency)、無架構(Schema-less)設計、水平擴充(Scale-out)能力,以及其與傳統關聯式資料庫(RDBMS)在 ACID 特性、SQL 查詢、資料結構及關聯約束上的對比。
- 特定 NoSQL 資料庫的實務選擇與應用場景:評估不同 NoSQL 資料庫(如文件型、鍵值型、寬欄型、圖型)之架構優勢,並將其準確匹配至相應的業務情境(如高併發寫入、動態屬性儲存、海量日誌分析等)。
解題方法
本題屬於國安局特考資訊組之標準申論題型,解答切入點與編排架構如下:
- 第一小題解題邏輯:
- 先界定 NoSQL(Not Only SQL)的定義,提出其四大核心特性(無固定 Schema、BASE 最終一致性、水平擴充性、分散式儲存)。
- 以結構化對比表呈現 NoSQL 與 RDBMS 之多維度差異(資料模型、Schema、事務特性、擴充方式、關聯與查詢語言),強化答案之條理與視覺易讀性。
- 第二小題解題邏輯:
- 選擇業界最具代表性且發展成熟之文件型 NoSQL 資料庫——MongoDB 作為解答對象。
- 深入剖析其技術特性:BSON 文件儲存、動態 Schema、複製集(Replica Set)高可用機制、自動分片(Auto-Sharding)水平擴展,以及豐富的索引與聚合管道(Aggregation Pipeline)。
- 舉出具體最適應用場合:如「電商動態商品目錄」、「內容管理系統(CMS)」與「海量行為日誌收集」,說明為何其技術特性完全契合該場景需求。
選項分析
本題為申論問答題,無單選或複選之選項。針對本題兩大子題之答題重點與評分關鍵進行系統化解析:
-
子題 (一) 評分關鍵剖析:
-
NoSQL 特性說明:須精確指出「Schema-less(彈性架構)」與「CAP 定理 / BASE 理論(最終一致性)」之重要觀念,不可僅用「速度快」等籠統詞彙描述。
-
差異對比深度:須從「資料結構」、「事務處理(ACID vs. BASE)」、「擴充機制(Scale-up vs. Scale-out)」與「JOIN 操作」等面向進行對照,點出 RDBMS 強大一致性與 NoSQL 高擴充性之間的權衡(Trade-off)。
-
子題 (二) 評分關鍵剖析:
-
資料庫選擇明確性:必須清楚指定單一 NoSQL 資料庫名稱(如 MongoDB、Redis 或 Cassandra),不可模糊泛稱。
-
特性與場景之因果連結:說明使用場合時,必須與該資料庫之特性連結。例如:MongoDB 的 BSON/Schema-less 特性契合商品屬性動態變更的需求;若選擇 Redis,則應凸顯 In-memory 高速讀寫與 Cache / Session 管理之匹配性。
解題技巧
- 理論與專有名詞精準對齊:答題時務必使用標準資訊專業術語(如:Scale-out、BASE、BSON、Auto-Sharding、ACID),提升答案專業度。
- 善用比較表格:申論題比較項目若達 3 項以上,採用雙欄或多欄對比表能讓閱卷委員迅速掌握答題重點。
- 避免混淆關鍵觀念:切勿宣稱 NoSQL 完全取代 RDBMS;應說明兩者係因應不同業務場景(交易強一致性 vs. 海量彈性擴充)而產生的互補技術。
【答案】
(一) NoSQL 資料庫之特性及與關聯式資料庫(RDBMS)之差異
1. NoSQL 資料庫之核心特性 NoSQL(Not Only SQL)資料庫係為解決傳統關聯式資料庫在海量資料(Big Data)與高併發存取下的擴充性瓶頸而設計,其主要特性如下:
- 動態彈性架構(Schema-less / Schema-flexible):資料庫無需事先定義固定的資料表結構與欄位型別,允許同一集合(Collection)內的資料紀錄擁有不同的欄位組合,極具擴充彈性。
第 四 題
以下為國際學術合作所需記錄有關大學(university),研究者(researcher),論文(paper),計畫(project)等資料的相關資訊。
- 大學(institution)資料應有大學名稱(name)、國家(country)、創始年(year)。
- 每個大學都有一或多個系所(department),任二系所名稱(name)皆不相同。
- 研究者(Researcher)可分為研究助理(RA)及教授(professor)兩類人員。
- 研究者資料包括姓名(name),出生年(birth),頭銜(title)。
- 共同發表論文(Paper)資訊包括論文名稱(title)與共同發表之研究者。
- 研究者資料應有最高學歷(degree)、指導教授及畢業大學。
- 教授可主持多個研究計畫(project),研究計畫資訊包括計畫名稱(title)、起始日期(start)、結束日期(end)。
- 教授的所有研究計畫的總經費(funding)資料。
(一) 請設計並畫出符合上述需求的實體關連圖(E/R diagram)。不可以有重複的實體(entity)、關連(relationships)及屬性(attributes)。(15分) (二) 請用 SQL 語法建立出上述實體關連圖的資料庫資料表。資料型態合理的定義即可,但要清楚定義主鍵(primary key)、外來鍵(foreign key)及其他任何條件限制。(15分)
登入後即可作答並保存紀錄。
核心觀念
本題考驗概念資料庫設計(Conceptual Database Design)與邏輯資料庫設計(Logical Database Design)的核心能力,包含以下四項技術重點:
- 實體關連模型(E/R Diagram)元件構建:正確區分強實體(Strong Entity)、特化/繼承關係(ISA Subclass: Disjoint Constraint)、自我參照關連(Recursive Relationship)、對應基數(Cardinality Ratio)以及衍生屬性(Derived Attribute)。
- 無冗餘設計(Non-redundancy Principle):父類別屬性不可在子類別重複繪製,計算型資料(如總經費)應設計為衍生屬性而非實體固有屬性。
- E/R 模型轉關聯式模型(Relational Schema Mapping):包含實體轉資料表、1:N 關連外來鍵放置、N:M 關連轉為對應表(Junction Table)、ISA 繼承轉換架構(Class Hierarchy Mapping)。
- SQL DDL 資料定義語言:定義 Primary Key (PK)、Foreign Key (FK) 參照完整性(ON UPDATE/DELETE 策略)、Check 限制條件與 VIEW 衍生欄位實作。
解題方法
依據題目 8 點需求進行實體、屬性、關連性與約束條件的分析推導:
- 大學與系所(需求 1、2):
- 實體
Institution(大學):屬性包含name(主鍵)、country、year。 - 實體
Department(系所):題幹特別說明「任二系所名稱皆不相同」,故name獨立為系所的主鍵。 - 關連:
Institution1 對 NDepartment(一間大學包含一或多個系所,系所必屬於一間大學)。
- 研究者及其特化類別(需求 3、4、6):
- 父實體
Researcher(研究者):屬性包含researcher_id(主鍵)、name、birth、title、degree(最高學歷)。 - 特化/繼承關連(ISA):
Researcher劃分為Professor(教授)與RA(研究助理)兩類,具備互斥性(Disjoint constraint)。 - 畢業大學關連:
Researcher與Institution為 N:1 關連(<Graduated_From>),外來鍵儲存畢業大學名稱。 - 指導教授關連:
Researcher與自身(或Professor)建立 N:1 自我參照關連(<Advises>),記錄研究者的指導教授。
- 論文與共同發表(需求 5):
- 實體
Paper(論文):屬性包含paper_id(主鍵)、title(論文名稱)。 - 關連:
Researcher與Paper為 N:M 共同發表關連(<Publishes>)。
- 研究計畫與總經費(需求 7、8):
- 實體
Project(計畫):屬性包含project_id(主鍵)、title、start_date、end_date、funding(該單一計畫經費)。 - 主持關連:
Professor1 對 NProject(一位教授可主持多個計畫,每個計畫由一位教授主持)。 - 教授總經費:
Professor的屬性total_funding為衍生屬性(以虛線橢圓表示),數值為該教授所主持所有計畫經費之總和:
選項分析
本題為國安局特考三等申論題,分段解析兩大子問之評分標準與關鍵結構:
子問(一)E/R Diagram 設計重點
- 不可有重複屬性與實體:
name、birth、title、degree統一置於父實體Researcher,子實體Professor與RA不可再重複標記,否則違背題幹「不可有重複」規定。 - 自我參照關連(Recursive Relationship):「指導教授」屬於
Researcher與Professor(或Researcher本身)之間的關連,不可單獨設計為新實體。 - 衍生屬性表現:「教授的所有研究計畫總經費」必須標示為衍生屬性(Derived Attribute),不得寫成普通屬性,以防資料庫出現冗餘與更新異常(Update Anomaly)。
子問(二)SQL DDL 建立資料表重點
- ISA 繼承之 SQL 實作:採用主鍵繼承法(Class Hierarchy Mapping),
Professor與RA之主鍵既是 Primary Key 亦為參考Researcher(researcher_id)的 Foreign Key。 - 多對多關連轉換:
Researcher與Paper之 N:M 關連必須轉化為獨立的對應資料表Researcher_Paper。 - 衍生屬性實作:實體資料表中不儲存
total_funding實體欄位,而是提供VIEW(視圖)透過SUM動態計算,確保符號規範與正規化精神。
解題技巧
- 實體主鍵選擇技巧:雖然題目提到系所
name全局唯一,但在 SQL 語法設計時,建議為Researcher、Paper、Project等建立代理主鍵(Surrogate Key,如researcher_id),可增進 JOIN 查詢效率與資料庫擴充性。 - 自我參照外來鍵設定:指導教授欄位
advisor_id必須允許NULL值,因為最高階教授可能沒有指導教授(或資料庫未記載),避免插入資料時觸發參照完整性循環封鎖。 - 檢查限制(CHECK Constraints):在 SQL 中加上
end_date >= start_date及funding >= 0等邏輯限制條件,展現資深工程師與國考高分解答的嚴密性。
【答案】
(一) 實體關連圖(E/R Diagram)說明與圖解
1. E/R Diagram 文字與結構說明
- 實體(Entities)與屬性(Attributes):
Institution(大學):<u>name</u> (PK),country,yearDepartment(系所):<u>name</u> (PK)Researcher(研究者,父實體):<u>researcher_id</u> (PK),name,birth,title,degreeProfessor(教授,子實體):包含衍生屬性total_funding(虛線橢圓)RA(研究助理,子實體)Paper(論文):<u>paper_id</u> (PK),titleProject(計畫):<u>project_id</u> (PK),title,start_date,end_date,funding- 關連(Relationships):
Belongs_To(包含系所):Institution(1)Department(N)Graduated_From(畢業大學):Researcher(N)Institution(1)