108 地方特考三等 資訊處理 資料庫應用 考古題詳解
第 一 題25 分
假設我們要設計某物流公司的資料庫,其中某事實是記錄其司機(Driver)每天使用某輛卡車(Truck)負責某趟運送(Delivery)。每趟運送剛好用到一部卡車;但出車時,有時會有雙司機出勤,輪流駕駛。
司機有編號(ID)、姓名(Name)、薪水(Salary)的資料;卡車有牌照號碼(License_No)、品牌(Make)、款式(Model)、噸數(Tonnage)的資料;運送有運送編號(D_Number)、日期(Date)、送達地址(Address)、送達時間(Time)、載送內容(Content)的資料。
圖一為實體關係圖(Entity-Relationship Diagram)。
對所用符號的約略說明:其中每一實體鄰近某關係間均有一個對應比率(min, max),代表該實體參與該關係之 min(至少)、max(至多)次數, 代表沒有限制。屬性劃實底線者為 Primary Key(主鍵)。
請暫時不考慮其他實體、屬性,並假設所有對應比率均為正確反映該企業實況。欲記錄上述事實:
(一) 請說明圖一的設計有何問題。(5 分)
(二) 可否將圖一改為只有司機(Driver)與卡車(Truck)兩個實體,而將運送(Delivery)放在其中、當成關係?這樣的設計有何問題?(8 分)
(三) 請提出改進版本。請注意:你的改進版本必須同時滿足「提供完整(Complete)的資訊,且無多餘的(Redundant)關係」的要求。(12 分)
圖一。
登入後即可作答並保存紀錄。
核心觀念
本題考查 ER 模型中的實體與屬性歸屬、關係基數(min,max),以及如何用關係記錄「某位司機參與某趟運送,而該趟運送使用某部卡車」。
「運送」有自己的運送編號、日期、地址、時間與載送內容,是可被獨立識別的事件,應建模為實體。關係基數則用來表達一個實體至少、至多參與幾次該關係。
解題方法
先核對各實體的屬性是否符合題目敘述,再檢查關係是否能把每趟運送、參與司機與使用卡車連結起來。最後檢查改良設計是否能保存所有事實,並避免重複記錄可由其他關係推得的資訊。
(一)圖一的設計問題
圖一把兩組屬性放錯實體:
Truck連接了D_Number、Date、Address、Time、Content,這些是運送資料,應屬於Delivery。Delivery連接了License_No、Make、Model、Tonnage,這些是卡車資料,應屬於Truck。
此外,圖中的 Drive 只記錄司機與卡車的關係,沒有指出司機參與了哪一趟運送。即使能知道某司機曾開某卡車,也無法據此確認他負責哪個日期、目的地或運送編號的工作;司機與運送的對應資訊不完整。
圖中的 Is_for 表示每趟運送恰好使用一部卡車,而一部卡車可對應零趟或多趟運送,這與題目所述一致。
(二)把 Delivery 當成 Driver 與 Truck 之間的關係
不適合。二元關係的一個關係實例只連結一位司機與一部卡車,無法直接表達「同一趟運送有兩位司機共同出勤」。若把雙司機的同一趟運送拆成兩個關係實例,就會重複記錄相同的運送編號、日期、地址、時間與載送內容,也難以確保兩筆資料確實屬於同一趟運送。
此外,同一位司機與同一部卡車可能在不同日期執行多趟運送;只用司機與卡車這一對端點表示關係,無法妥善識別每一趟獨立的運送事件。Delivery 有自己的 D_Number 及事件屬性,應保留為實體。
(三)改進版本
保留三個實體,並將屬性歸回正確位置:
第 二 題25 分
假設關聯式資料庫包含下列三個表格:
Student(SID, Name, Address, Phone, Major)代表學生學號、姓名、地址、電話、主修。
Course(CNo, CName, Credit, Dept, Instructor)代表課程編號、名稱、學分數、開課系所、授課教師。
Grade(SNo, CNo, Score)代表 SNo 的學號學生修習 CNo 的課程得分(0–100 分)。
「主修」、「開課系所」之內容值可為 MIS、CS、Business 等,分別代表資管系、資科系、企管系等。
(一) 為教師「王大維」依課程編號、名稱,列出其授課的每門課之修課人數。(8 分)
(二) 找出其所修的每科成績均至少為 90 分之資管系學生姓名。(8 分)
(三) 找出在企管系所開所有課程中沒有一科及格過之學生姓名及其主修。(註:及格分數為 60 分。)(9 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的多表連接、分組彙總,以及「所有」與「沒有任何」這兩種條件的表達。
Student.SID與Grade.SNo對應,表示學生修課成績。Course.CNo與Grade.CNo對應,表示成績所屬課程。COUNT可計算每門課的修課人數;GROUP BY將資料按課程分組。- 「每科均符合條件」可用
NOT EXISTS排除任何一科不符合條件者。 - 「沒有一科及格」可用
NOT EXISTS排除任何一筆及格修課紀錄。
以下假設 Grade 中每筆資料代表一位學生修習一門課的成績;若同一學生可能重複出現同一課程紀錄,計算人數時應改用 COUNT(DISTINCT G.SNo)。
解題方法
(一)列出王大維授課各課程的修課人數
先從 Course 篩出授課教師為王大維的課程,再連接 Grade,依課程編號與課程名稱分組,計算每組成績紀錄數。
SELECT C.CNo, C.CName, COUNT(G.SNo) AS 修課人數
FROM Course AS C
LEFT JOIN Grade AS G
ON C.CNo = G.CNo
WHERE C.Instructor = '王大維'
GROUP BY C.CNo, C.CName;
採用 LEFT JOIN 可保留尚無學生修課的課程,此時 COUNT(G.SNo) 為 0。若只列出至少有一位學生修課的課程,可改用 INNER JOIN。
(二)找出每科成績均至少 90 分的資管系學生姓名
「每科均至少 90 分」表示不存在任何一筆該生的成績低於 90 分。因此以 NOT EXISTS 檢查是否有不符合條件的修課紀錄,並限制學生主修為 MIS。
第 三 題20 分
假設某資料庫管理系統採用時間戳記(Timestamp)來管理並行控制(Concurrency Control),它採用的不是基本的時間戳記排序,而是修改版的 Thomas 編寫規則(Write Rule)。
假設某交易 的時間戳記是 10010,請問下列情況,資料庫管理系統會如何處理?(每小題 5 分,共 20 分。)
(一) 欲寫某項目 時,得知 已有寫的時間戳記 是 10015。
(二) 欲寫某項目 時,得知 已有讀的時間戳記 是 10012。
(三) 欲讀某項目 時,得知 已有寫的時間戳記 是 10020。
(四) 欲讀某項目 時,得知 已有寫的時間戳記 是 10005。
登入後即可作答並保存紀錄。
核心觀念
本題考「時間戳記排序」與修改版的 Thomas 編寫規則(Thomas Write Rule)。每筆資料項目 維護兩個時間戳記:
- :成功讀取 的交易中,最大的交易時間戳記。
- :成功寫入 的交易中,最大的交易時間戳記。
設目前交易 的時間戳記為 。
讀取規則:
- 若 ,表示較新的交易已寫入 ;為維持時間戳記順序,拒絕讀取並回復 。
- 否則允許讀取,並令 。
修改版 Thomas 編寫規則的寫入判斷:
- 若 ,拒絕寫入並回復 。
- 若 ,此次寫入已過時,忽略該寫入,不必回復 。
- 其餘情況允許寫入,並令 。
基本時間戳記排序會因第二種情況回復交易;Thomas 編寫規則則將該寫入視為過時操作而忽略。
解題方法
逐小題先判斷操作是讀取還是寫入,再比較題目給的時間戳記與交易時間戳記 。寫入時需依序檢查 與 ;讀取時則檢查 。
各小題分析
(一)欲寫入,且
因為
第 四 題30 分
假設某關聯式資料庫有下列表格 ,目前僅有的四筆資料分別是 。沒有人告訴我們各屬性的相互關係,不過,從我們觀察到資料,可以確認有些功能相依是不存在的,還有些功能相依是有可能存在。請說明哪些是可確認不存在?哪些是有可能存在?答案必須以你觀察到的現象為理由來說明,只憑猜測是不計分。
(一)(18 分)
判斷下列功能相依是否可確認不存在,或有可能存在:
資料如下:
(二)(12 分)
假設已知下列功能相依,請利用功能相依推演規則,也就是 Closure 概念,找出所有 的候選鍵(Candidate Key)。注意:只憑猜測,沒有使用功能相依的推演過程,不計分。
登入後即可作答並保存紀錄。
核心觀念
功能相依 成立的意思是:在關係 的所有資料列中,凡是 值相同的兩列,其 值也必須相同。若找到兩列的 值相同、 值不同,就能確認該功能相依不存在。
題目只提供目前四筆資料,因此要區分:
- 可確認不存在:資料中已有違反功能相依的兩列。
- 有可能存在:目前資料沒有違反情形;這只能表示與觀察到的資料相容,不能證明它在所有可能資料中都成立。
求候選鍵時,使用屬性閉包 :反覆套用已知功能相依,直到沒有新屬性加入。若 包含關係中的所有屬性, 是超鍵;若其任何真子集都不是超鍵, 就是候選鍵。
(一)判斷功能相依
判斷時,分別比較決定項相同的資料列,再看依存項是否不同。
1.
第 與 列的 都是 ,但 值分別為 與 。
因此,同一組 對應到不同的 值,違反功能相依。
結論:可確認不存在。
2.
四筆資料的 組合依序為:
沒有兩列的 相同,因此目前資料中沒有出現「決定項相同、依存項不同」的反例。
結論:有可能存在。 這表示現有資料不排除此功能相依,並非已證明它對所有可能資料都成立。
3.
第 與 列的 都是 ,但 值分別為 與 。
因此,同一組 對應到不同的 值,違反功能相依。
結論:可確認不存在。
(二)找出所有候選鍵
關係 的屬性集合為 ,已知功能相依為: