115 身心障礙特考三等 資訊處理 資料庫應用 考古題詳解
第 一 題30 分
關聯模式是目前 DBMS 常用的資料模式之一。在關聯中新增一些序列值(tuples)必須要滿足一些限制。定義域限制(Domain constraint)、關聯鍵限制(Key constraint)、實體完整性限制(Entity integrity constraint)和參考完整性限制(Referential integrity constraint)為其中四種基本限制。
(一) 請分別說明這四種限制的意義。
(二) 請分別就這四種限制舉例說明。
登入後即可作答並保存紀錄。
核心觀念
本題考查關聯資料庫的基本完整性限制。資料表中的每筆資料稱為一個元組(tuple),每個欄位有其屬性與可接受的值。新增或修改資料時,必須符合下列四項限制,才能維持資料的正確性與關聯性。
解題方法
作答時可依序從「欄位值、資料列識別、主鍵值、表間關聯」四個層次說明:
- 定義域限制:檢查單一欄位的值是否符合其資料型態、範圍或格式。
- 關聯鍵限制:檢查候選鍵是否能唯一識別每一筆元組。
- 實體完整性限制:檢查主鍵值是否存在且不為
NULL。 - 參考完整性限制:檢查外鍵是否對應到被參照資料表中實際存在的鍵值,或依規則允許為
NULL。
四種限制的意義與例子
一、定義域限制(Domain constraint)
意義: 每個屬性的值都必須取自該屬性所定義的值域。值域可由資料型態、長度、範圍、格式或其他檢核條件界定。
例子: 在「學生」關聯中,若「年級」欄位定義為整數且範圍是 1 至 4,則新增年級為 3 的學生資料符合限制;新增年級為 5 或填入文字「三年級」則不符合。若「出生日期」欄位定義為日期型態,輸入無效日期也不符合定義域限制。
二、關聯鍵限制(Key constraint)
意義: 關聯的鍵必須能唯一識別每一筆元組。不同元組不能在同一組鍵屬性上具有相同值。候選鍵是能唯一識別元組的最小屬性集合;其中選定作為主要識別依據者稱為主鍵。
例子:
在「學生(學號、姓名、系所)」關聯中,若「學號」為候選鍵,則不能同時新增兩筆學號皆為 S001 的學生資料,即使姓名或系所不同也不行。若「課程」關聯以「課程代碼」為鍵,同一課程代碼也不得重複。
三、實體完整性限制(Entity integrity constraint)
第 二 題25 分
將下列 ERD 轉換成資料庫綱目(Database Schema),在各個關聯綱目中,須標示主要鍵和外來鍵之參考。
(此題原卷文字擷取不全,請參考原卷。)
登入後即可作答並保存紀錄。
核心觀念
本題考查 ERD 轉換為關聯綱目(Relational Schema)的規則,重點包括:
- 一般實體轉換為一個關聯綱目。
- 多值屬性必須另建關聯綱目。
- 關聯:將「1」端的主鍵放入「M」端作為外來鍵。
- 關聯:將一方主鍵放入另一方作為外來鍵,並以
UNIQUE維持一對一。 - 關聯:另建關聯綱目,包含兩端實體的主鍵。
- 弱實體的主鍵由「擁有者實體主鍵+弱實體部分鍵」組成。
- 遞迴關聯可將同一實體的主鍵以不同角色放入同一綱目。
圖中:
X、Y、W為一般實體。Z為弱實體,以雙框表示。R2為識別關聯,以雙菱形表示。XC為多值屬性,以雙橢圓表示。R3具有關聯屬性RC。R5是X對自身的遞迴關聯,基數為 。
解題方法
先將各實體的主鍵找出,再依照關聯基數決定外來鍵的位置:
X的主鍵為XA。Y的主鍵為YA。W的主鍵為WA。Z為弱實體,ZA是部分鍵,因此Z的完整主鍵為 。XC為多值屬性,必須拆成獨立綱目。R1為 。R2為 的弱實體識別關聯。R3為 ,且有關聯屬性RC。R4為 。R5為X的遞迴 關聯。
資料庫綱目
以下以粗體表示主要鍵,FK 後標示外來鍵參考的綱目。
1. 實體 X
其中:
XA:主要鍵。
XC 是多值屬性,不能直接放在 X 中,因此另建綱目:
其中:
XA:外來鍵,參考X(XA)。(XA, XC):複合主要鍵。
2. 實體 Y 與關聯 R1
R1 的基數為:
因此將 X 的主鍵 XA 放入多方 Y 中:
其中:
YA:主要鍵。XA:外來鍵,參考X(XA)。
3. 弱實體 Z 與識別關聯 R2
Z 是弱實體,R2 是其識別關聯。圖中:
Y端為 。Z端為 。ZA是弱實體的部分鍵。
因此將擁有者 Y 的主鍵 YA 放入 Z,並與部分鍵 ZA 組成完整主鍵:
其中:
(YA, ZA):主要鍵。YA:外來鍵,參考Y(YA)。
由於 R2 是識別關聯,通常不必另建 R2 綱目,其資訊已整合至 Z 中。
4. 多對多關聯 R3
R3 連接 X 與 Z,基數為:
因此必須另建關聯綱目,並納入兩端實體的主鍵及關聯屬性 RC:
其中:
(XA, YA, ZA):主要鍵。XA:外來鍵,參考X(XA)。(YA, ZA):外來鍵,參考Z(YA, ZA)。RC:R3的關聯屬性。
第 三 題20 分
DBMS 在沒有適當的並行控制(Concurrency control)機制下,任意交錯處理多個交易的運算動作,可能會造成問題並產生錯誤的結果。
請針對遺失更新的問題(Lost Update Problem)和污染讀取的問題(Dirty Read Problem),舉例說明發生問題的原因並解釋之。
登入後即可作答並保存紀錄。
核心觀念
本題考查交易並行執行時,若缺乏適當的並行控制,資料讀寫交錯可能破壞資料一致性。以下以交易 、 表示兩個同時執行的交易,資料項目以 表示。
- 遺失更新(Lost Update):兩個交易讀取同一資料的舊值,分別計算後寫回;後寫入的結果覆蓋先前交易的更新,使先前更新遺失。
- 污染讀取(Dirty Read):一個交易讀取另一個尚未提交(commit)的交易所寫入資料。若寫入交易之後回復(rollback),讀取交易使用的便是無效資料。
解題方法
作答時,以「操作交錯順序」呈現問題,再比較最後的資料狀態與正確結果。遺失更新要追蹤兩個交易如何以舊值計算並互相覆蓋;污染讀取則要指出讀取發生在寫入交易提交之前,以及回復後造成的影響。
一、遺失更新
假設資料項目 的初始值為 :
- 要將 增加 。
- 要將 減少 。
若依序執行,結果應為:
若操作交錯如下:
| 順序 | ||
|---|---|---|
| 1 | 讀取 | |
| 2 | 讀取 | |
| 3 | 計算 | |
| 4 | 計算 | |
| 5 | 寫回 | |
| 6 | 寫回 |
最後資料庫中的 。 寫回時,覆蓋了 寫入的 ;結果等同只執行 , 的加 更新遺失。
**發生原因:**兩個交易都根據舊值 計算,且沒有並行控制避免彼此覆寫。
第 四 題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。
(三)依性別查詢會員平均花費點數
遊戲資料中的花費點數屬於遊戲,會員是否玩過該遊戲則由遊戲紀錄資料表示。因此先連接會員、遊戲紀錄及遊戲資料,再依會員性別分組,計算各組的平均花費點數。