115 身心障礙特考三等 資訊處理 資料庫應用 考古題詳解

115 年・身心障礙特考・三等・資訊處理
試題代碼 資料庫應用

第 一 題30 分

關聯模式是目前 DBMS 常用的資料模式之一。在關聯中新增一些序列值(tuples)必須要滿足一些限制。定義域限制(Domain constraint)、關聯鍵限制(Key constraint)、實體完整性限制(Entity integrity constraint)和參考完整性限制(Referential integrity constraint)為其中四種基本限制。

(一) 請分別說明這四種限制的意義。

(二) 請分別就這四種限制舉例說明。

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

這一題的完整詳解

核心觀念

本題考查關聯資料庫的基本完整性限制。資料表中的每筆資料稱為一個元組(tuple),每個欄位有其屬性與可接受的值。新增或修改資料時,必須符合下列四項限制,才能維持資料的正確性與關聯性。

解題方法

作答時可依序從「欄位值、資料列識別、主鍵值、表間關聯」四個層次說明:

  1. 定義域限制:檢查單一欄位的值是否符合其資料型態、範圍或格式。
  2. 關聯鍵限制:檢查候選鍵是否能唯一識別每一筆元組。
  3. 實體完整性限制:檢查主鍵值是否存在且不為 NULL。
  4. 參考完整性限制:檢查外鍵是否對應到被參照資料表中實際存在的鍵值,或依規則允許為 NULL。

四種限制的意義與例子

一、定義域限制(Domain constraint)

意義: 每個屬性的值都必須取自該屬性所定義的值域。值域可由資料型態、長度、範圍、格式或其他檢核條件界定。

例子: 在「學生」關聯中,若「年級」欄位定義為整數且範圍是 1 至 4,則新增年級為 3 的學生資料符合限制;新增年級為 5 或填入文字「三年級」則不符合。若「出生日期」欄位定義為日期型態,輸入無效日期也不符合定義域限制。

二、關聯鍵限制(Key constraint)

意義: 關聯的鍵必須能唯一識別每一筆元組。不同元組不能在同一組鍵屬性上具有相同值。候選鍵是能唯一識別元組的最小屬性集合;其中選定作為主要識別依據者稱為主鍵。

例子: 在「學生(學號、姓名、系所)」關聯中,若「學號」為候選鍵,則不能同時新增兩筆學號皆為 S001 的學生資料,即使姓名或系所不同也不行。若「課程」關聯以「課程代碼」為鍵,同一課程代碼也不得重複。

三、實體完整性限制(Entity integrity constraint)

🔒

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

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

免費註冊

第 二 題25 分

將下列 ERD 轉換成資料庫綱目(Database Schema),在各個關聯綱目中,須標示主要鍵和外來鍵之參考。

(此題原卷文字擷取不全,請參考原卷。)

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題考查 ERD 轉換為關聯綱目(Relational Schema)的規則,重點包括:

  1. 一般實體轉換為一個關聯綱目。
  2. 多值屬性必須另建關聯綱目。
  3. 1:M1:M 關聯:將「1」端的主鍵放入「M」端作為外來鍵。
  4. 1:11:1 關聯:將一方主鍵放入另一方作為外來鍵,並以 UNIQUE 維持一對一。
  5. M:NM:N 關聯:另建關聯綱目,包含兩端實體的主鍵。
  6. 弱實體的主鍵由「擁有者實體主鍵+弱實體部分鍵」組成。
  7. 遞迴關聯可將同一實體的主鍵以不同角色放入同一綱目。

圖中:

  • X、Y、W 為一般實體。
  • Z 為弱實體,以雙框表示。
  • R2 為識別關聯,以雙菱形表示。
  • XC 為多值屬性,以雙橢圓表示。
  • R3 具有關聯屬性 RC。
  • R5 是 X 對自身的遞迴關聯,基數為 1:M1:M。

解題方法

先將各實體的主鍵找出,再依照關聯基數決定外來鍵的位置:

  • X 的主鍵為 XA。
  • Y 的主鍵為 YA。
  • W 的主鍵為 WA。
  • Z 為弱實體,ZA 是部分鍵,因此 Z 的完整主鍵為 (YA,ZA)(YA,ZA)。
  • XC 為多值屬性,必須拆成獨立綱目。
  • R1 為 X:Y=1:MX:Y=1:M。
  • R2 為 Y:Z=1:MY:Z=1:M 的弱實體識別關聯。
  • R3 為 X:Z=M:NX:Z=M:N,且有關聯屬性 RC。
  • R4 為 X:W=1:1X:W=1:1。
  • R5 為 X 的遞迴 1:M1:M 關聯。

資料庫綱目

以下以粗體表示主要鍵,FK 後標示外來鍵參考的綱目。

1. 實體 X

X(XA,XB)X(\mathbf{XA}, XB)

其中:

  • XA:主要鍵。

XC 是多值屬性,不能直接放在 X 中,因此另建綱目:

X_XC(XA,XC)X\_XC(\mathbf{XA},\mathbf{XC})

其中:

  • XA:外來鍵,參考 X(XA)。
  • (XA, XC):複合主要鍵。

2. 實體 Y 與關聯 R1

R1 的基數為:

X:Y=1:MX:Y=1:M

因此將 X 的主鍵 XA 放入多方 Y 中:

Y(YA,YB,YC,XA)Y(\mathbf{YA}, YB, YC, XA)

其中:

  • YA:主要鍵。
  • XA:外來鍵,參考 X(XA)。

3. 弱實體 Z 與識別關聯 R2

Z 是弱實體,R2 是其識別關聯。圖中:

  • Y 端為 11。
  • Z 端為 MM。
  • ZA 是弱實體的部分鍵。

因此將擁有者 Y 的主鍵 YA 放入 Z,並與部分鍵 ZA 組成完整主鍵:

Z(YA,ZA,ZB)Z(\mathbf{YA},\mathbf{ZA}, ZB)

其中:

  • (YA, ZA):主要鍵。
  • YA:外來鍵,參考 Y(YA)。

由於 R2 是識別關聯,通常不必另建 R2 綱目,其資訊已整合至 Z 中。


4. 多對多關聯 R3

R3 連接 X 與 Z,基數為:

X:Z=M:NX:Z=M:N

因此必須另建關聯綱目,並納入兩端實體的主鍵及關聯屬性 RC:

R3(XA,YA,ZA,RC)R3(\mathbf{XA},\mathbf{YA},\mathbf{ZA}, RC)

其中:

  • (XA, YA, ZA):主要鍵。
  • XA:外來鍵,參考 X(XA)。
  • (YA, ZA):外來鍵,參考 Z(YA, ZA)。
  • RC:R3 的關聯屬性。

🔒

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

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

免費註冊

第 三 題20 分

DBMS 在沒有適當的並行控制(Concurrency control)機制下,任意交錯處理多個交易的運算動作,可能會造成問題並產生錯誤的結果。

請針對遺失更新的問題(Lost Update Problem)和污染讀取的問題(Dirty Read Problem),舉例說明發生問題的原因並解釋之。

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

這一題的完整詳解

核心觀念

本題考查交易並行執行時,若缺乏適當的並行控制,資料讀寫交錯可能破壞資料一致性。以下以交易 T1T_1、T2T_2 表示兩個同時執行的交易,資料項目以 XX 表示。

  • 遺失更新(Lost Update):兩個交易讀取同一資料的舊值,分別計算後寫回;後寫入的結果覆蓋先前交易的更新,使先前更新遺失。
  • 污染讀取(Dirty Read):一個交易讀取另一個尚未提交(commit)的交易所寫入資料。若寫入交易之後回復(rollback),讀取交易使用的便是無效資料。

解題方法

作答時,以「操作交錯順序」呈現問題,再比較最後的資料狀態與正確結果。遺失更新要追蹤兩個交易如何以舊值計算並互相覆蓋;污染讀取則要指出讀取發生在寫入交易提交之前,以及回復後造成的影響。

一、遺失更新

假設資料項目 XX 的初始值為 100100:

  • T1T_1 要將 XX 增加 1010。
  • T2T_2 要將 XX 減少 2020。

若依序執行,結果應為:

100+10−20=90100+10-20=90

若操作交錯如下:

順序T1T_1T2T_2
1讀取 X=100X=100
2讀取 X=100X=100
3計算 100+10=110100+10=110
4計算 100−20=80100-20=80
5寫回 X=110X=110
6寫回 X=80X=80

最後資料庫中的 X=80X=80。T2T_2 寫回時,覆蓋了 T1T_1 寫入的 110110;結果等同只執行 T2T_2,T1T_1 的加 1010 更新遺失。

**發生原因:**兩個交易都根據舊值 100100 計算,且沒有並行控制避免彼此覆寫。

🔒

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

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

免費註冊

第 四 題25 分

假設現有一會員網路遊戲的關聯式資料庫,其資料表敘述如下:

會員資料(編號、姓名、性別、加入會員日期、介紹人編號)

介紹人編號為 FK,參考會員資料(編號)。

儲值資料(會員編號、儲值日期時間、儲值金額)

會員編號為 FK,參考會員資料(編號)。

遊戲資料(遊戲編號、遊戲名稱、花費點數)

遊戲紀錄資料(參與遊戲日期時間、會員編號、遊戲編號)

會員編號為 FK,參考會員資料(編號)。

遊戲編號為 FK,參考遊戲資料(遊戲編號)。

請使用 SQL 回答下列問題:

(一) 查詢會員玩遊戲的資料,列出會員編號、會員姓名、遊戲名稱、參與遊戲日期時間。

(二) 查詢沒有玩過遊戲會員的資料,列出會員編號、會員姓名、會員性別、加入會員日期。

(三) 查詢不同性別下所有會員平均花費之點數,列出會員性別、平均花費點數,平均花費點數四捨五入計算至小數點後第 2 位。

(四) 查詢介紹人介紹會員的資料,以介紹會員人數降冪列出介紹人編號、介紹人姓名、介紹人性別、介紹會員人數。介紹會員人數少於或等於 4 人者無需列出。

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

這一題的完整詳解

核心觀念

本題考查關聯式資料庫的多表連接、反向查詢、分組彙總、數值四捨五入,以及自我連接。

  • JOIN:依外鍵與主鍵的對應關係合併資料表。
  • LEFT JOIN 與 IS NULL:找出左表存在、右表沒有對應資料的紀錄。
  • GROUP BY 與 AVG:依群組計算平均值。
  • ROUND(欄位, 2):將數值四捨五入至小數點後兩位。
  • 自我連接:同一張資料表以不同別名出現,用來對照介紹人與被介紹會員。

以下以一般 SQL 寫法作答;不同資料庫系統的日期時間型別或欄位命名方式可能略有差異。

解題方法

(一)查詢會員玩遊戲的資料

遊戲紀錄資料同時記錄會員編號與遊戲編號,因此從遊戲紀錄出發,分別連接會員資料與遊戲資料,即可取得會員姓名及遊戲名稱。

SELECT m.編號 AS 會員編號,
 m.姓名 AS 會員姓名,
 g.遊戲名稱,
 r.參與遊戲日期時間
FROM 會員資料 AS m
JOIN 遊戲紀錄資料 AS r
 ON m.編號 = r.會員編號
JOIN 遊戲資料 AS g
 ON r.遊戲編號 = g.遊戲編號;

使用內部連接會只列出確實有遊戲紀錄,且該紀錄能對應到會員與遊戲的資料。

(二)查詢沒有玩過遊戲的會員

先以會員資料為左表,對遊戲紀錄資料做左外部連接;若連接後的遊戲紀錄會員編號為 NULL,代表該會員沒有任何遊戲紀錄。

SELECT m.編號 AS 會員編號,
 m.姓名 AS 會員姓名,
 m.性別 AS 會員性別,
 m.加入會員日期
FROM 會員資料 AS m
LEFT JOIN 遊戲紀錄資料 AS r
 ON m.編號 = r.會員編號
WHERE r.會員編號 IS NULL;

判斷欄位使用遊戲紀錄資料中的會員編號,因為該欄位在成功配對時必定有值;沒有配對時則為 NULL。

(三)依性別查詢會員平均花費點數

遊戲資料中的花費點數屬於遊戲,會員是否玩過該遊戲則由遊戲紀錄資料表示。因此先連接會員、遊戲紀錄及遊戲資料,再依會員性別分組,計算各組的平均花費點數。

🔒

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

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

免費註冊

其他考古題