申論 1假設你想設計一個討論區系統,該系統需要維護的資料包括會員(Member)、討論版(Forum)、主題文章(Article),和回應文章(Response)。資料需求如下:z 會員(Member):包括帳號(account)、密碼(passwd)、姓名(name)、身分證字號(pId)和email。其中帳號和身分證字號均為唯一。z 討論版(Forum):包括版名(fName)和開版日期(startDate),其中版名為唯一。此外,每一討論版必須剛好有一位版主(Owner),版主為會員。z 主題文章(Article):包括主題(aTitle)、張貼時間(aTime)、標籤(tags)和內容(content),其中標籤可以有多個。此外,每一篇主題文章必須由一位會員張貼(Creates),且必須屬於某個討論版,其中沒有任何屬性是唯一的,但張貼會員和張貼時間合起來是唯一的。z 回應文章(Response):包括張貼時間(rTime)和內容(content),一篇回應文章必須是回應一篇主題文章,但一篇主題文章可有多篇回應文章。此外,一位會員可以有多篇回應文章,所回應的主題文章和張貼人也必須記載,張貼會員和張貼時間合起來是唯一的。以下是一位同學所畫的實體關係圖(ERD):rTimeaccount passwdMemberPostsResponse contentnameemail 1CreatesRespondsNNcontentfName ForumHasArticleM NtagsstartDate owneraTitleaTime㈠請指出以上ERD 裡不符合資料需求的部分。(16 分)㈡請修正該ERD 以滿足所有的資料需求。(14 分)
本卷皆為申論題,點「看答案與解析」查看擬答。
弱點分析
未作答的題目不計分。看我的紀錄
申論 2考慮以下的圖書館書籍流通系統資料庫綱目(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 分)類 科: 資訊處理科 目: 資料庫應用
申論 3考慮以下的商品交易資料庫綱目(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 分)
申論 4考慮以下兩支資料庫交易(database transaction)程式:T1: T2:read(X, a) read(X, b)//將資料庫裡的資料項X 寫到變數a //將資料庫裡的資料項X 寫到變數ba = a + 100 b = b - 100write(a, X) write(b, X)//將變數a 的值寫到資料庫裡的資料項X //將變數b 的值寫到資料庫裡的資料項Xcommit(T1) commit(T2)假設資料庫裡的資料項X 之初值為100,考慮以下排程(schedule):T1:read(X, a)T2:read(X, b)T2:b = b – 100T1:a = a + 100T2:write(b, X)commit(T2)T1:write(a, X)commit(T1)㈠以上排程的執行結果為何?正確的排程執行結果應該是什麼?(7 分)㈡請問兩階段鎖定法(two phase locking, 簡稱2PL)會允許以上的排程執行嗎?請解釋。(8 分)