110 高普考高考三級 資訊處理 資料庫應用 考古題詳解

110 年・高普考・高考三級・資訊處理
試題代碼 資料庫應用

第 一 題20 分

假設在某關聯式資料庫(Relational Database)中,資料庫管理者(Database Administrator, DBA)執行如下 SQL 指令,以定義 CUSTOMER 和 PURCHASE 兩個表格:

create table CUSTOMER (cid char(2), name varchar(10), city varchar(10), primary key(cid));

create table PURCHASE (cid char(2), mid char(2), amount integer, primary key (cid, mid), foreign key(cid) references CUSTOMER);

若使用者依序執行下列六個 SQL 指令:

指令一:insert into CUSTOMER values ('C1', 'John', 'Taipei');

指令二:insert into PURCHASE values ('C1', 'M1', 10);

指令三:insert into CUSTOMER values ('C1', 'Mary', 'Taichung');

指令四:insert into PURCHASE values ('C1', 'M2', 1);

指令五:update CUSTOMER set cid = 'C2' where cid = 'C1';

指令六:delete from PURCHASE where cid = 'C1';

請針對指令三至指令六此四個指令,分別說明其執行之後所產生的效果,並加以解釋之。舉例來說,若某指令可順利執行,請說明是哪些表格受到影響,並詳述更新後的表格內容。反之,則請說明是表格定義中的哪項限制,導致該指令無法順利更新表格內容。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查關聯式資料庫的**主鍵(Primary Key)與外鍵(Foreign Key)**限制,以及未指定參照動作時,更新或刪除資料對參照完整性的影響。

  • CUSTOMER 的主鍵是 cid,所以同一張表中不可有重複的 cid。
  • PURCHASE 的複合主鍵是 (cid, mid),所以這兩欄的組合不可重複。
  • PURCHASE.cid 是外鍵,參照 CUSTOMER.cid;每筆 PURCHASE 資料的 cid 都必須在 CUSTOMER 中存在。
  • 題目未指定 ON UPDATE CASCADE 或 ON DELETE CASCADE 等參照動作,因此以預設的限制行為判斷:若更新或刪除會破壞參照完整性,該操作不得完成。

解題方法

依序處理指令,並在每一步記錄目前兩表內容。指令三至指令六的結果,須以前面指令已執行後的資料狀態為基礎;若某指令失敗,該指令不會改變表格內容。

指令一、二先成功執行後,資料如下:

CUSTOMER

cidnamecity
C1JohnTaipei

PURCHASE

cidmidamount
C1M110

指令三:插入第二筆 cid = 'C1' 的客戶

insert into CUSTOMER values ('C1', 'Mary', 'Taichung');

結果:執行失敗。

CUSTOMER.cid 是主鍵,而表中已存在 cid = 'C1' 的 John,因此新增 Mary 會造成主鍵值重複,違反主鍵唯一性限制。兩表資料都不變。

執行後的表格

CUSTOMER 仍只有 (C1, John, Taipei);PURCHASE 仍只有 (C1, M1, 10)。

指令四:新增一筆購買資料

insert into PURCHASE values ('C1', 'M2', 1);

結果:執行成功。

複合主鍵 (C1, M2) 尚未出現,沒有違反 PURCHASE 的主鍵限制;且 C1 已存在於 CUSTOMER,所以外鍵也有效。只有 PURCHASE 表受到影響。

執行後的表格

CUSTOMER

cidnamecity
C1JohnTaipei
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題20 分

假設關聯式資料庫中定義三個表格,其中 CUSTOMER 表格記錄顧客基本資料,包含顧客編號(Cid)、姓名(Name)和所居住的城市(City);MERCHANDISE 表格記錄貨品基本資料,包含貨品編號(Mid)和價格(Price);PURCHASE 表格則為購買資料,記錄了某位顧客(Cid)於某日(Date)購買某個貨品(Mid)的數量(Amount)。

在這些表格的欄位中,除了價格和數量二者為數值型態的屬性,其餘皆為字串型態。此三個表格的綱要簡列如下,且每個表格的主鍵以底線標註:

CUSTOMER(\underline{Cid}, Name, City)

MERCHANDISE(\underline{Mid}, Price)

PURCHASE(\underline{Cid, Mid, Date}, Amount)

請根據以下兩個資訊需求,分別寫出對應的 SQL 查詢指令。注意每個小題皆各自對應到單一的 SQL 查詢句,但是可以使用子查詢句(Subquery)或類似功能的寫法。

(一) 請問所有住在臺北市的顧客,總共花了多少錢在購買物品上?(10 分)

(二) 試找出那些顧客購買貨品編號「M1」的總數量,超過編號「C2」顧客購買貨品編號「M1」的總數量,並輸出那些顧客的編號。(10 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題主要考查關聯式資料庫的多表連接、條件篩選、彙總函數 SUM、分組 GROUP BY,以及以子查詢比較彙總結果。

  • CUSTOMER 以 Cid 識別顧客,MERCHANDISE 以 Mid 識別貨品。
  • PURCHASE 的主鍵為 (Cid, Mid, Date),同一顧客可在不同日期購買同一貨品。
  • 每筆購買金額為「單價 × 數量」,即 Price * Amount。
  • PURCHASE 與其他表格的關聯條件分別為 Cid、Mid。連接時必須使用這些欄位,才能將購買紀錄對應到正確的顧客與貨品。

解題方法

(一)臺北市顧客購買物品的總花費

先由 CUSTOMER 找出居住城市為臺北市的顧客,再將其購買紀錄與貨品價格連接。每筆購買金額為 Price * Amount,最後用 SUM 加總。

SELECT SUM(M.Price * P.Amount) AS TotalCost
FROM CUSTOMER C
JOIN PURCHASE P ON C.Cid = P.Cid
JOIN MERCHANDISE M ON P.Mid = M.Mid
WHERE C.City = '臺北市';

查詢中不需要依顧客分組,因為題目要的是所有臺北市顧客合計的總花費。若要列出每位顧客各自的花費,才需要依 Cid 分組。

(二)購買 M1 總數量超過 C2 顧客的顧客編號

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題20 分

假設某公司欲建立一個關聯式資料庫系統,以管理內部員工使用公務車輛的狀況,該公司並限制一個員工在一天之內最多只能借用一部車輛。

假設表格定義為 UNIVERSAL(Tag, Year, ID, Title, Date),其內每一筆資料列(Tuple)記錄了某部車輛的車牌(Tag)和購買年份(Year)、使用該台車輛的員工編號(ID)和職稱(Title),以及使用的日期(Date)。

請針對此表格的 5 個屬性,列出三個合理且有意義(Non-Trivial)的函數相依式(Functional Dependency),並針對所列出的每一項式子,解釋其合理性或詳述其所代表的限制。

接著根據你所列出的函數相依式,分析此 UNIVERSAL 表格是否符合 BCNF 正規化格式(Boyce-Codd Normal Form)。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

函數相依(Functional Dependency, FD)X→YX\to Y 表示:在符合資料庫規則的每一種合法資料狀態中,只要兩筆資料在屬性集合 XX 上相同,其在 YY 上也必須相同。

BCNF(Boyce-Codd Normal Form)的判定條件是:對每一個非平凡函數相依 X→YX\to Y,決定項 XX 都必須是超級鍵。超級鍵是能唯一識別資料列的屬性集合;非平凡函數相依則是 YY 不包含於 XX。

本題須從題目給定的業務規則推導函數相依,再檢查每條相依的決定項是否為超級鍵。

解題方法

屬性為:

UNIVERSAL(Tag,Year,ID,Title,Date)UNIVERSAL(Tag, Year, ID, Title, Date)

題目提供兩項重要語意:

  1. 車牌 TagTag 用來識別車輛,因此同一車牌對應固定的購買年份 YearYear。
  2. 一名員工一天最多借用一部車,因此員工編號與日期的組合 (ID,Date)(ID, Date) 至多對應一個車牌 TagTag。

據此,可列出以下三個合理且有意義的非平凡函數相依:

1. Tag→YearTag\to Year

車牌識別特定車輛,而每部車輛有固定的購買年份。因此,同一個 TagTag 不會對應不同的 YearYear。

2. ID→TitleID\to Title

在公司員工資料的通常假設下,每位員工有一個職稱;同一員工編號不會對應不同職稱。

3. (ID,Date)→Tag(ID, Date)\to Tag

題目明確限制一名員工一天最多只能借用一部車。固定某位員工與某一天,該員工當日使用的車牌至多一個,因此 (ID,Date)(ID, Date) 決定 TagTag。

以上各式皆為非平凡函數相依,因為右側屬性不包含在左側屬性集合中。

BCNF 判定

檢查候選鍵與上述函數相依的決定項。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題20 分

資料庫系統中,經常使用「鎖」(Lock)的機制來進行交易處理(Transaction Processing)中的併行控制(Concurrency Control),而該機制允許某個資料項目(Data Item)被「共享鎖」(Shared Lock)或「排他鎖」(Exclusive Lock)鎖定。

請問這兩種不同鎖定模式,對一個資料項目的使用方式所造成的限制各自為何?

另外,資料項目可以小到一筆資料列(Tuple)或紀錄(Record),也可以大到涵蓋一整個表格或資料庫。請分析資料項目的大小對系統效能的影響為何?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考資料庫併行控制中的鎖定模式,以及鎖定粒度(locking granularity)對併行程度與系統負擔的影響。

  • 共享鎖(Shared Lock,S-lock):供讀取資料使用。多個交易可以同時對同一資料項目持有共享鎖;持有共享鎖期間,其他交易不得對該項目加排他鎖或修改資料。
  • 排他鎖(Exclusive Lock,X-lock):供修改資料使用。交易持有排他鎖時,其他交易不得再對該項目加共享鎖或排他鎖,因此不能讀取或修改該項目。

解題方法

先依鎖的用途判斷資料項目能否被讀取或修改,再比較鎖定範圍大小對併行控制的影響:

鎖定模式持鎖交易可做的事其他交易對同一項目的限制
共享鎖 S讀取可同時持有 S 鎖並讀取;不得取得 X 鎖或修改
排他鎖 X讀取、修改不得取得 S 鎖或 X 鎖,也不得讀取或修改

共享鎖之所以允許多個交易並存,是因為讀取本身不改變資料;排他鎖則必須獨占,才能避免其他交易在資料更新期間讀取或覆寫同一項目。

鎖定粒度與系統效能

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 五 題20 分

假設在某個 MongoDB 的資料庫中,有個 Collection 叫做「student」,其中每個物件表示學生的編號(_id)、姓名(name,包含名(first)和姓(last))以及就讀的學系名稱(department)。

一個範例物件以 JSON 格式表示如下:

{ "_id": "1", "name": { "first": "Ted", "last": "Codd" }, "department": "CS" }

請以 Mongo 語法,依序寫出符合下述要求的指令:

(一) 找出姓為「Codd」的學生,並限定只輸出第一位。(10 分)

(二) 刪除所有就讀「CS」系的學生資料。(10 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考 MongoDB 的文件查詢與刪除:

  • find 用查詢條件篩選文件。
  • limit(1) 限制查詢結果最多一筆。
  • 巢狀文件的欄位可用點記法指定,例如 "name.last" 表示 name 文件中的 last 欄位。
  • deleteMany 刪除所有符合條件的文件。

解題方法

(一)找出姓為 Codd 的學生,並限定只輸出第一位

姓氏位於巢狀欄位 name.last,因此用點記法設定查詢條件,再以 limit(1) 限制結果筆數:

db.student.find({ "name.last": "Codd" }).limit(1)

此指令會回傳姓氏為 Codd 的學生文件,最多一筆。若有多筆符合資料,未指定排序條件時,MongoDB 不保證哪一筆會被視為「第一位」。

(二)刪除所有就讀 CS 系的學生資料

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題