假設你想設計一個討論區系統,該系統需要維護的資料包括會員
(Member)、討論版(Forum)、主題文章(Article),和回應文章
(Response)。資料需求如下:
? a.會員(Member):包括帳號(account)、密碼(passwd)、姓名(name)、
身分證字號(pId)和email。其中帳號和身分證字號均為唯一。
? b.討論版(Forum):包括版名(fName)和開版日期(startDate),其中
版名為唯一。此外,每一討論版必須剛好有一位版主(Owner),版主
為會員。
? c.主題文章(Article):包括主題(aTitle)、張貼時間(aTime)、標籤
(tags)和內容(content),其中標籤可以有多個。此外,每一篇主題
文章必須由一位會員張貼(Creates),且必須屬於某個討論版,其中沒
有任何屬性是唯一的,但張貼會員和張貼時間合起來是唯一的。
? d.回應文章(Response):包括張貼時間(rTime)和內容(content),一
篇回應文章必須是回應一篇主題文章,但一篇主題文章可有多篇回應文
章。此外,一位會員可以有多篇回應文章,所回應的主題文章和張貼人
也必須記載,張貼會員和張貼時間合起來是唯一的。
以下是一位同學所畫的實體關係圖(ERD):
(1) 請指出以上ERD 裡不符合資料需求的部分。(16 分)
(2) 請修正該ERD 以滿足所有的資料需求。
考慮以下的圖書館書籍流通系統資料庫綱目(database schema):
Book (callNo, isbn, title, subject)
//分類號,ISBN,書名,主題
Patron (pId, name, startDate)
//讀者編號,讀者姓名,開始日期
BorrowRecord (pId, callNo, borrowDate, returnDate)
//讀者編號,分類號,借閱日期,歸還日期
請按題意表達出以下查詢:
(1) 請找出「張三」(是一讀者姓名)所借過的所有書的分類號和書名,
請注意,一本書只能列出一次。
用關聯代數式(relational algebraic expression)表達。
用一個SQL 敘述表達。
(2) 請列出電腦類(即「subject = 'Computer'」)每一本書籍的ISBN、書
名和被借閱的次數。請用一個SQL 敘述表達。
(3) 對於每一位總借閱次數超過10(含)次的讀者,列出其讀者編號和2009
年的借閱總次數。
考慮以下的商品交易資料庫綱目(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}
(1) 請用以上函數相依推論出Product, Transaction, 和TransactionDetail 的
候選鍵(candidate keys),請注意必須用推論的方式來證明,否則不
給分。
(2) 以上資料庫綱目滿足第二正規式(2NF)嗎?滿足第三正規式(3NF)
嗎?若不滿足,請舉出並說明所有造成不滿足的函數相依。
考慮以下兩支資料庫交易(database transaction)程式:
假設資料庫裡的資料項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)
(1) 以上排程的執行結果為何?正確的排程執行結果應該是什麼?
(2) 請問兩階段鎖定法(two phase locking,簡稱2PL)會允許以上的排程
執行嗎?請解釋。
可觀看題目詳解,並提供模擬測驗!(免費會員無法觀看研究所試題解答)