98 年公務人員高等考試三級考試試題 代號:35670
類 科: 資訊處理 科 目: 資料庫應用
考試時間: 2 小時 座號:
※注意: 禁止使用電子計算器。
不必抄題,作答時請將試題題號及答案依照順序寫在試卷上,於本試題上作答者,不予計分。
(請接背面)
全一張
(正面)
一、假設你想設計一個討論區系統,該系統需要維護的資料包括會員(Member)、討論 版(Forum)、主題文章(Article),和回應文章(Response)。資料需求如下:
會員(Member):包括帳號(account)、密碼(passwd)、姓名(name)、身分證字號(pId)和 email。
其中帳號和身分證字號均為唯一。
討論版(Forum):包括版名(fName)和開版日期(startDate),其中版名為唯一。此外,每一討論版必須 剛好有一位版主(Owner),版主為會員。
主題文章(Article):包括主題(aTitle)、張貼時間(aTime)、標籤(tags)和內容(content),其中標籤 可以有多個。此外,每一篇主題文章必須由一位會員張貼(Creates),且必須屬於某個討論版,其中沒有任 何屬性是唯一的,但張貼會員和張貼時間合起來是唯一的。
回應文章(Response):包括張貼時間(rTime)和內容(content),一篇回應文章必須是回應一篇主題文章,
但一篇主題文章可有多篇回應文章。此外,一位會員可以有多篇回應文章,所回應的主題文章和張貼人也必 須記載,張貼會員和張貼時間合起來是唯一的。
以下是一位同學所畫的實體關係圖(ERD):
M N
N
N 1 1
1 1
Member Response
Article Forum
Posts
Creates
Has
account passwd
name email
fName
startDate owner aTitle aTime
tags content
Responds
content rTime
請指出以上 ERD 裡不符合資料需求的部分。(16 分)
請修正該 ERD 以滿足所有的資料需求。(14 分)
二、考慮以下的圖書館書籍流通系統資料庫綱目(database schema):
Book(callNo, isbn, title, subject) //分類號,ISBN,書名,主題 Patron(pId, name, startDate)
// 讀者編號,讀者姓名,開始日期
BorrowRecord(pId, callNo, borrowDate, returnDate)
//讀者編號,分類號,借閱日期,歸還日期
請按題意表達出以下查詢:
請找出「張三」(是一讀者姓名)所借過的所有書的分類號和書名,請注意,一 本書只能列出一次。
用關聯代數式(relational algebraic expression)表達。(7 分)
用一個 SQL 敘述表達。(7 分)
請列出電腦類(即「subject = 'Computer'」)每一本書籍的 ISBN、書名和被借閱 的次數。請用一個 SQL 敘述表達。(8 分)
對於每一位總借閱次數超過 10(含)次的讀者,列出其讀者編號和 2009 年的借
閱總次數。(8 分)
98 年公務人員高等考試三級考試試題 代號:35670
類 科: 資訊處理 科 目: 資料庫應用
全一張
(背面)
三、考慮以下的商品交易資料庫綱目(database schema):
Product(pId, name, type, supplierId, supplierName)
//商品編號,商品名稱,商品種類,供應商編號,供應商名稱 Transaction(tId, date, payment)
//交易編號,交易日期,付款方式
TransactionDetail(tId, pId, amount, price, productDesc) // 交易編號,商品編號,商品數量,商品單價,商品敘述
此外,並有以下的函數相依(functional dependency):
{pId}→{name, type, supplierId}
{supplierId}→{supplierName}
{tId}→{date, payment}
{tId, pId}→{amount, price}
{pId}→{productDesc}
請用以上函數相依推論出 Product, Transaction, 和 TransactionDetail 的候選鍵
(candidate keys),請注意必須用推論的方式來證明,否則不給分。(10 分)
以上資料庫綱目滿足第二正規式(2NF)嗎?滿足第三正規式(3NF)嗎?若不 滿足,請舉出並說明所有造成不滿足的函數相依。(15 分)
四、考慮以下兩支資料庫交易(database transaction)程式:
T1:
read(X, a)
//將資料庫裡的資料項 X 寫到變數 a a = a + 100
write(a, X)
//將變數 a 的值寫到資料庫裡的資料項 X commit(T1)
T2:
read(X, b)
//將資料庫裡的資料項 X 寫到變數 b b = b - 100
write(b, X)
//將變數 b 的值寫到資料庫裡的資料項 X commit(T2)
假設資料庫裡的資料項 X 之初值為 100,考慮以下排程(schedule):
T1:read(X, a) T2:read(X, b) T2:b = b – 100 T1:a = a + 100 T2:write(b, X) commit(T2) T1:write(a, X) commit(T1)