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

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

第 一 題20 分

有一連鎖商店使用「訂單資料表」儲存訂單,並將訂單所訂購的產品明細使用「訂單明細資料表」儲存;產品名稱、庫存數量、採購部門等資料則儲存於「產品資料表」。

各資料表的欄位如下:

訂單(訂單編號,商店編號,訂單年,訂單月,訂單金額,付款方式,運送編號)

訂單明細(訂單編號,產品編號,數量,單價,小計)

產品(產品編號,產品名稱,庫存數量,單價,部門)

請使用結構化查詢語言(SQL)的子查詢(Subquery)和內隱聯合查詢(Implicit Join)兩種方式,分別列出 2024 年各部門販售多少種產品。

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

這一題的完整詳解

核心觀念

本題考查以 SQL 將多張資料表連結,再依部門彙總「2024 年曾販售的產品種類數」。

  • 「訂單」記錄訂單年份;「訂單明細」記錄每筆訂單購買的產品;「產品」提供產品所屬部門。
  • 透過訂單編號連結「訂單」與「訂單明細」,再透過產品編號連結「訂單明細」與「產品」。
  • 「販售多少種產品」是計算不重複的產品數,因此使用 COUNT(DISTINCT 產品編號);同一產品即使出現在多筆訂單或明細中,也只計為一種。
  • 依部門分組,使用 GROUP BY 部門。

解題方法一:使用子查詢

先從 2024 年的訂單中找出其訂單明細,再將這些明細與產品資料連結。最後依部門分組,計算不重複的產品編號。

SELECT P.部門,
 COUNT(DISTINCT P.產品編號) AS 販售產品種類數
FROM 產品 AS P
JOIN 訂單明細 AS D
 ON P.產品編號 = D.產品編號
WHERE D.訂單編號 IN (
 SELECT O.訂單編號
 FROM 訂單 AS O
 WHERE O.訂單年 = 2024
)
GROUP BY P.部門;

子查詢先篩選出 訂單年 = 2024 的訂單編號;外層查詢只保留屬於這些訂單的明細,再連結產品表取得部門。COUNT(DISTINCT P.產品編號) 避免同一產品因多次販售而重複計數。

🔒

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

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

免費註冊

第 二 題30 分

某一學校有一「實驗室分配資料表」,內含三個欄位,分別為學生學號、實驗室編號和教授姓名。已知學生學號和實驗室編號為主鍵(PK),以底線表示。

實驗室分配資料表(學生學號,實驗室編號,教授姓名)

資料內容如下:

學生學號實驗室編號教授姓名
11301RM01劉一
11302RM02陳二
11303RM03張三
11303RM04李四
11304RM02陳二
11305RM03張三
11306RM01王五
11301RM02陳二

請列出功能相依性(Functional Dependency),並將「實驗室分配資料表」依序轉換成符合 BCNF(Boyce-Codd Normal Form)。正規化後的結果必須標示出必要的主鍵(PK)和外部鍵(FK)。

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

這一題的完整詳解

核心觀念

本題考查功能相依性(Functional Dependency, FD)與 BCNF 分解。若屬性集合 XX 能唯一決定屬性 YY,記為 X→YX \to Y。BCNF 的條件是:對關係中的每一個非平凡功能相依性 X→YX \to Y,XX 都必須是超鍵。

題目已給定「學生學號」與「實驗室編號」為複合主鍵,因此這兩欄合起來才能唯一識別一筆分配紀錄。資料也呈現每個實驗室對應一位教授,例如 RM02 對應陳二;依題意採用此資料語意,可列出「實驗室編號 →\to 教授姓名」。

解題方法

令學生學號為 SS、實驗室編號為 RR、教授姓名為 PP。

由題目給定的複合主鍵可得:

(S,R)→P(S,R) \to P

由每個實驗室配置一位教授,可得:

R→PR \to P

因此完整的基本功能相依性為:

(S,R)→P,R→P(S,R) \to P,\qquad R \to P

其中 (S,R)→P(S,R) \to P 也可由 R→PR \to P 推得;保留它可呈現題目所給主鍵對整筆資料的決定能力。

原表的候選鍵為 (S,R)(S,R)。然而在 R→PR \to P 中,RR 不是原表的超鍵,且 PP 不屬於候選鍵,因此原表違反 BCNF。

依 BCNF 分解法,將違反 BCNF 的相依性 R→PR \to P 所涉及的屬性拆出:

  1. 建立「實驗室資料」(R,P)(R,P),以 RR 為主鍵。
  2. 建立「學生實驗室分配」(S,R)(S,R),以 (S,R)(S,R) 為複合主鍵;其中 RR 是參照「實驗室資料」的外部鍵。

正規化結果

🔒

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

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

免費註冊

第 三 題30 分

下表為 ABC 學校 113 學年第一學期學生修課紀錄表的一部份。經詢問業務承辦人得知,每位學生至少選一門課,每一門課最少需有一人選修。

ABC 學校 113 學年第一學期學生修課紀錄:

學號班級姓名課程代號課程名稱課別成績
9901001國貿二劉一C01國文必修80
9901001國貿二劉一C02英文必修75
9901002國貿二陳二C02英文必修60
9901002國貿二陳二C03會計學必修50
9901002國貿二陳二C04計量經濟選修65
9901003國貿三張三C01國文必修85

請使用 1 對多(1:N)關係的烏鴉腳表示法(Crow’s Foot Notation),畫出 ABC 學校 113 學年第一學期學生修課紀錄表的實體關係圖(Entity-Relationship Diagram)。

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

這一題的完整詳解

核心觀念

本題考查實體關係圖(ERD)中的實體辨識、主鍵選定,以及一對多關係的基數與參與限制。烏鴉腳表示法以「一」端和「多」端標示兩個實體間的關係;題目另提供每位學生至少選一門課、每門課至少有一人選修,表示兩端皆為必須參與。

學生選課紀錄同時包含學生、課程及選課成績。由於一位學生可選多門課、一門課也可由多位學生選修,學生與課程本質上是多對多關係;將其拆成兩個一對多關係時,需以「修課紀錄」作為關聯實體。

解題方法

先從欄位辨識實體及其識別欄位:

  • 學生:學號、班級、姓名;以「學號」作為主鍵。
  • 課程:課程代號、課程名稱、課別;以「課程代號」作為主鍵。
  • 修課紀錄:記錄學生修讀哪門課及其成績。每筆紀錄由「學號」和「課程代號」共同識別,因此兩者組成複合主鍵;同時分別是連結學生、課程的外鍵。「成績」屬於學生修讀特定課程的紀錄,而非學生或課程單獨的屬性。

關係與基數如下:

  1. 一位學生至少有一筆修課紀錄;每筆修課紀錄只屬於一位學生。因此「學生」到「修課紀錄」為 1:N1:N,學生端至少參與一次,修課紀錄端恰有一位學生。
  2. 一門課至少有一筆修課紀錄;每筆修課紀錄只對應一門課。因此「課程」到「修課紀錄」為 1:N1:N,課程端至少參與一次,修課紀錄端恰對應一門課。

ERD

🔒

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

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

免費註冊

第 四 題20 分

有一電子商務網站,前端網頁讀入使用者輸入的會員帳號變數為 accacc,密碼變數為 pwdpwd,呼叫後端動態網頁程式。

其中會員資料的帳號和密碼存於 membermember 資料表,其欄位名稱分別為 accountaccount 和 passwordpassword。

有一使用者在前端表單帳號欄輸入任一字串,密碼欄輸入特定字串。雖然該使用者所輸入的帳號和密碼組合並未儲存於 membermember 資料表中,卻可以通過程式檢核而進入會員區。

請問這種對資料庫的入侵行為的攻擊名稱為何?解釋造成此攻擊效果的原因,並說明二種防制的方法。

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

這一題的完整詳解

核心觀念

本題考查 SQL Injection(SQL 注入):應用程式將未經妥善處理的使用者輸入直接組合進 SQL 指令,使輸入內容被資料庫當成 SQL 語法執行,進而改變原本查詢或驗證的邏輯。

解題方法

判斷關鍵在於:使用者輸入的帳號與密碼組合並未存在於 member 資料表,卻仍通過登入檢核。這表示後端送出的查詢可能被輸入內容改寫,使資料庫回傳「符合登入條件」的結果。

例如,若程式直接以字串串接組成查詢:

SELECT * FROM member
WHERE account = '$acc' AND password = '$pwd';

攻擊者可在輸入欄位填入特製內容,利用引號結束原本的字串,再加入邏輯運算式或 SQL 註解符號,改變 WHERE 條件。若程式只依查詢結果是否有資料判定登入,遭改寫的查詢便可能回傳資料列,讓未登錄的帳密組合通過檢核。

🔒

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

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

免費註冊

其他考古題