111 國安局特考三等 資訊組(選試英文) 資料庫應用 考古題詳解

111 年・國安局特考・三等・資訊組(選試英文)
試題代碼 資料庫應用

第 一 題

一篇學術文章通常有許多屬性,包括唯一編號(paper_ID)、論文名稱(title)、發表期刊(journal)、發表卷期(vol)、發表年(year)、起始頁(start)及結束頁(end),若可對應到先前提出過的一或多篇技術報告,則另加上該技術報告編號(TR-ID)。每一本期刊一年可出刊多次,每次都有不同的卷期(連續但不重複),且視論文長短,結束頁一定不會小於起始頁,且不會把兩篇論文(部分)內容編排在同一頁。請用以下關連及資料表回答問題。

Paper (ID, title, journal, vol, year, start, end, TR-ID)

paper_IDtitlejournalvolyearstartendTR-ID
142Dynamic Prog.Algo4120173434104
524Mysql DBJDB5620222641723
524Mysql DBJDB5620222641724
103SortingAlgo3220151525142
712Dynamic Prog.Algo012022150156
301HashingAlgo0120225152
199Mysql DBJDB67202271101511
87QueueDataStruct3220212728
65StackDataStruct0320204956

(一) 下列屬性(attributes)那幾個可以是主鍵(primary key)?(5分)

  1. {paper_ID}
  2. {paper_ID, TR-ID}
  3. {paper_ID, title, TR-ID}
  4. {title, year}
  5. {start, journal, issue}

(二) 下列那幾個存在功能相依性(Functional Dependencies)?(5分)

  1. paper_ID→title\text{paper\_ID} \rightarrow \text{title}
  2. start→end\text{start} \rightarrow \text{end}
  3. journal, vol→year\text{journal, vol} \rightarrow \text{year}
  4. paper_ID→{start, end, journal, vol}\text{paper\_ID} \rightarrow \{\text{start, end, journal, vol}\}
  5. TR-ID→paper_ID\text{TR-ID} \rightarrow \text{paper\_ID}

(三) 請進行 BCNF 正規化,並寫出正規化後的關連。(10分)

(四) 下列那幾個是正確的 SQL 語法?(5分)

  1. SELECT * FROM Paper WHERE end-start>10;
  2. SELECT * FROM Paper WHERE end-start<0;
  3. SELECT SUM(title) FROM Paper;
  4. SELECT year,COUNT(*) FROM Paper GROUP BY year;
  5. SELECT year,COUNT(*) FROM Paper ORDER BY year;

(五) 下列 SQL 語法執行後會產生幾行(tuples)的資料?(5分)

  1. SELECT paper_ID FROM Paper WHERE year<=2022;
  2. SELECT DISTINCT paper_ID FROM Paper WHERE year<=2022;
  3. SELECT AVG(year) FROM Paper GROUP BY journal;
  4. SELECT * FROM Paper WHERE journal LIKE '%t';
  5. SELECT title FROM Paper ORDER BY year;

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

這一題的完整詳解

核心觀念

本題涵蓋:

  1. 主鍵與候選鍵:主鍵必須能唯一識別每一筆資料,且應具最小性。
  2. 功能相依性:若屬性集合 XX 能唯一決定屬性集合 YY,則記為 X→YX \rightarrow Y。
  3. BCNF:關係中每一個非平凡功能相依性 X→YX \rightarrow Y,其決定項 XX 必須是超鍵。
  4. 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 區分。例如:

  • (524,723)(524,723)
  • (524,724)(524,724)

兩者不同,因此此組合可唯一識別資料列,且沒有多餘屬性,屬於候選鍵,可作為主鍵。

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\text{paper\_ID} \rightarrow \text{title}

正確。

paper_ID 是論文唯一編號,同一篇論文的名稱固定,因此可決定 title。

2. start→end\text{start} \rightarrow \text{end}

錯誤。

起始頁單獨不能決定結束頁。頁碼只在同一期刊的特定卷期中具有編排意義,不同期刊或不同卷期可能使用相同的起始頁。

題目只保證:

end≥start\text{end} \geq \text{start}

並未保證 start 能唯一決定 end。

3. journal, vol→year\text{journal, vol} \rightarrow \text{year}

正確。

同一本期刊的卷期連續且不重複,因此由期刊與卷期可決定出版年度。

4. paper_ID→{start, end, journal, vol}\text{paper\_ID} \rightarrow \{\text{start, end, journal, vol}\}

正確。

一個 paper_ID 代表一篇固定論文,因此其起始頁、結束頁、期刊與卷期均固定。

5. TR-ID→paper_ID\text{TR-ID} \rightarrow \text{paper\_ID}

正確。

技術報告編號可唯一識別一份技術報告,而每份技術報告至多對應一篇論文。因此 TR-ID 可決定其對應的 paper_ID。

TR-ID 為空值的資料列代表沒有對應技術報告,不影響非空技術報告編號所形成的功能相依性。

【答案】

1、3、4、5


(三)BCNF 正規化

核心觀念

BCNF 要求:

對關係中的每個非平凡功能相依性 X→YX \rightarrow Y,XX 必須是超鍵。

原始關係為:

Paper(paper_ID,title,journal,vol,year,start,end,TR-ID)\text{Paper}( \text{paper\_ID},\text{title},\text{journal},\text{vol}, \text{year},\text{start},\text{end},\text{TR-ID})

主要功能相依性為:

paper_ID→{title,journal,vol,year,start,end}\text{paper\_ID} \rightarrow \{\text{title},\text{journal},\text{vol},\text{year},\text{start},\text{end}\} journal, vol→year\text{journal, vol} \rightarrow \text{year} TR-ID→paper_ID\text{TR-ID} \rightarrow \text{paper\_ID}

判斷原始關係的候選鍵

由於一篇論文可能對應多個技術報告,paper_ID 單獨不是鍵。

候選鍵為:

{paper_ID,TR-ID}\{\text{paper\_ID},\text{TR-ID}\}

但 paper_ID 可決定論文資料,且 paper_ID 不是超鍵,因此原始關係不符合 BCNF。

此外,journal, vol 可決定 year,但同一期刊同一卷期可能包含多篇論文,因此 journal, vol 也不是超鍵,亦違反 BCNF。

分解步驟

第一步:拆出期刊卷期資料

建立:

🔒

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

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

免費註冊

第 二 題

延續第一題所給的 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分) πtitle, year(σyear=2022(Paper))\pi_{\text{title, year}}(\sigma_{\text{year} = 2022}(\text{Paper}))

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

這一題的完整詳解

核心觀念

本題主要考查:

  • 關聯式資料庫中的投影(Projection)與選擇(Selection)。
  • 多對多關係的連接:Paper、Authors、Paper_Authors。
  • SQL 的表格連接與條件連接。
  • DISTINCT 去除重複資料。
  • COUNT(DISTINCT ...) 對不重複值進行計數。
  • 使用不同別名表示同一關聯表中的不同角色。

其中,Paper_Authors 是論文與發表者之間的中介關聯,用來處理「一篇論文有多位發表者、每位發表者也能發表多篇論文」的多對多關係。


解題方法

查詢論文及其發表者時,必須透過下列連接條件:

Paper.paper_ID=Paper_Authors.paper_IDPaper.paper\_ID = Paper\_Authors.paper\_ID Authors.au_ID=Paper_Authors.au_IDAuthors.au\_ID = Paper\_Authors.au\_ID

若只查詢論文本身的欄位,直接使用 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 曾經發表之所有論文的名稱。

解題分析

  1. P.paper_ID = PA.paper_ID 將每篇論文與其發表者關聯起來。

  2. A.au_ID = PA.au_ID 將中介關聯中的發表者 ID 對應至 Authors 中的發表者資料。

  3. name = 'Johnny Goodyear' 篩選出姓名為 Johnny Goodyear 的發表者。

  4. 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 的發表者,則:

🔒

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

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

免費註冊

第 三 題

資料庫的應用

(一) 請說明 NoSQL 資料庫的特性,及與關聯式資料庫的差異。(10分) (二) 請選擇一個 NoSQL 資料庫並說明適合的使用場合及該資料庫的特性。(10分)

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

這一題的完整詳解

核心觀念

本題旨在考驗考生對巨量資料時代「非關聯式資料庫(NoSQL Database)」之核心架構與實務應用之熟悉度。主要涵蓋以下兩大核心觀念:

  1. NoSQL 的核心特性與系統設計哲學:包含分散式架構下的 BASE 理論(Basically Available, Soft state, Eventual consistency)、無架構(Schema-less)設計、水平擴充(Scale-out)能力,以及其與傳統關聯式資料庫(RDBMS)在 ACID 特性、SQL 查詢、資料結構及關聯約束上的對比。
  2. 特定 NoSQL 資料庫的實務選擇與應用場景:評估不同 NoSQL 資料庫(如文件型、鍵值型、寬欄型、圖型)之架構優勢,並將其準確匹配至相應的業務情境(如高併發寫入、動態屬性儲存、海量日誌分析等)。

解題方法

本題屬於國安局特考資訊組之標準申論題型,解答切入點與編排架構如下:

  1. 第一小題解題邏輯:
  • 先界定 NoSQL(Not Only SQL)的定義,提出其四大核心特性(無固定 Schema、BASE 最終一致性、水平擴充性、分散式儲存)。
  • 以結構化對比表呈現 NoSQL 與 RDBMS 之多維度差異(資料模型、Schema、事務特性、擴充方式、關聯與查詢語言),強化答案之條理與視覺易讀性。
  1. 第二小題解題邏輯:
  • 選擇業界最具代表性且發展成熟之文件型 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 管理之匹配性。


解題技巧

  1. 理論與專有名詞精準對齊:答題時務必使用標準資訊專業術語(如:Scale-out、BASE、BSON、Auto-Sharding、ACID),提升答案專業度。
  2. 善用比較表格:申論題比較項目若達 3 項以上,採用雙欄或多欄對比表能讓閱卷委員迅速掌握答題重點。
  3. 避免混淆關鍵觀念:切勿宣稱 NoSQL 完全取代 RDBMS;應說明兩者係因應不同業務場景(交易強一致性 vs. 海量彈性擴充)而產生的互補技術。

【答案】

(一) NoSQL 資料庫之特性及與關聯式資料庫(RDBMS)之差異

1. NoSQL 資料庫之核心特性 NoSQL(Not Only SQL)資料庫係為解決傳統關聯式資料庫在海量資料(Big Data)與高併發存取下的擴充性瓶頸而設計,其主要特性如下:

  • 動態彈性架構(Schema-less / Schema-flexible):資料庫無需事先定義固定的資料表結構與欄位型別,允許同一集合(Collection)內的資料紀錄擁有不同的欄位組合,極具擴充彈性。
🔒

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

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

免費註冊

第 四 題

以下為國際學術合作所需記錄有關大學(university),研究者(researcher),論文(paper),計畫(project)等資料的相關資訊。

  1. 大學(institution)資料應有大學名稱(name)、國家(country)、創始年(year)。
  2. 每個大學都有一或多個系所(department),任二系所名稱(name)皆不相同。
  3. 研究者(Researcher)可分為研究助理(RA)及教授(professor)兩類人員。
  4. 研究者資料包括姓名(name),出生年(birth),頭銜(title)。
  5. 共同發表論文(Paper)資訊包括論文名稱(title)與共同發表之研究者。
  6. 研究者資料應有最高學歷(degree)、指導教授及畢業大學。
  7. 教授可主持多個研究計畫(project),研究計畫資訊包括計畫名稱(title)、起始日期(start)、結束日期(end)。
  8. 教授的所有研究計畫的總經費(funding)資料。

(一) 請設計並畫出符合上述需求的實體關連圖(E/R diagram)。不可以有重複的實體(entity)、關連(relationships)及屬性(attributes)。(15分) (二) 請用 SQL 語法建立出上述實體關連圖的資料庫資料表。資料型態合理的定義即可,但要清楚定義主鍵(primary key)、外來鍵(foreign key)及其他任何條件限制。(15分)

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

這一題的完整詳解

核心觀念

本題考驗概念資料庫設計(Conceptual Database Design)與邏輯資料庫設計(Logical Database Design)的核心能力,包含以下四項技術重點:

  1. 實體關連模型(E/R Diagram)元件構建:正確區分強實體(Strong Entity)、特化/繼承關係(ISA Subclass: Disjoint Constraint)、自我參照關連(Recursive Relationship)、對應基數(Cardinality Ratio)以及衍生屬性(Derived Attribute)。
  2. 無冗餘設計(Non-redundancy Principle):父類別屬性不可在子類別重複繪製,計算型資料(如總經費)應設計為衍生屬性而非實體固有屬性。
  3. E/R 模型轉關聯式模型(Relational Schema Mapping):包含實體轉資料表、1:N 關連外來鍵放置、N:M 關連轉為對應表(Junction Table)、ISA 繼承轉換架構(Class Hierarchy Mapping)。
  4. SQL DDL 資料定義語言:定義 Primary Key (PK)、Foreign Key (FK) 參照完整性(ON UPDATE/DELETE 策略)、Check 限制條件與 VIEW 衍生欄位實作。

解題方法

依據題目 8 點需求進行實體、屬性、關連性與約束條件的分析推導:

  1. 大學與系所(需求 1、2):
  • 實體 Institution(大學):屬性包含 name(主鍵)、country、year。
  • 實體 Department(系所):題幹特別說明「任二系所名稱皆不相同」,故 name 獨立為系所的主鍵。
  • 關連:Institution 1 對 N Department(一間大學包含一或多個系所,系所必屬於一間大學)。
  1. 研究者及其特化類別(需求 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>),記錄研究者的指導教授。
  1. 論文與共同發表(需求 5):
  • 實體 Paper(論文):屬性包含 paper_id(主鍵)、title(論文名稱)。
  • 關連:Researcher 與 Paper 為 N:M 共同發表關連(<Publishes>)。
  1. 研究計畫與總經費(需求 7、8):
  • 實體 Project(計畫):屬性包含 project_id(主鍵)、title、start_date、end_date、funding(該單一計畫經費)。
  • 主持關連:Professor 1 對 N Project(一位教授可主持多個計畫,每個計畫由一位教授主持)。
  • 教授總經費:Professor 的屬性 total_funding 為衍生屬性(以虛線橢圓表示),數值為該教授所主持所有計畫經費之總和: Professor.total_funding=∑Project∈HostedProject.funding\text{Professor.total\_funding} = \sum_{\text{Project} \in \text{Hosted}} \text{Project.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 動態計算,確保符號規範與正規化精神。

解題技巧

  1. 實體主鍵選擇技巧:雖然題目提到系所 name 全局唯一,但在 SQL 語法設計時,建議為 Researcher、Paper、Project 等建立代理主鍵(Surrogate Key,如 researcher_id),可增進 JOIN 查詢效率與資料庫擴充性。
  2. 自我參照外來鍵設定:指導教授欄位 advisor_id 必須允許 NULL 值,因為最高階教授可能沒有指導教授(或資料庫未記載),避免插入資料時觸發參照完整性循環封鎖。
  3. 檢查限制(CHECK Constraints):在 SQL 中加上 end_date >= start_date 及 funding >= 0 等邏輯限制條件,展現資深工程師與國考高分解答的嚴密性。

【答案】

(一) 實體關連圖(E/R Diagram)說明與圖解

1. E/R Diagram 文字與結構說明
  • 實體(Entities)與屬性(Attributes):
  • Institution(大學):<u>name</u> (PK), country, year
  • Department(系所):<u>name</u> (PK)
  • Researcher(研究者,父實體):<u>researcher_id</u> (PK), name, birth, title, degree
  • Professor(教授,子實體):包含衍生屬性 total_funding(虛線橢圓)
  • RA(研究助理,子實體)
  • Paper(論文):<u>paper_id</u> (PK), title
  • Project(計畫):<u>project_id</u> (PK), title, start_date, end_date, funding
  • 關連(Relationships):
  • Belongs_To(包含系所):Institution (1) ↔\leftrightarrow Department (N)
  • Graduated_From(畢業大學):Researcher (N) ↔\leftrightarrow Institution (1)
🔒

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

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

免費註冊

其他考古題