110 中華郵政招考營運職 資料庫管理 資料庫系統規劃、開發與實務 考古題詳解
第 第一題 題25 分
在資料表規劃過程中,常須施以「正規化」(normalization)以降低資料重複性以及避免資料更新異常現象。假設某資料表屬性欄位 間,存在的功能相依性(functional dependency, FD)如下列四項,請回答下列問題:
(一)請依上列 FD 執行正規化,使分解後各表可滿足「第二正規化格式」(2NF)。【8 分】
(二)承第(一)小題,執行正規化程序,使分解後各表可滿足「第三正規化格式」(3NF)。【8 分】
(三)承第(二)小題,執行正規化程序,使分解後各表皆滿足「BC 正規化格式」(BCNF)。【9 分】
登入後即可作答並保存紀錄。
核心觀念
本題考查功能相依性、候選鍵、屬性閉包,以及由 1NF 逐步分解至 2NF、3NF、BCNF。
- 若 ,表示只要 相同, 必定相同。
- 候選鍵是能決定整個關係的最小屬性集合。
- 2NF:關係須先滿足 1NF,且每一個非主屬性都完全功能相依於每一個候選鍵,不得只相依於候選鍵的一部分。
- 3NF:對每一個非平凡 FD ,至少符合下列一項:
- 是超鍵;
- 是主屬性。
- BCNF:對每一個非平凡 FD , 必須是超鍵。
其中,主屬性是出現在任一候選鍵中的屬性。
一、找出原始關係的候選鍵
令原始關係為:
已知 FD:
1. 判斷 是否為候選鍵
由題目直接給出:
再加上 本身,可得:
因此 是超鍵。
檢查最小性:
- ,無法得到全部屬性;
- ,無法得到全部屬性。
所以 是候選鍵。
2. 判斷 是否為候選鍵
由:
可先由 得到 :
再由:
得到全部屬性,因此:
且:
- 不完整;
- ,不完整。
所以 也是候選鍵。
因此原始關係的候選鍵為:
主屬性為:
非主屬性為:
(一)分解成 2NF
判斷部分相依
原始候選鍵為 與 。
題目給出:
由於 是候選鍵 的真子集,也是候選鍵 的真子集,而 都是非主屬性,因此:
是部分功能相依,違反 2NF。
因此將 分離成一個關係:
其餘屬性保留於另一關係:
2NF 分解結果
為何 已符合 2NF?
在 中,主要相關 FD 為:
的候選鍵仍可取為 與 。
- 的右側 是主屬性;
- 中, 並非候選鍵的一部分,因此不是「候選鍵部分屬性決定非主屬性」的情形;
- 不再存在 非主屬性的部分相依。
所以 與 均符合 2NF。
(二)分解成 3NF
2NF 仍可能存在傳遞相依。於 中有:
而 是非主屬性, 也是非主屬性。由於 並非 的超鍵,形成非主屬性之間的傳遞相依,必須分解。
將其分離為:
原 剩餘屬性形成:
因此 3NF 分解為:
第 第二題 題25 分
某創投基金公司內建關聯式資料庫,有「員工」(EMPLOYEE)、「薪級」(SALARY)等兩項關聯表(relations),此兩表之主鍵(primary key)欄位分別為 EMP_id、SAL_lel,其餘之欄位名稱與所載述的資料錄內容,詳如表二之一及表二之二所示。
EMPLOYEE:
| EMP_id | EMP_name | EMP_since | SAL_lel |
|---|---|---|---|
| EMP-001 | David | 2010 | SAL-01 |
| EMP-002 | Jenny | 2010 | SAL-03 |
| EMP-004 | Emma | 2010 | SAL-05 |
| EMP-008 | Evans | 2012 | SAL-08 |
| EMP-016 | Jessie | 2015 | SAL-05 |
| EMP-017 | Lucas | 2015 | SAL-12 |
| EMP-032 | Wayne | 2015 | SAL-03 |
| EMP-033 | Oliver | 2018 | SAL-08 |
| EMP-064 | Mike | 2021 | SAL-08 |
| EMP-066 | Eric | 2021 | SAL-12 |
【表二之一】
SALARY:
| SAL_lel | SAL_name | SAL_mth |
|---|---|---|
| SAL-01 | 執行長 | 125,000 |
| SAL-03 | 經理級 | 85,000 |
| SAL-05 | 課長級 | 68,000 |
| SAL-08 | 專員級 | 45,000 |
| SAL-12 | 工讀生 | 24,000 |
【表二之二】
設下列所示 SQL 查詢皆可為系統正常執行,請將 SQL-1、SQL-2 查詢後結果以表格方式呈現。
(一)SQL-1:【6 分】
SELECT * FROM EMPLOYEE WHERE SAL_lel NOT IN ('SAL-05', 'SAL-12');
(二)SQL-2:【7 分】
SELECT SAL_lel, SAL_name, SAL_mth FROM SALARY WHERE SAL_mth <= (SELECT AVG(SAL_mth) FROM SALARY) ORDER BY SAL_mth ASC;
(三)SQL-3:【12 分】
欲查詢屬於各不同薪級(SALARY)的「員工人數」,以及公司核發予各薪級員工每月之「月薪總額」,依照薪級順序排列(SAL_lel)如表二之三所示,請問該如何下達此 SQL 查詢句?
| SAL_lel | 員工人數 | 月薪總額 |
|---|---|---|
| SAL-01 | 1 | 125,000 |
| SAL-03 | 2 | 170,000 |
| SAL-05 | 2 | 136,000 |
| SAL-08 | 4 | 180,000 |
| SAL-12 | 2 | 48,000 |
【表二之三】
登入後即可作答並保存紀錄。
核心觀念
本題綜合考查:
WHERE條件篩選與NOT IN運算子。- 聚合函數
AVG與單值子查詢(scalar subquery)。 ORDER BY排序。JOIN表格連結。GROUP BY分組統計。COUNT計算筆數與SUM計算薪資總額。
關聯式資料庫中的資料表本身沒有固定順序,因此未使用 ORDER BY 的查詢,結果排列順序在理論上不保證固定;以下依題目所列資料順序呈現。
(一)SQL-1
SELECT *
FROM EMPLOYEE
WHERE SAL_lel NOT IN ('SAL-05', 'SAL-12');
解題方法
NOT IN 表示欄位值不得等於括號內任一值:
因此排除薪級為 SAL-05 與 SAL-12 的員工,保留其他薪級資料。
查詢結果
| EMP_id | EMP_name | EMP_since | SAL_lel |
|---|---|---|---|
| EMP-001 | David | 2010 | SAL-01 |
| EMP-002 | Jenny | 2010 | SAL-03 |
| EMP-008 | Evans | 2012 | SAL-08 |
| EMP-032 | Wayne | 2015 | SAL-03 |
| EMP-033 | Oliver | 2018 | SAL-08 |
| EMP-064 | Mike | 2021 | SAL-08 |
解題技巧與陷阱
NOT IN ('SAL-05', 'SAL-12')是排除兩個薪級,不是只排除其中一個。SELECT *會選出EMPLOYEE的所有欄位。- 若欄位值為
NULL,使用NOT IN時不會被判定為TRUE;本題資料沒有NULL,因此不影響結果。
(二)SQL-2
SELECT SAL_lel, SAL_name, SAL_mth
FROM SALARY
WHERE SAL_mth <= (SELECT AVG(SAL_mth) FROM SALARY)
ORDER BY SAL_mth ASC;
解題方法
先計算所有薪級的平均月薪:
子查詢:
SELECT AVG(SAL_mth) FROM SALARY
所得到的結果為 ,外層查詢只保留:
符合的薪資為 、、,最後依 SAL_mth ASC 由低至高排序。
查詢結果
| SAL_lel | SAL_name | SAL_mth |
|---|---|---|
| SAL-12 | 工讀生 | 24,000 |
| SAL-08 | 專員級 | 45,000 |
| SAL-05 | 課長級 | 68,000 |
解題技巧與陷阱
第 第三題 題25 分
請回答下列問題:
(一)請說明何謂參照完整性(referential integrity)?如何在關聯模型(relational model)中表示參照完整性?【10 分】
(二)
(1) 請繪製實體關係(entity-relation, ER)圖,建模專題製作科目 CS 5001 中的專題分組。
注意:
- 每個學生(Student)(由學生 SID 識別)必須參加且最多只能參加 1 個分組(Group)。
- 每個分組(Group)係依分組名稱(Name)唯一識別。
- 最多可以有 2 個分組製作同一專題(Project)。
- 每個專題係依專題名稱(Name)唯一識別。
(2) 在 ER 圖中畫出所有實體及關係,並標示所有適當的多重性(multiplicity)及參照完整性等限制條件(constraint),並須繪出每個實體集(entity set)中的鍵值屬性(key attribute)。
登入後即可作答並保存紀錄。
核心觀念
本題考查兩項資料庫核心觀念:
- 參照完整性(referential integrity)與外來鍵(foreign key)。
- 由題目敘述判斷 ER 模型中的實體、關係、鍵值、參與限制與多重性(multiplicity)。
(一)參照完整性
1. 定義
參照完整性是指:關聯資料庫中的外來鍵值,必須能在被參照關係的候選鍵或主鍵中找到對應值。
假設有兩個關係:
其中 為外來鍵,參照關係:
則 中每一個非空值,都必須存在於 中:
換言之,子表中的外來鍵不能指向不存在的父表資料,避免產生「孤兒資料」。
2. 在關聯模型中的表示方法
在關聯模型中,參照完整性透過外來鍵與參照限制表示:
Student(SID, GroupName)
Group(GroupName, ProjectName)
Project(ProjectName)
其中:
Student.GroupName是外來鍵,參照Group.GroupName。Group.ProjectName是外來鍵,參照Project.ProjectName。- 被參照的欄位必須是主鍵或候選鍵。
- 若題目要求學生必須參加分組,則
Student.GroupName必須設定為NOT NULL。 - 若每個分組必須製作一個專題,則
Group.ProjectName必須設定為NOT NULL。
基本限制可表示為:
資料更新時,系統也必須處理父表資料被刪除或主鍵被修改的情況,例如拒絕刪除、連鎖刪除或將外來鍵設為空值。
(二)(1)ER 模型
1. 實體集與鍵值屬性
Student 實體集
Student(SID)
- 鍵值屬性:
SID - 每位學生由唯一的
SID識別。
Group 實體集
Group(Name)
- 鍵值屬性:
Name - 每個分組由唯一的分組名稱識別。
Project 實體集
Project(Name)
- 鍵值屬性:
Name - 每個專題由唯一的專題名稱識別。
2. Student 與 Group 的關係
設關係為:
Student ── Participates ── Group
題目指出:
- 每個學生必須參加分組。
- 每個學生最多只能參加一個分組。
因此,Student 端的參與限制為:
題目未限制每個分組最多容納幾位學生,因此 Group 端為:
若依一般語意認定「分組」至少須有一位學生,也可標示為 ;但依題目明文資訊,應採用 ,因題目只明確規定學生端的必要參與。
ER 關係可表示為:
Student (1,1) ── Participates ── (0,N) Group
其中 Student 為完全參與(total participation),因為每位學生都必須參加分組。
3. Group 與 Project 的關係
設關係為:
Group ── Produces ── Project
題意表示:
- 每個分組製作一個專題。
- 同一個專題最多可由兩個分組製作。
因此:
第 第四題 題25 分
請回答下列問題:
(一)請說明超級鍵(superkey)、最小超級鍵(minimal superkey)、候選鍵(candidate key)及主鍵(primary key)之差異。【5 分】
(二)考量下列關係(relation):
Paper(ID, title, journal, issue, year, startpage, endpage, TR-ID)
記錄關於在期刊上發表的論文之資訊。每篇論文都有唯一的 ID、標題(title)及發表處的資訊,包含:期刊名稱(journal)、期別(issue)、出版年度(year)、起始頁碼(startpage)及結束頁碼(endpage)。此外,若論文過去曾出現於技術報告(TR)中,則指出該技術報告的 ID(TR-ID)。
注意:
- 各期別之期刊出版都在單一年度。
- 論文的 endpage 永遠不會小於 startpage。
- 一頁面中只會出現一篇論文之內容。
表四為 Paper 關係之實例(instance):
| ID | title | journal | issue | year | startpage | endpage | TR-ID |
|---|---|---|---|---|---|---|---|
| 142 | Double Hashing | TAlg | 151 | 2014 | 21 | 33 | 187 |
| 133 | Secret Sharing | TAlg | 141 | 2011 | 169 | 185 | 162 |
| 133 | Secret Sharing | TAlg | 141 | 2011 | 169 | 185 | 156 |
| 139 | Information Hiding | TCOMP | 131 | 2011 | 11 | 33 | 147 |
| 157 | NP Resolutions | TACM | 151 | 2018 | 11 | 13 | 199 |
| 177 | Elliptic Cryp | TCOMP | 151 | 2018 | 11 | 15 | 198 |
| 178 | Elliptic Cryp | AIEE | 222 | 2018 | 22 | 22 | 198 |
【表四】
(1) 列出下列哪些功能依賴性(functional dependency, FD)成立?哪些不成立?【10 分】
(a)
(b)
(c)
(d)
(e)
(2) 列出下列各組屬性是否為 Paper 的最小超級鍵(minimal superkey)?【10 分】
核心觀念
本題考查:
- 超級鍵、最小超級鍵、候選鍵與主鍵的定義。
- 函數依賴性 的判斷。
- 根據題目規則與表四資料,判斷屬性集合是否能唯一識別關係中的每一筆 tuple。
函數依賴 表示:任意兩筆資料若在 上的值相同,則在 上的值也必須相同。
須注意:題目中的 可唯一識別「論文」,但同一篇論文可能曾出現於多個技術報告,因此同一個 可能對應多個 。所以 不一定能唯一識別 Paper 關係中的完整 tuple。
(一)四種鍵的差異
1. 超級鍵(superkey)
若屬性集合 能唯一識別關係中的每一筆 tuple,則 稱為超級鍵。
形式上:
其中 是關係的全部屬性。
超級鍵可以包含多餘屬性。例如在本題中,若 能唯一識別 tuple,則 也一定是超級鍵,但其中的 可能是多餘的。
2. 最小超級鍵(minimal superkey)
最小超級鍵是「不含多餘屬性的超級鍵」,也就是刪除其中任一屬性後,就不再是超級鍵。
這裡的「最小」是指集合包含關係上的最小,不是指屬性數量最少。
3. 候選鍵(candidate key)
候選鍵就是最小超級鍵。若一個關係存在多個最小超級鍵,則每一個都稱為候選鍵。
因此:
4. 主鍵(primary key)
主鍵是由資料庫設計者從候選鍵中選定的一組鍵,作為識別 tuple 的主要鍵。
一個關係通常只能選定一組主鍵,但可以擁有多組候選鍵。主鍵中的屬性不得為 ,且主鍵值不可重複。
(二)函數依賴性判斷
解題方法
判斷 時,找出表四中 值相同的資料列:
- 若 值不同,則 FD 不成立。
- 若 值皆相同,且題目規則支持此關係,則 FD 成立。
(1)(a)
成立。
表四中 出現兩次,但兩筆資料的 都是 Secret Sharing。
而題目說每篇論文具有唯一的 ,因此同一個 對應同一篇論文,也就對應同一個標題。
成立。
(1)(b)
不成立。
表四中 的資料有:
| startpage | endpage | journal | issue |
|---|---|---|---|
| 11 | 33 | TCOMP | 131 |
| 11 | 13 | TACM | 151 |
| 11 | 15 | TCOMP | 151 |
同一個 對應到不同的 ,因此:
不成立。
題目僅說一頁面中只會出現一篇論文內容,但不同期刊或不同期別可以各自有第 11 頁,所以單獨使用 不足以決定 。
(1)(c)
成立。
題目明確指出:
各期別之期刊出版都在單一年度。
因此,給定期刊名稱與期別,即可決定其出版年度:
成立。
例如:
雖然不同期刊可以有相同的期別,但加入 後即可區分。
(1)(d)
不成立。
表四中 Elliptic Cryp 對應到兩個不同的 :
| title | ID |
|---|---|
| Elliptic Cryp | 177 |
| Elliptic Cryp | 178 |
因此同一個 可對應不同的 :
不成立。
題目只保證 唯一,沒有保證論文標題唯一。
(1)(e)
成立。
同一個 代表同一篇論文,因此其發表資訊應相同。表四中 雖然出現兩次,但兩筆資料的下列欄位完全相同:
所以:
成立。
須注意, 不決定 ,因為同一篇論文可對應多個技術報告;但本選項沒有要求 。
(二)最小超級鍵判斷
解題方法
要成為超級鍵,屬性集合必須能唯一識別 Paper 關係中的完整 tuple,包括 。
判斷最小超級鍵分兩步:
- 先判斷該屬性集合是否能唯一識別每筆 tuple。
- 再檢查刪除任一屬性後是否仍能唯一識別 tuple。