108 高普考高考三級 資訊處理 資料庫應用 考古題詳解
第 一 題20 分
資料模式(Data Model)很多,就其特性大致可以歸類為三類:高階(High-Level,或觀念(Conceptual))資料模式、低階(Low-Level,或實體(Physical))資料模式、表示(Representational,或實作(Implementation))資料模式。
請分別說明這三類資料模式為何?並為每一類資料模式各舉至少 2 個資料模式的例子。
登入後即可作答並保存紀錄。
核心觀念
本題考查資料庫資料模式依抽象程度與呈現方式的分類。三類模式的關鍵差異在於:描述的是使用者關心的資料與關係、資料如何在資料庫中實作,或資料如何實際儲存於電腦中。
解題方法
依照模式的抽象層次,由高至低整理:
- 高階(觀念)資料模式:描述資料的意義、資料間的關係及限制,著重使用者與應用領域的觀點。
- 表示(實作)資料模式:描述資料庫管理系統支援的資料結構與操作方式,能表達資料及其關係,但不處理最底層的儲存細節。
- 低階(實體)資料模式:描述資料在電腦中的實際儲存方式,包括檔案組織、索引與存取路徑。
三類資料模式與例子
一、高階(High-Level/Conceptual)資料模式
以貼近使用者理解的方式描述資料,包含實體、屬性、關係及限制條件;通常不涉及資料如何配置到磁碟或記憶體。
例子:
- 實體-關係模式(Entity-Relationship Model, ER Model):以實體、屬性及關係描述資料需求。
- 物件導向資料模式(Object-Oriented Data Model):以物件、類別、屬性、方法及繼承等概念描述資料。
二、表示(Representational/Implementation)資料模式
介於觀念描述與實體儲存之間,以資料庫管理系統可支援的結構表示資料,讓資料能被組織、查詢及更新;通常不描述每筆資料在磁碟上的實際位置或位元組排列。
例子:
第 二 題40 分
某出版社要用關聯式資料模式建立可記錄其出版書籍的資料庫,設計了包括可記錄書籍的資料表(Table)BOOK 及記錄作者的資料表 AUTHOR。
BOOK 中包含 BookId(書籍編號)、Title(書名)、PubDate(出版日期)、Category(分類)等屬性(Attribute)欄位,且 BookId 是其主鍵(Primary Key,PK);AUTHOR 中包含 AuthId(作者編號)、Name(姓名)、Birthday(出生年月日)、Tel(電話)等屬性欄位,且 AuthId 是其主鍵。
即資料庫中包含下列兩個資料表:
請依序回答下列問題:
(一)如果每本書可以有好幾位作者,每一位作者也可以出版好幾本書,請對前項資料庫設計進行增修,使得出版社的資料庫可記錄每本書的作者,也可記錄每個作者所出版的書。作答時可仿效題目的描述方式說明您的設計,注意必須以英文命名明確表達資料表名稱及屬性欄位名稱,並明確指出主鍵及外來鍵(Foreign Key,FK),外來鍵並須指出與其對應的主鍵。(10 分)
(二)承續並運用前一子題之資料庫增修,請寫出可查得屬於「資料庫」分類(Category)的所有書籍之 SQL 命令,此命令必須列出書籍的 BookId、Title 及作者人數,並依 BookId 由小而大依序列出。(15 分)
(三)請運用子題(一)之資料庫增修寫出可查得曾經與名字叫「張山峰」的作者共同著作過的作者之 SQL 命令,列出其姓名及電話。(15 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查多對多關係的關聯式資料庫設計,以及以 SQL 進行分組統計與自我連接查詢。
BOOK 與 AUTHOR 之間是多對多關係:一本書可以有多位作者,一位作者也可以出版多本書。關聯式資料庫通常新增一張中介資料表,將每組「書籍—作者」對應記錄為一筆資料。中介表以兩端資料表的主鍵作為外來鍵,並以兩欄的組合作為主鍵,避免同一位作者與同一本書的配對重複。
解題方法
(一)增修資料庫設計
保留原有 BOOK 與 AUTHOR,新增中介資料表 BOOK_AUTHOR:
-
BOOK(BookId, Title, PubDate, Category) PK:BookId
-
AUTHOR(AuthId, Name, Birthday, Tel) PK:AuthId
-
BOOK_AUTHOR(BookId, AuthId) PK:(BookId, AuthId) FK:BookId 對應 BOOK(BookId) FK:AuthId 對應 AUTHOR(AuthId)
BOOK_AUTHOR 的每一筆資料表示一位作者參與一本書。複合主鍵可防止同一作者與同一本書的配對被重複登錄;兩個外來鍵則確保配對所指向的書籍與作者均存在。
(二)查詢「資料庫」分類書籍及作者人數
以 BOOK 為查詢主體,連接 BOOK_AUTHOR,逐書分組,再以 COUNT 計算該書對應的作者筆數。為保留尚未登錄作者的書籍,使用 LEFT JOIN;此時應計算非空的 AuthId,避免將沒有作者的書籍誤算為一位作者。
SELECT B.BookId,
B.Title,
COUNT(BA.AuthId) AS AuthorCount
FROM BOOK AS B
LEFT JOIN BOOK_AUTHOR AS BA
ON B.BookId = BA.BookId
WHERE B.Category = '資料庫'
GROUP BY B.BookId, B.Title
ORDER BY B.BookId ASC;
WHERE 先篩選分類為「資料庫」的書籍;GROUP BY 將同一本書的連接結果歸為一組;COUNT(BA.AuthId) 計算各組的作者數;最後依 BookId 遞增排列。
第 三 題20 分
某企業要建立自己的電子商務平台銷售自家商品,分析統整所有商品後,將商品分為若干大分類,每一大分類又分為若干次分類,每一次分類又分為若干細分類。
假設此分類系統非常理想,每一個細分類號都是唯一的,且不會有同一個細分類同屬於不同次分類的情形;每一個次分類號也都唯一,且不會有同一個次分類同屬於不同大分類的情形;一個商品也只會歸類為單一細分類,不會同時歸類到不同細分類。
依據這樣的分類系統,該公司的資料庫設計師設計出關聯式資料庫的資料表 PRODUCT 來儲存所有商品的資料,其中包含 MajorCate(大分類號)、SubCate(次分類號)、FineCate(細分類號)、SeqNo(商品編號)、ProdName(商品名稱)、Price(單價)。
任何一個商品的 MajorCate、SubCate、FineCate 所代表的該商品的各級分類號都是明確的。SeqNo 是商品所屬細分類之流水號,在同一細分類中不會重複,但在不同細分類間會有相同的 SeqNo。並以 為主鍵。
也就是資料表 PRODUCT 為:
請檢視此一設計,指出其設計錯誤或不良之處,並在不更動屬性設計的前提下修正之。(20 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查函數相依、候選鍵、正規化與更新異常。若關係 中的屬性集合 能唯一決定屬性 ,記為 。
依題意:
- 每個細分類號只屬於一個次分類,且細分類號唯一:。
- 每個次分類號只屬於一個大分類,且次分類號唯一:。
- 每個商品只屬於一個細分類;商品編號在同一細分類內不重複: 可唯一識別商品。
- 商品名稱與單價由商品識別資料決定:。
由遞移性可得 。因此,商品所屬的大分類與次分類可由細分類號推得,不必在每筆商品資料中重複儲存。
解題方法
以題目給定的主鍵 檢查函數相依:
- 已能唯一識別商品,並決定 與 。
- 又決定 與 。
- 所以商品表中存在非主鍵屬性由主鍵的真子集決定的情形:
- 而且有遞移相依:
這使分類資料在多筆商品中重複出現;若同一細分類有多項商品,每筆都要重複存放其大分類號與次分類號。新增、修改或刪除商品時,可能造成分類資料不一致或遺失,屬於不良設計。
修正設計
在不更動屬性的前提下,將原表拆成下列三個關聯:
第 四 題20 分
兩階段鎖定(Two-Phase Locking)技術可以用來做並行控制(Concurrency Control),請詳細說明符合兩階段鎖定協定的交易應遵循的規範為何?
時程(Schedule)是指多個交易(Transaction)並行(Concurrency)執行時,各交易內的操作(Operation)間的執行順序。請以此觀點說明:若所有交易都遵循兩階段鎖定協定撰寫,則這些交易並行執行時,時程必定是什麼時程?並說明為何遵循這種時程執行可以達到並行控制的目的。(20 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查兩階段鎖定(Two-Phase Locking,2PL)協定的規範,以及它如何保證並行時程具有衝突可序列化性。
交易對資料項目執行讀取前,須取得共享鎖(Shared Lock,);執行寫入前,須取得排他鎖(Exclusive Lock,)。共享鎖可與其他共享鎖並存;排他鎖與任何其他鎖皆不相容。
解題方法:說明 2PL 規範
符合 2PL 的交易,其鎖定操作分成兩個階段:
- 成長階段(Growing Phase):交易可以取得新鎖,也可以將共享鎖升級為排他鎖;不得釋放任何鎖。
- 縮減階段(Shrinking Phase):交易可以釋放鎖,也可以將排他鎖降級為共享鎖;不得再取得新鎖,也不得升級鎖。
兩階段的分界點稱為鎖點(lock point),即交易取得最後一把鎖的時刻。交易在鎖點前處於成長階段,鎖點後進入縮減階段。關鍵限制是:一旦釋放鎖,就不能再取得新的鎖。
時程性質與理由
若所有交易都遵循 2PL,並行執行所形成的時程必定是衝突可序列化時程(conflict-serializable schedule)。也就是說,該時程與某個依序執行各交易的序列時程衝突等價。
理由如下:
- 建立時程的優先圖(precedence graph):每個交易是一個節點;