HKDSE · 答案詳解與評分準則

2023 DSE 資訊及通訊科技 答案詳解與評分準則

Thinka 2023 文憑試模擬試卷 — 資訊及通訊科技

125 210 分鐘2023
此為 Thinka 原創練習卷,按該年文憑試的結構與難度設計,並非香港考評局試卷,亦非其複製本。

卷一 甲部 (MCQ)

回答全部40題多項選擇題。所有題目分數相同。
40 題目 · 40
題目 1 · MCQ
1
設 \(A\) 和 \(B\) 為兩個以二補碼表示的 8 位元有符號整數,其中 \(A = 01011011_2\) 且 \(B = 10100100_2\)。以下哪項關於運算 \(A + B\) 的描述是正確的? (1) 結果是負數。 (2) 沒有發生溢位。 (3) 結果的十六進制表示為 \(\text{FF}_{16}\)。
  1. A.僅 (1)
  2. B.僅 (1) 及 (2)
  3. C.僅 (2) 及 (3)
  4. D.(1)、(2) 及 (3)

答案

D

解題

\(A = 01011011_2 = 91_{10}\)。\(B = 10100100_2\),其二補碼為 \(01011100_2 = 92_{10}\),因此 \(B = -92_{10}\)。兩者相加 \(A + B = 91 + (-92) = -1_{10}\)。 (1) \(-1_{10}\) 是負數,因此 (1) 正確。 (2) 由於正數與負數相加,絕不會發生溢位,因此 (2) 正確。 (3) \(-1_{10}\) 的 8 位元二進制為 \(11111111_2\),對應十六進制為 \(\text{FF}_{16}\),因此 (3) 正確。故 (1)、(2) 及 (3) 皆正確。

評分準則

答對 D 得 1 分。不設部分分數。
題目 2 · MCQ
1
某主機的 IP 地址為 192.168.10.45,子網遮罩為 255.255.255.224。以下哪項是該主機所屬的網絡地址(子網地址)?
  1. A.192.168.10.0
  2. B.192.168.10.32
  3. C.192.168.10.45
  4. D.192.168.10.63

答案

B

解題

若要找出網絡地址,需將 IP 地址與子網遮罩進行按位與(AND)運算。IP 地址的第四個八位位組為 45(二進制為 00101101)。子網遮罩的第四個八位位組為 224(二進制為 11100000)。進行按位與運算:00101101 AND 11100000 = 00100000,即十進制的 32。因此,網絡地址為 192.168.10.32。

評分準則

答對 B 得 1 分。不設部分分數。
題目 3 · MCQ
1
考慮一個包含兩個數據表的文件資料庫:Student(StudentID, Name, Class),其中 StudentID 為主鍵;以及 Enrollment(StudentID, CourseID, EnrollDate),其中 (StudentID, CourseID) 為複合主鍵,且 StudentID 為參照 Student(StudentID) 的外鍵。以下哪項操作不會違反任何完整性約束?
  1. A.在 Enrollment 中插入一條記錄,其 StudentID 的值在 Student 中並不存在。
  2. B.從 Student 中刪除一條記錄,其 StudentID 目前正被 Enrollment 參照。
  3. C.在 Enrollment 中插入一條記錄,其中 StudentID 的值為空值(null)。
  4. D.在 Student 中插入一條記錄,其 StudentID 的值在 Student 中目前並不存在。

答案

D

解題

選項 A 違反了參照完整性,因為 Enrollment 中的外鍵 StudentID 必須指向 Student 中已存在的主鍵。選項 B 在 Enrollment 中存在匹配外鍵時會違反參照完整性(除非配置了級聯刪除,否則默認不允許)。選項 C 違反了實體完整性,因為 StudentID 是 Enrollment 複合主鍵的一部分,主鍵的任何部分都不能為空值(null)。選項 D 是在主表 Student 中插入具有唯一主鍵的新記錄,這不會違反任何完整性約束。

評分準則

答對 D 得 1 分。不設部分分數。
題目 4 · MCQ
1
數據庫表 Sales 包含數據行 SaleID、ProductID、Region 和 Amount。以下 SQL 查詢的輸出是什麼? SELECT Region, COUNT(SaleID) FROM Sales GROUP BY Region HAVING AVG(Amount) > 1100。 [Sales 數據:(1, 'P01', 'North', 1500), (2, 'P02', 'South', 2000), (3, 'P01', 'South', 1200), (4, 'P03', 'North', 800), (5, 'P02', 'North', 1000), (6, 'P01', 'North', 500)]
  1. A.Region: South, COUNT(SaleID): 2
  2. B.Region: North, COUNT(SaleID): 4
  3. C.Region: North, COUNT(SaleID): 4; Region: South, COUNT(SaleID): 2
  4. D.沒有返回任何記錄

答案

A

解題

首先,按 Region(地區)分組:North(北部)有 4 條記錄,金額分別為 1500、800、1000、500。其平均值(AVG)為 (1500+800+1000+500)/4 = 3800/4 = 950。South(南部)有 2 條記錄,金額分別為 2000、1200。其平均值為 (2000+1200)/2 = 3200/2 = 1600。HAVING 子句會篩選掉 AVG(Amount) <= 1100 的分組。因此,North 被排除(950 <= 1100),僅保留 South(1600 > 1100)。查詢返回該組的 Region(South)和記錄總數(2)。

評分準則

答對 A 得 1 分。不設部分分數。
題目 5 · MCQ
1
某關係數據庫關係 R(A, B, C, D) 的複合主鍵為 (A, B)。以下哪項函數依賴會違反第二範式 (2NF)?
  1. A.(A, B) -> C
  2. B.C -> D
  3. C.A -> D
  4. D.(A, B) -> D

答案

C

解題

要使關係達到 2NF,它必須先達到 1NF,且每個非主屬性都必須完全函數依賴於整個主鍵。如果 A -> D,則非主屬性 D 僅依賴於 A,而 A 是主鍵 (A, B) 的真子集。這屬於部分依賴,違反了 2NF 的要求。

評分準則

答對 C 得 1 分。不設部分分數。
題目 6 · MCQ
1
考慮以下虛擬碼:A 是一個索引從 1 開始、包含 5 個整數的陣列:[4, 7, 2, 9, 5]。For i from 1 to 4 do: For j from 1 to 5 - i do: If A[j] > A[j+1] then Swap A[j] and A[j+1]。當外層循環完成第一次迭代(即 i = 1 時),陣列 A 的內容是什麼?
  1. A.[2, 4, 5, 7, 9]
  2. B.[4, 2, 7, 5, 9]
  3. C.[4, 2, 5, 7, 9]
  4. D.[2, 7, 4, 5, 9]

答案

B

解題

當 i = 1 時,內層循環變量 j 的範圍是 1 到 4。 1) j = 1:比較 A[1] (4) 與 A[2] (7)。不交換。陣列:[4, 7, 2, 9, 5]。 2) j = 2:比較 A[2] (7) 與 A[3] (2)。因 7 > 2,進行交換。陣列變為:[4, 2, 7, 9, 5]。 3) j = 3:比較 A[3] (7) 與 A[4] (9)。不交換。陣列:[4, 2, 7, 9, 5]。 4) j = 4:比較 A[4] (9) 與 A[5] (5)。因 9 > 5,進行交換。陣列變為:[4, 2, 7, 5, 9]。這是第一次外層循環結束後的最終狀態。

評分準則

答對 B 得 1 分。不設部分分數。
題目 7 · MCQ
1
在機器週期的指令提取階段,以下哪項正確描述了程式計數器 (PC) 和記憶體地址暫存器 (MAR) 的角色?
  1. A.PC 存放下一條待提取指令的地址,而 MAR 存放目前正在讀取的記憶體地址。
  2. B.MAR 存放從記憶體提取的數據,而 PC 存放已解碼的指令。
  3. C.PC 存放目前正在讀取的記憶體地址,而 MAR 存放下一條指令。
  4. D.MAR 存放下一條指令的地址,而 PC 存放算術運算的累積結果。

答案

A

解題

程式計數器 (PC) 用於追蹤下一條待提取指令的記憶體地址。在提取階段,該地址會從 PC 複製到記憶體地址暫存器 (MAR) 中,MAR 直接與地址總線相連,用於訪問當前正在讀取的物理記憶體單元。因此,選項 A 正確。

評分準則

答對 A 得 1 分。不設部分分數。
題目 8 · MCQ
1
小麗想向小明發送一條機密訊息,並確保小明能夠驗證該訊息確實是由小麗發出的(真確性及不可否認性)。在使用公鑰密碼學時,小麗應該分別使用什麼密鑰來 (1) 簽署訊息,以及 (2) 加密訊息?
  1. A.(1) 小麗的私鑰; (2) 小明的公鑰
  2. B.(1) 小麗的公鑰; (2) 小明的私鑰
  3. C.(1) 小明的公鑰; (2) 小麗的私鑰
  4. D.(1) 小明的私鑰; (2) 小麗的公鑰

答案

A

解題

要簽署訊息並保證真確性/不可否認性,發送方(小麗)必須使用自己的私鑰對訊息(或其雜湊值)進行加密。由於只有小麗擁有自己的私鑰,使用小麗的公鑰成功解密即可證明是由小麗發送的。要確保機密性,小麗必須使用接收方(小明)的公鑰對訊息進行加密,這樣只有小明才能用自己的私鑰進行解密。因此,正確的順序是 (1) 小麗的私鑰 和 (2) 小明的公鑰。

評分準則

答對 A 得 1 分。不設部分分數。
題目 9 · MCQ
1
某學校希望託管其學生管理系統。學校決定從雲端服務供應商處租用虛擬伺服器和存儲空間,而不是維護實體伺服器,但學校的 IT 員工仍將自行安裝和管理操作系統、數據庫及應用軟件。該學校使用的是哪種雲端服務模式?
  1. A.軟件即服務 (SaaS)
  2. B.平台即服務 (PaaS)
  3. C.架構即服務 (IaaS)
  4. D.數據庫即服務 (DBaaS)

答案

C

解題

架構即服務 (IaaS) 通過互聯網提供虛擬化的計算資源,例如虛擬伺服器、存儲和網絡。客戶需要負責安裝和管理操作系統、中間件、數據庫以及應用程序。由於學校租用了虛擬伺服器和存儲空間,但自行管理操作系統和數據庫,這屬於 IaaS 模式。

評分準則

答對 C 得 1 分。不設部分分數。
題目 10 · MCQ
1
以下哪些關於編譯器與解譯器的比較描述是正確的? (1) 編譯器在執行前將整個原始碼翻譯成機器碼,而解譯器則是逐行翻譯並執行代碼。 (2) 解譯型程序通常比編譯型程序運行得更快,因為它不需要編譯步驟。 (3) 若代碼中間存在語法錯誤,編譯器會在生成任何可執行文件前報錯,而解譯器可能會先執行錯誤之前的代碼,然後在錯誤處停止。
  1. A.僅 (1)
  2. B.僅 (1) 及 (2)
  3. C.僅 (1) 及 (3)
  4. D.僅 (2) 及 (3)

答案

C

解題

描述 (1) 正確:編譯器先翻譯整個程序,而解譯器在運行時逐行進行翻譯。描述 (2) 錯誤:編譯型程序比解譯型程序運行速度顯著更快,因為它們已被轉換為原生機器碼,而解譯型程序在執行時有額外的翻譯開銷。描述 (3) 正確:編譯器會先分析整個程序,語法錯誤會阻止可執行文件的生成;解譯器逐行運行,因此只有在實際執行到錯誤行時才會停止。因此,(1) 和 (3) 正確。

評分準則

答對 C 得 1 分。不設部分分數。
題目 11 · MCQ
1
在 8 位元二補碼表示法中,十進位數 \(-37\) 的二進位表示法是什麼?
  1. A.11011011
  2. B.11011010
  3. C.10100101
  4. D.11100101

答案

A

解題

要在 8 位元二補碼中表示 \(-37\):
1. 將絕對值 \(37\) 表示為二進位:\(37 = 32 + 4 + 1 \Rightarrow 00100101_2\)。
2. 將所有位元取反以求得一補碼:\(11011010_2\)。
3. 加 1 以求得二補碼:\(11011010_2 + 1 = 11011011_2\)。
因此,正確選項為 A。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 12 · MCQ
1
下列關於快取記憶體(Cache Memory)的敘述,哪一個/些是正確的?

(1) 它的速度比 CPU 內部的暫存器更快。
(2) 它儲存常用數據與指令,以加快 CPU 的存取速度。
(3) 它的容量通常比主記憶體(RAM)大。
  1. A.只有 (2)
  2. B.只有 (1) 及 (2)
  3. C.只有 (2) 及 (3)
  4. D.(1)、(2) 及 (3)

答案

A

解題

敘述 (1) 錯誤,因為 CPU 內部的暫存器是速度最快的記憶體組件,比快取記憶體更快。
敘述 (2) 正確,因為快取記憶體保留了常用或活躍的指令和數據,以縮短存取延遲。
敘述 (3) 錯誤,因為快取記憶體成本高、空間有限,其容量遠小於主記憶體 (RAM)。
因此,只有敘述 (2) 是正確的。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 13 · MCQ
1
下列哪些 IP 地址可以分配給私有區域網絡(LAN)上的主機,而不需要在公共互聯網上進行路由?

(1) 10.150.23.45
(2) 172.20.100.2
(3) 192.168.1.254
(4) 168.192.0.1
  1. A.只有 (1) 及 (3)
  2. B.只有 (2) 及 (3)
  3. C.只有 (1)、(2) 及 (3)
  4. D.(1)、(2)、(3) 及 (4)

答案

C

解題

私有 IP 地址範圍是專為本地網絡保留的:
- A 類:10.0.0.0 至 10.255.255.255
- B 類:172.16.0.0 至 172.31.255.255
- C 類:192.168.0.0 至 192.168.255.255

因此:
(1) 10.150.23.45 屬於 A 類私有範圍。
(2) 172.20.100.2 屬於 B 類私有範圍。
(3) 192.168.1.254 屬於 C 類私有範圍。
(4) 168.192.0.1 超出私有範圍,是公共 IP 地址。

因此,(1)、(2) 及 (3) 是私有 IP 地址。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 14 · MCQ
1
在公開金鑰密碼學中,當愛麗絲(Alice)想發送一封經數位簽署的訊息給鮑伯(Bob),以確保不可否認性及完整性時,愛麗絲應該:
  1. A.使用愛麗絲的私鑰加密訊息雜湊值。
  2. B.使用鮑伯的公鑰加密訊息雜湊值。
  3. C.使用愛麗絲的公鑰加密訊息雜湊值。
  4. D.使用鮑伯的私鑰加密訊息雜湊值。

答案

A

解題

數位簽署是先計算訊息的雜湊值,然後使用發送者(愛麗絲)的私鑰將該雜湊值加密而產生的。接收者(鮑伯)可以使用愛麗絲的公鑰來解密以驗證簽名。這能確保訊息的完整性(訊息被篡改會導致雜湊值不匹配)和不可否認性(只有持有私鑰的愛麗絲才能產生該簽名)。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 15 · MCQ
1
在關聯式資料庫中,有兩個資料表:
`STUDENT(StudentID, StudentName, ClassID)` 及 `CLASS(ClassID, ClassName, RoomNo)`。
`StudentID` 是 `STUDENT` 的主鍵,`ClassID` 是 `CLASS` 的主鍵。`STUDENT` 中的 `ClassID` 是參照 `CLASS` 的外鍵。下列哪項操作會違反參照完整性?
  1. A.在 CLASS 中插入一筆具有新 ClassID 的新記錄。
  2. B.在 STUDENT 中插入一筆其 ClassID 不存在於 CLASS 中的新記錄。
  3. C.從 STUDENT 中刪除一筆記錄。
  4. D.修改 CLASS 資料表中某班級的 ClassName。

答案

B

解題

參照完整性要求資料表中的外鍵值必須與被參照資料表中的主鍵值相匹配(或為 NULL)。
- 選項 A:在父資料表 CLASS 中插入新記錄不會違反參照完整性。
- 選項 B:在 STUDENT 中插入一筆其 ClassID 不存在於 CLASS 中的記錄,會導致外鍵指向一個無效的主鍵值,進而違反參照完整性。
- 選項 C:從子資料表 STUDENT 中刪除記錄不會影響參照完整性。
- 選項 D:修改某班級的 ClassName 不會影響關鍵的主鍵 ClassID 的匹配性。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 16 · MCQ
1
考慮資料表 `Sales(SalesID, ItemID, Quantity, Price)`。
以下 SQL 語句的目的是什麼?

```sql
SELECT ItemID, SUM(Quantity * Price) AS TotalRevenue
FROM Sales
GROUP BY ItemID
HAVING SUM(Quantity * Price) > 1000;
```
  1. A.尋找任何單次交易中單價大於 1000 的產品 ID 列表。
  2. B.計算每種產品的總銷售數量,並顯示總數量大於 1000 的產品。
  3. C.尋找在所有交易中總銷售額(Quantity * Price)大於 1000 的產品 ID。
  4. D.顯示所有銷售金額大於 1000 的銷售記錄,並按 ItemID 分組。

答案

C

解題

該查詢按 ItemID 對銷售記錄進行分組。`SUM(Quantity * Price)` 計算每種產品產生的總銷售金額。`HAVING` 子句對分組後的結果進行篩選,僅保留總銷售金額大於 1000 的產品群組。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 17 · MCQ
1
資料表 `ProjectMember(ProjectID, EmployeeID, EmployeeName, HoursWorked)` 的複合主鍵為 `(ProjectID, EmployeeID)`。
其函數相依性為:
- `(ProjectID, EmployeeID) -> HoursWorked`
- `EmployeeID -> EmployeeName`

此資料表滿足哪一個正規形式,原因為何?
  1. A.僅第一正規化 (1NF),因為存在部分相依性。
  2. B.僅第二正規化 (2NF),因為不存在遞移相依性。
  3. C.第三正規化 (3NF),因為所有非鍵屬性都完全函數相依於主鍵。
  4. D.它甚至不符合 1NF,因為它有重複鍵。

答案

A

解題

1. 資料表包含原子值,因此符合第一正規化 (1NF)。
2. 主鍵為複合主鍵:`(ProjectID, EmployeeID)`。
3. 存在部分相依性:`EmployeeID -> EmployeeName`。`EmployeeName` 僅相依於主鍵的一部分(`EmployeeID`),而不是整個複合主鍵。這違反了第二正規化 (2NF)。
因此,該資料表僅符合第一正規化 (1NF)。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 18 · MCQ
1
考慮以下虛擬碼:

```
Set A to [3, 8, 2, 7, 5]
Set N to 5
For i from 0 to N - 2:
For j from 0 to N - 2 - i:
If A[j] > A[j+1] Then
Swap A[j] and A[j+1]
EndIf
EndFor
EndFor
```

在外部循環剛好完成 2 次疊代(即 `i = 0` 和 `i = 1`)後,陣列 `A` 的狀態是什麼?
  1. A.[3, 2, 7, 5, 8]
  2. B.[2, 3, 5, 7, 8]
  3. C.[2, 3, 7, 5, 8]
  4. D.[2, 3, 5, 8, 7]

答案

B

解題

該虛擬碼表示升序的冒泡排序演算法。
追蹤過程如下:
初始狀態:`A = [3, 8, 2, 7, 5]`
- **第一次外部疊代 (i = 0)**:
- `j = 0`:`A[0] > A[1]` (3 > 8 爲假) -> `[3, 8, 2, 7, 5]`
- `j = 1`:`A[1] > A[2]` (8 > 2 爲真) -> 交換 -> `[3, 2, 8, 7, 5]`
- `j = 2`:`A[2] > A[3]` (8 > 7 爲真) -> 交換 -> `[3, 2, 7, 8, 5]`
- `j = 3`:`A[3] > A[4]` (8 > 5 爲真) -> 交換 -> `[3, 2, 7, 5, 8]`
在 `i = 0` 結束後,最大元素 (8) 已正確放置在末尾。

- **第二次外部疊代 (i = 1)**:
- `j = 0`:`A[0] > A[1]` (3 > 2 爲真) -> 交換 -> `[2, 3, 7, 5, 8]`
- `j = 1`:`A[1] > A[2]` (3 > 7 爲假) -> `[2, 3, 7, 5, 8]`
- `j = 2`:`A[2] > A[3]` (7 > 5 爲真) -> 交換 -> `[2, 3, 5, 7, 8]`
在 `i = 1` 結束後,陣列變為 `[2, 3, 5, 7, 8]`。

評分準則

選擇正確選項得 1 分。選錯 or 選擇多個選項不給分。
題目 19 · MCQ
1
考慮以下遞迴函數:

```
Function f(n, k)
If n == 0 Then
Return 0
Else If n % 2 == 1 Then
Return k + f(n // 2, k * 2)
Else
Return f(n // 2, k * 2)
EndIf
EndFunction
```
註:`//` 爲整數除法。調用函數 `f(11, 3)` 的返回值是多少?
  1. A.33
  2. B.13
  3. C.15
  4. D.48

答案

A

解題

追蹤遞迴函數調用 f(11, 3):
1. `f(11, 3)`:由於 `11 % 2 == 1`(奇數),返回 `3 + f(5, 6)`。
2. `f(5, 6)`:由於 `5 % 2 == 1`(奇數),返回 `6 + f(2, 12)`。
3. `f(2, 12)`:由於 `2 % 2 == 0`(偶數),返回 `f(1, 24)`。
4. `f(1, 24)`:由於 `1 % 2 == 1`(奇數),返回 `24 + f(0, 48)`。
5. `f(0, 48)`:由於 `n == 0`,返回 `0`。

逆向計算:
- `f(1, 24) = 24 + 0 = 24`
- `f(2, 12) = f(1, 24) = 24`
- `f(5, 6) = 6 + 24 = 30`
- `f(11, 3) = 3 + 30 = 33`

返回值為 33。(該函數實際計算 \(n \times k\) 的二進位乘法)。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 20 · MCQ
1
某學校希望託管自己的虛擬學習環境(VLE)網站。IT 部門決定向雲端服務商租用虛擬機器(VM)和儲存空間。他們將自行安裝及維護作業系統、網頁伺服器軟體和 VLE 應用程式。該學校使用的是哪種雲端服務模式?
  1. A.基礎設施即服務 (IaaS)
  2. B.平台即服務 (PaaS)
  3. C.軟體即服務 (SaaS)
  4. D.資料庫即服務 (DBaaS)

答案

A

解題

基礎設施即服務 (IaaS) 通過網際網路提供虛擬化的運算資源(如虛擬機器、儲存和網絡)。用戶可以控制作業系統、儲存空間以及部署的應用程式。本情境中,學校租用最基礎的虛擬機器和儲存空間並自行配置作業系統及應用,符合 IaaS 的定義。

評分準則

選擇正確選項得 1 分。選錯或選擇多個選項不給分。
題目 21 · MCQ
1
一個 8 位元的暫存器使用二補碼表示法儲存一個帶符號整數。若該暫存器的內容為 \(10101100_2\),它的十進制值是多少?
  1. A.-84
  2. B.-44
  3. C.-83
  4. D.172

答案

A

解題

在二補碼表示法中,最高有效位(MSB)是符號位。由於 MSB 為 1,此數為負數。\n求其數值大小:\n1. 將所有位元反轉:\(10101100 \rightarrow 01010011\)\n2. 將結果加 1:\(01010011 + 1 = 01010100_2\)\n3. 轉換為十進制:\(01010100_2 = 64 + 16 + 4 = 84\)。\n因此,該值為 \(-84\)。

評分準則

選擇正確選項 A 得 1 分。
題目 22 · MCQ
1
考慮以下兩個數據庫數據表:`STUDENT` 和 `CLASS`。\n`STUDENT` 表:`StudentID`(主鍵)、`Name`、`ClassID`(參照 `CLASS.ClassID` 的外鍵)\n`CLASS` 表:`ClassID`(主鍵)、`TeacherInCharge`\n\n以下哪項操作必定會違反參照完整性(referential integrity)?\nI. 插入一個新的學生記錄,其 `ClassID` 在 `CLASS` 表中並不存在。\nII. 從 `CLASS` 表中刪除一個班級記錄,而 `STUDENT` 表中仍有一些學生記錄具有該 `ClassID`。\nIII. 將某個學生的 `Name` 更新為空值(null)。
  1. A.只有 I
  2. B.只有 I 及 II
  3. C.只有 II 及 III
  4. D.I、II 及 III

答案

B

解題

I 違反了參照完整性,因為外鍵值必須存在於被參照數據表的主鍵列中。\nII 違反了參照完整性,因為刪除被參照的行會在參照表中留下孤立的外鍵。\nIII 沒有違反參照完整性,因為它只涉及 `Name` 屬性,而該屬性並非外鍵。

評分準則

選擇正確選項 B 得 1 分。
題目 23 · MCQ
1
考慮以下偽代碼段:\n\n```\nX = 15\nY = 6\nWhile X != Y Do\n If X > Y Then\n X = X - Y\n Else\n Y = Y - X\n EndIf\nEndWhile\n```\n\n`X` 的最終值是多少?
  1. A.3
  2. B.6
  3. C.9
  4. D.15

答案

A

解題

此偽代碼實現了求 X 和 Y 的最大公因數(GCD)的歐幾里得算法(輾轉相除法)。\n追蹤 X 和 Y 的值如下:\n- 初始:X = 15, Y = 6\n- 循環 1:X > Y (15 > 6),因此 X = 15 - 6 = 9\n- 循環 2:X > Y (9 > 6),因此 X = 9 - 6 = 3\n- 循環 3:X < Y (3 < 6),因此 Y = 6 - 3 = 3\n- 現在 X = 3 且 Y = 3。因為 X == Y,循環終止。\nX 的最終值為 3。

評分準則

選擇正確選項 A 得 1 分。
題目 24 · MCQ
1
一部電腦的 IP 地址為 `192.168.10.45`,子網掩碼(subnet mask)為 `255.255.255.224`。以下哪一個 IP 地址與這部電腦屬於同一個子網?
  1. A.192.168.10.15
  2. B.192.168.10.30
  3. C.192.168.10.60
  4. D.192.168.10.65

答案

C

解題

子網掩碼為 `255.255.255.224`。子網區段大小為 \(256 - 224 = 32\)。\n最後一個八位組的子網增量為 32:\n- 子網 1:.0 至 .31(可用地址:.1 至 .30)\n- 子網 2:.32 至 .63(可用地址:.33 至 .62)\n- 子網 3:.64 至 .95(可用地址:.65 至 .94)\n\n由於該電腦 IP 地址的最後一個八位組為 45,它屬於子網 2(.32 至 .63)。\n在選項中,`192.168.10.60` 的最後一個八位組(60)在此範圍內,因此它與該電腦屬於同一個子網。

評分準則

選擇正確選項 C 得 1 分。
題目 25 · MCQ
1
Alice 想使用公開金鑰密碼學發送一條機密訊息給 Bob。她還希望確保 Bob 能夠驗證該訊息確實是由她發送的(身份驗證)。以下哪項描述了正確的加密過程?
  1. A.Alice 用 Bob 的公開金鑰加密訊息,然後用她自己的公開金鑰加密結果。
  2. B.Alice 用她自己的私有金鑰加密訊息,然後用 Bob 的公開金鑰加密結果。
  3. C.Alice 用 Bob 的私有金鑰加密訊息,然後用她自己的私有金鑰加密結果。
  4. D.Alice 用 Bob 的公開金鑰加密訊息,然後用她自己的私有金鑰加密結果。

答案

B

解題

要同時達到機密性和身份驗證:\n1. Alice 用她自己的私有金鑰加密訊息。由於只有 Alice 擁有自己的私有金鑰,任何能夠使用 Alice 的公開金鑰解密該訊息的人,就知道該訊息必定來自她(身份驗證)。\n2. 然後,Alice 用 Bob 的公開金鑰加密所產生的密文。由於只有 Bob 擁有其私有金鑰,因此只有 Bob 可以進行第一階段解密,從而確保沒有其他人可以閱讀該訊息(機密性)。

評分準則

選擇正確選項 B 得 1 分。
題目 26 · MCQ
1
考慮以下數據庫數據表 `SALES`:\n\n| SaleID | Product | Category | Amount |\n|---|---|---|---|\n| 1 | Laptop | IT | 8000 |\n| 2 | Mouse | IT | 150 |\n| 3 | Desk | Furniture | 1200 |\n| 4 | Chair | Furniture | 800 |\n| 5 | Phone | IT | 5000 |\n\n以下 SQL 查詢的輸出是什麼?\n\n```sql\nSELECT Category, AVG(Amount) FROM SALES\nGROUP BY Category\nHAVING COUNT(*) > 1 AND AVG(Amount) > 1000;\n```
  1. A.Category | AVG(Amount)
    IT | 4383.33
  2. B.Category | AVG(Amount)
    IT | 4383.33
    Furniture | 1000.00
  3. C.Category | AVG(Amount)
    Furniture | 1000.00
  4. D.空集合(沒有返回任何行)

答案

A

解題

首先,查詢按 `Category` 分組:\n1. `IT` 類別分組包含金額為:8000, 150, 5000 的記錄。\n - `COUNT(*)` = 3\n - `AVG(Amount)` = (8000 + 150 + 5000) / 3 = 13150 / 3 = 4383.33\n2. `Furniture` 類別分組包含金額為:1200, 800 的記錄。\n - `COUNT(*)` = 2\n - `AVG(Amount)` = (1200 + 800) / 2 = 1000.00\n\n接下來,`HAVING` 子句過濾這些分組:\n- 對於 `IT`:`COUNT(*) > 1`(3 > 1,真)且 `AVG(Amount) > 1000`(4383.33 > 1000,真)。因此該分組被選中。\n- 對於 `Furniture`:`COUNT(*) > 1`(2 > 1,真)且 `AVG(Amount) > 1000`(1000 > 1000,假,因為 1000 不大於 1000)。因此該分組被過濾掉。\n\n因此,只會返回 `IT` 這一行。

評分準則

選擇正確選項 A 得 1 分。
題目 27 · MCQ
1
關於虛擬記憶體中「抖動」(thrashing)的敘述,以下哪些是正確的?\n\nI. 當操作系統花費在輔助存儲器與內存之間交換頁面(swapping)的時間多於執行實際程序指令的時間時,就會發生抖動。\nII. 增加物理內存(RAM)的容量有助於解決抖動問題。\nIII. 重組硬碟是消除抖動最有效的方法。
  1. A.只有 I
  2. B.只有 I 及 II
  3. C.只有 II 及 III
  4. D.I、II 及 III

答案

B

解題

敘述 I 是虛擬記憶體管理中「抖動」的定義。\n敘述 II 是正確的,因為增加物理記憶體可以減少操作系統進行頁面交換的需求,從根本上解決抖動問題。\n敘述 III 是錯誤的,因為硬碟重組與文件存儲佈局有關,而抖動是由於物理內存不足以容納運行中程序的活躍頁面所致。重組硬碟並不能解決抖動問題。

評分準則

選擇正確選項 B 得 1 分。
題目 28 · MCQ
1
在 CPU 的「讀取-解碼-執行」週期中,在讀取一條指令後,哪一個暫存器會立即更新,以儲存下一條待讀取指令的地址?
  1. A.記憶體地址暫存器 (MAR)
  2. B.程序計數器 (PC)
  3. C.指令暫存器 (IR)
  4. D.累加器 (ACC)

答案

B

解題

在「讀取」階段,指令地址是從程序計數器(PC)讀取的。在從記憶體讀取當前指令後,PC 會自動遞增/更新,以指向順序中的下一條指令的地址。

評分準則

選擇正確選項 B 得 1 分。
題目 29 · MCQ
1
考慮關係 `BOOK_LOAN`,其屬性為:\n`{LoanID, StudentID, StudentName, BookID, BookTitle, LoanDate}`\n\n假設:\n- `LoanID` 為主鍵。\n- 每個學生都有唯一的 `StudentID` 和單一的 `StudentName`。\n- 每本書都有唯一的 `BookID` 和單一的 `BookTitle`。\n\n此關係滿足以下哪些正規形式(normal forms)?\n\nI. 第一正規化 (1NF)\nII. 第二正規化 (2NF)\nIII. 第三正規化 (3NF)
  1. A.只有 I
  2. B.只有 I 及 II
  3. C.只有 II 及 III
  4. D.I、II 及 III

答案

B

解題

1. 1NF:所有屬性均包含原子值,因此它滿足 1NF。\n2. 2NF:主鍵為單一屬性(`LoanID`),因此不存在部分相依性(部分相依性僅在複合主鍵中才可能存在)。因此,它滿足 2NF。\n3. 3NF:我們有函數相依性:`LoanID -> StudentID` 且 `StudentID -> StudentName`。由於 `StudentID` 不是超鍵,且 `StudentName` 不是主屬性,因此存在遞移相依性:`LoanID -> StudentName`(透過 `StudentID`)。同理,`LoanID -> BookTitle` 也是遞移相依性(透過 `BookID`)。因此,它不滿足 3NF。\n因此,它僅滿足 I 和 II。

評分準則

選擇正確選項 B 得 1 分。
題目 30 · MCQ
1
一家軟件開發公司希望開發並部署一個新的網頁應用程式。他們希望完全專注於編寫代碼和管理應用程式,而無需擔心管理底層的操作系統、硬件伺服器、存儲或網絡基礎設施。哪種雲端計算服務模式最適合他們?
  1. A.基礎設施即服務 (IaaS)
  2. B.平台即服務 (PaaS)
  3. C.軟件即服務 (SaaS)
  4. D.數據庫即服務 (DBaaS)

答案

B

解題

平台即服務 (PaaS) 提供了一個預先配置好的環境(包括操作系統、數據庫、運行時和伺服器環境),這使開發人員可以構建、測試和運行其代碼,而無需管理底層的硬件和操作系統基礎設施。

評分準則

選擇正確選項 B 得 1 分。
題目 31 · MCQ
1
考慮以下偽代碼:
```
Integer Array A[0..5] = {3, 8, 2, 9, 5, 4}
Integer i, temp
For i = 0 To 4 Do:
If A[i] > A[i+1] Then:
temp = A[i]
A[i] = A[i+1]
A[i+1] = temp
EndIf
EndFor
```
執行該偽代碼後,陣列 `A` 的內容是什麼?
  1. A.{2, 3, 4, 5, 8, 9}
  2. B.{3, 2, 8, 5, 4, 9}
  3. C.{3, 8, 2, 5, 4, 9}
  4. D.{3, 2, 5, 4, 8, 9}

答案

B

解題

讓我們逐步追蹤演算法:
- 初始狀態下,A = {3, 8, 2, 9, 5, 4}。
- i = 0:比較 A[0] (3) 和 A[1] (8)。由於 3 > 8 為假,不進行交換。A 保持為 {3, 8, 2, 9, 5, 4}。
- i = 1:比較 A[1] (8) 和 A[2] (2)。由於 8 > 2 為真,交換兩者。A 變為 {3, 2, 8, 9, 5, 4}。
- i = 2:比較 A[2] (8) 和 A[3] (9)。由於 8 > 9 為假,不進行交換。A 保持為 {3, 2, 8, 9, 5, 4}。
- i = 3:比較 A[3] (9) 和 A[4] (5)。由於 9 > 5 為真,交換兩者。A 變為 {3, 2, 8, 5, 9, 4}。
- i = 4:比較 A[4] (9) 和 A[5] (4)。由於 9 > 4 為真,交換兩者。A 變為 {3, 2, 8, 5, 4, 9}。
因此,最終的陣列內容為 {3, 2, 8, 5, 4, 9}。

評分準則

答對得 1 分(選 B)。選錯不得分。
題目 32 · MCQ
1
數據庫資料表 `STUDENT` 包含欄位 `StudentID`、`Name`、`Class` 和 `Score`。以下哪一個 SQL 查詢能正確顯示每個班別中取得 60 分或以上的人數,並同時顯示班別名稱?
  1. A.`SELECT Class, COUNT(*) FROM STUDENT WHERE Score >= 60 GROUP BY Class;`
  2. B.`SELECT Class, COUNT(*) FROM STUDENT GROUP BY Class HAVING Score >= 60;`
  3. C.`SELECT Class, COUNT(Score) FROM STUDENT WHERE Score >= 60 GROUP BY StudentID;`
  4. D.`SELECT Class, SUM(Score) FROM STUDENT WHERE Score >= 60 GROUP BY Class;`

答案

A

解題

要尋找每個班別中分數為 60 分或以上的學生人數:
1. 我們首先使用 `WHERE` 子句篩選出 `Score >= 60` 的個人學生記錄。
2. 然後使用 `GROUP BY Class` 按照班別對篩選出的記錄進行分組。
3. 最後使用 `COUNT(*)` 計算每個分組中的學生人數。
選項 B 錯誤,因為 `HAVING` 只能用於篩選聚合函數的結果,而不能用於篩選個別列(除非該列在 GROUP BY 子句中)。選項 C 按 `StudentID` 進行分組,這無法按班別進行聚合。選項 D 使用了 `SUM(Score)`,這會計算分數的總和,而不是計算學生人數。

評分準則

答對得 1 分(選 A)。選錯不得分。
題目 33 · MCQ
1
在關係數據庫中,資料表 `PROJECT` 具有複合主鍵 `(ProjID, MemberID)`。資料表 `MEMBER` 的主鍵為 `MemberID`。以下關於參照完整性(referential integrity)的敘述中,哪一項/些是正確的?
(1) `PROJECT` 中的 `MemberID` 是參照 `MEMBER` 中 `MemberID` 的外鍵。
(2) `PROJECT` 中的 `MemberID` 不能包含重複的值。
(3) 若 `MemberID` 不存在於 `MEMBER` 中,則不能將該記錄新增至 `PROJECT`。
  1. A.只有 (1)
  2. B.只有 (1) 及 (3)
  3. C.只有 (2) 及 (3)
  4. D.(1)、(2) 及 (3)

答案

B

解題

- 敘述 (1) 正確:`PROJECT` 中的 `MemberID` 是一個外鍵,它參照 `MEMBER` 資料表的主鍵 `MemberID`。
- 敘述 (2) 錯誤:`MemberID` 是 `PROJECT` 中複合主鍵 `(ProjID, MemberID)` 的一部分。因此,單獨的 `MemberID` 允許出現重複值,只要每個 `(ProjID, MemberID)` 的組合是唯一的即可。
- 敘述 (3) 正確:在參照完整性約束下,外鍵的值必須存在於被參照的資料表中。因此,若 `MemberID` 不存在,則無法將該記錄新增到 `PROJECT` 中。

評分準則

答對得 1 分(選 B)。選錯不得分。
題目 34 · MCQ
1
考慮以下表示圖書館系統的實體關係(ER)圖:
`[Reader] <---- (1:N) ---- [Borrow] ---- (N:1) ----> [Book]`
以下關於 `Reader` 與 `Book` 之間關係的描述,哪一項是正確的?
  1. A.一位讀者可以借閱多本書,且一本書可以在不同時間被多位讀者借閱。
  2. B.每位讀者只能借閱一本書,且每本書只能被一位讀者借閱。
  3. C.關係資料表 `Borrow` 的複合主鍵必須僅由 `Reader` 和 `Book` 的主鍵組成,不允許包含其他任何欄位。
  4. D.Reader 與 Book 之間的關係是一對一(1:1)關係。

答案

A

解題

關係 `Borrow` 作為一個關聯實體表,用於解決 `Reader` 和 `Book` 之間的多對多(N:M)關係。因此,一位讀者可以借閱多本書,且一本書也可以在不同時間被不同的讀者借閱,這使得選項 A 正確,而選項 B 和 D 錯誤。選項 C 錯誤,因為關聯表 `Borrow` 可以(且通常)包含其他欄位(例如 `BorrowDate`、`DueDate`)。

評分準則

答對得 1 分(選 A)。選錯不得分。
題目 35 · MCQ
1
一部電腦的 IP 地址為 `192.168.10.75`,子網掩碼為 `255.255.255.240`。以下哪一個是該電腦所屬子網的網絡地址(或子網 ID)?
  1. A.`192.168.10.0`
  2. B.`192.168.10.64`
  3. C.`192.168.10.72`
  4. D.`192.168.10.80`

答案

B

解題

要尋找網絡地址,我們需要將 IP 地址與子網掩碼進行按位與(AND)運算。由於子網掩碼的前三個八位位組是 `255.255.255`,因此網絡地址的前三個八位位組保持為 `192.168.10`。
對於最後一個八位位組:
- IP 地址的最後一個八位位組:\(75 = 01001011_2\)
- 子網掩碼的最後一個八位位組:\(240 = 11110000_2\)
- 按位與運算:\(01001011_2 \text{ AND } 11110000_2 = 01000000_2\),即十進制的 \(64\)。
因此,網絡地址為 `192.168.10.64`。

評分準則

答對得 1 分(選 B)。選錯不得分。
題目 36 · MCQ
1
一個音頻檔案以下列規格進行錄製:
- 採樣率:\(44.1 \text{ kHz}\)
- 採樣大小:\(16\text{-bit}\)
- 聲道:雙聲道(2 聲道)
- 長度:\(2\text{ 分鐘}\)
在不進行壓縮的情況下,該音頻檔案的估算大小是多少百萬字節(MB)?(假設 \(1 \text{ MB} = 10^6 \text{ 字节}\))
  1. A.\(5.3 \text{ MB}\)
  2. B.\(10.6 \text{ MB}\)
  3. C.\(21.2 \text{ MB}\)
  4. D.\(42.3 \text{ MB}\)

答案

C

解題

檔案大小(位元)= 採樣率 \(\times\) 採樣大小 \(\times\) 聲道數 \(\times\) 長度
- 採樣率 = \(44,100 \text{ Hz}\)
- 採樣大小 = \(16 \text{ bits} = 2 \text{ bytes}\)
- 聲道 = \(2\)
- 長度 = \(2 \text{ 分鐘} = 120 \text{ 秒}\)
檔案大小(字節)= \(44,100 \times 2 \text{ bytes} \times 2 \times 120 \text{ seconds} = 21,168,000 \text{ 字節}\)。
由於 \(1 \text{ MB} = 10^6 \text{ 字節}\),檔案大小為 \(21,168,000 / 10^6 = 21.168 \text{ MB}\),約為 \(21.2 \text{ MB}\)。

評分準則

答對得 1 分(選 C)。選錯不得分。
題目 37 · MCQ
1
以下關於不同類型電腦記憶體的描述,哪一項/些是正確的?
(1) 高速緩衝記憶體(Cache memory)比主記憶體(RAM)更快,用於儲存經常存取的數據。
(2) ROM 是非易失性的(non-volatile),通常用於儲存 BIOS/UEFI 啟動程式。
(3) RAM 是易失性的(volatile),這意味著當電源關閉時其內容會丟失。
  1. A.只有 (1) 及 (2)
  2. B.只有 (1) 及 (3)
  3. C.只有 (2) 及 (3)
  4. D.(1)、(2) 及 (3)

答案

D

解題

這三個描述都是正確的:
- 描述 (1) 正確:高速緩衝記憶體(Cache memory)是一種高速靜態隨機存取記憶體(SRAM),可幫助 CPU 比從動態隨機存取記憶體(DRAM / 主記憶體)更快地存取常用數據。
- 描述 (2) 正確:唯讀記憶體(ROM)是非易失性的,斷電後仍能保留其內容,因此適合儲存系統韌體或啟動載入程式。
- 描述 (3) 正確:隨機存取記憶體(RAM)是易失性的,需要電源才能維持其數據。

評分準則

答對得 1 分(選 D)。選錯不得分。
題目 38 · MCQ
1
Alice 想要通過互聯網向 Bob 發送一份機密文件。為了確保**機密性**(只有 Bob 能閱讀該文件)和**真實性**(Bob 能驗證 Alice 是發送者),Alice 應該使用以下哪一種加密方法?
  1. A.先使用 Alice 的私鑰加密文件,再使用 Bob 的公鑰加密其結果。
  2. B.先使用 Bob 的私鑰加密文件,再使用 Alice 的公鑰加密其結果。
  3. C.先使用 Alice 的公鑰加密文件,再使用 Bob 的私鑰加密其結果。
  4. D.先使用 Bob 的公鑰加密文件,再使用 Alice 的公鑰加密其結果。

答案

A

解題

為了同時實現機密性和真實性:
1. **真實性/完整性**:Alice 使用她自己的私鑰對文件進行加密(簽署)。因為只有 Alice 擁有她自己的私鑰,任何使用 Alice 的公鑰解密該文件的人都可以確認該文件必然源自 Alice。
2. **機密性**:Alice 隨後使用 Bob 的公鑰對前一步的結果進行加密。因為只有 Bob 擁有對應的私鑰,所以只有 Bob 可以解密外層。
因此,選項 A 是正確的。(註:在實際應用中,為了優化性能,通常會對主體文件使用對稱加密,但非對稱密鑰封裝的邏輯是相同的)。

評分準則

答對得 1 分(選 A)。選錯不得分。
題目 39 · MCQ
1
一家軟件公司想要部署一個網頁應用程式。他們決定不管理實體伺服器,而是向雲端服務供應商租用虛擬機和儲存空間,以允許他們安裝自己的操作系統、數據庫和應用軟件。他們正在使用哪一種雲端服務模型?
  1. A.軟件即服務(SaaS)
  2. B.平台即服務(PaaS)
  3. C.基礎設施即服務(IaaS)
  4. D.數據庫即服務(DBaaS)

答案

C

解題

基礎設施即服務(IaaS)通過互聯網提供虛擬化的計算資源(伺服器、虛擬機、儲存空間和網絡)。客戶對操作系統、數據庫和運行時環境保持完全控制權。相比之下,平台即服務(PaaS)抽象化了操作系統和伺服器管理,而軟件即服務(SaaS)則直接提供即用型軟件應用程式。

評分準則

答對得 1 分(選 C)。選錯不得分。
題目 40 · MCQ
1
以下哪一項/些是操作系統(OS)執行的典型任務?
(1) 分配記憶體空間給不同的運行中應用程式。
(2) 使用裝置驅動程式管理輸入/輸出裝置。
(3) 掃描檔案以檢測並清除電腦病毒。
  1. A.只有 (1) 及 (2)
  2. B.只有 (1) 及 (3)
  3. C.只有 (2) 及 (3)
  4. D.(1)、(2) 及 (3)

答案

A

解題

- 描述 (1) 和 (2) 正確:記憶體管理(分配 RAM 給程序)和裝置管理(通過驅動程式與硬體組件進行通訊)是操作系統的基本任務。
- 描述 (3) 錯誤:掃描和清除電腦病毒是由防毒軟體執行的,防毒軟體被歸類為實用工具軟體(utility software),而不是操作系統核心本身的基本服務或任務。

評分準則

答對得 1 分(選 A)。選錯不得分。

卷一 乙部 (Conventional)

在提供的空間內回答所有問題。
5 題目 · 40
題目 1 · Structured Conventional
8
一個圖像的分辨率為 \(1024 \times 1024\) 像素,並以 24-bit 真彩色(true color)儲存。

(a) (i) 計算該圖像未經壓縮的檔案大小(以 MB 為單位),使用 \(1\text{ MB} = 1024^2\text{ bytes}\)。寫出你的計算步驟。 (2 分)
(ii) 若將該圖像轉換為 8-bit 灰階(grayscale)圖像,灰階圖像與原 24-bit 圖像的檔案大小比例是多少? (1 分)

(b) 考慮一個使用二補碼(two's complement)表示法的 8-bit 系統。
(i) 以 8-bit 二補碼表示十進制數 \(-18\)。 (1 分)
(ii) 在 8-bit 二補碼中將 \(35\) 與 \(-18\) 相加,以進行減法運算 \(35 - 18\)。寫出你的二進制加法步驟及最終的十進制結果。 (2 分)

(c) 解釋為什麼對於支持中文和英文等多語言內容的網頁,UTF-8 比 ASCII 被更廣泛採用。 (2 分)

答案

(a) (i) 3 MB (ii) 1 : 3 (or 1/3) (b) (i) 11101110 (ii) 00100011 + 11101110 = 00010001 (Decimal: 17) (c) ASCII only supports 128 characters (primarily English), whereas UTF-8 is a variable-width encoding that supports almost all worldwide languages including Chinese.

解題

(a) (i) 檔案大小 = \(1024 \times 1024 \times (24 / 8)\text{ 字節} = 1024 \times 1024 \times 3\text{ 字節} = 3,145,728\text{ 字節}\)。除以 \(1024^2\) 得到 \(3\text{ MB}\)。
(ii) 8-bit 灰階圖像每像素使用 1 字節,而 24-bit 彩色每像素使用 3 字節。比例為 \(1 : 3\)。

(b) (i) \(+18\) 的 8-bit 二進制為 `00010010`。反轉所有位元得到 `11101101`。加 1 得到 `11101110`。
(ii) \(+35\) 的 8-bit 二進制為 `00100011`。將 \(35\) 與 \(-18\) 相加:
00100011
+ 11101110
----------
100010001
捨棄溢出位(overflow bit)後得到 `00010001`,轉換為十進制即為 \(17\)。

(c) ASCII 使用 7 個位元,只能表示 128 個字符,這對於中文等非英語語言是不夠的。UTF-8 可以表示幾乎全球所有語言的字符,同時保持與 ASCII 的向下兼容性。

評分準則

(a) (i)
- 正確的計算公式(例如 \(1024 \times 1024 \times 3\) 字節) (1 分)
- 正確的最終答案:3 MB (1 分)
(a) (ii)
- 正確的比例:1 : 3 或 1/3 (1 分)

(b) (i)
- 正確的二進制值:11101110 (1 分)
(b) (ii)
- 展示 `00100011` 和 `11101110` 的正確加法及中間二進制結果 (1 分)
- 正確的最終二進制結果 `00010001` 及其十進制對應值 17 (1 分)

(c)
- 解釋 ASCII 字符集有限(128個字符),無法支持中文 (1 分)
- 解釋 UTF-8 具有完整的多語言支持,且與 ASCII 向下兼容 (1 分)
題目 2 · Structured Conventional
8
某學校的區域網絡(LAN)通過路由器連接到互聯網。內部網絡使用專有 IP 地址範圍 \(192.168.1.0/24\)。

(a) (i) 以點分十進制記法寫出 \(192.168.1.0/24\) 的子網掩碼(subnet mask)。 (1 分)
(ii) 在此子網中,最多可以為多少個主機設備分配有效的 IP 地址?解釋你的答案。 (2 分)

(b) 簡述以下各項在學校網絡中的主要功能:
(i) DHCP 伺服器 (2 分)
(ii) 在路由器上運行的 NAT(網絡地址轉換) (2 分)
(c) 學生嘗試使用域名(例如 `www.school.edu.hk`)來 ping 一個網站,但 ping 失敗。然而,在網頁瀏覽器中直接輸入該網站的 IP 地址卻能成功載入網頁。指出最有可能出現故障的網絡服務。 (1 分)

答案

(a) (i) 255.255.255.0 (ii) 254. The remaining 8 bits allow 256 addresses, but 2 are reserved for the network address and broadcast address. (b) (i) Automatically assigns IP configuration details (IP address, DNS, gateway) to client devices dynamically. (ii) Translates internal private IP addresses to a public IP address when communicating with the Internet. (c) DNS (Domain Name System)

解題

(a) (i) CIDR 記法 `/24` 意味著前 24 位均設為 1,對應點分十進制即為 `255.255.255.0`。
(ii) 共有 \(32 - 24 = 8\) 個主機位。\(2^8 = 256\) 個組合。我們必須減去 2 個地址:`192.168.1.0`(網絡地址)和 `192.168.1.255`(廣播地址),剩下 \(254\) 個可用的主機地址。

(b) (i) DHCP(動態主機配置協議)伺服器會自動、動態地將網絡配置(如 IP 地址、子網掩碼、默認網關和 DNS 伺服器)分配給連接的設備,避免手動設置的麻煩和 IP 衝突問題。
(ii) NAT(網絡地址轉換)在內部設備訪問外部網絡時,將內部的專有 IP 地址轉換為單一的公用 IP 地址,這既節省了有限的公用 IPv4 地址,又隱藏了內部網絡結構以增加安全性。

(c) DNS(域名系統)。由於可以通過 IP 地址訪問該網站,但無法通過域名訪問,表明將域名映射為 IP 地址的解析服務出現了問題。

評分準則

(a) (i)
- 正確的子網掩碼:255.255.255.0 (1 分)
(a) (ii)
- 正確的主機數:254 (1 分)
- 清楚解釋保留了網絡地址和廣播地址 (1 分)

(b) (i)
- 解釋自動為客端設備分配 IP 地址/網絡配置 (2 分)
(b) (ii)
- 解釋專有 IP 與公用 IP 之間的地址轉換 (1 分)
- 提及節省公用 IP 地址或增強內部網絡安全性 (1 分)

(c)
- 指出 DNS / 域名系統 (1 分)
題目 3 · Structured Conventional
8
一個網上書店數據庫包含兩個數據表:`PUBLISHERS`(出版社)和 `BOOKS`(圖書)。其模式定義如下:

`PUBLISHERS(PubID, PubName, Address, Contact)`
`BOOKS(BookID, Title, Price, PubID, PublishDate)`

(a) (i) 辨識 `BOOKS` 表的主鍵(primary key)和外鍵(foreign key)。 (2 分)
(ii) 指出並解釋 `PUBLISHERS` 和 `BOOKS` 之間的關係(例如:1:1、1:N 或 M:N)。 (2 分)

(b) (i) 數據庫管理員嘗試插入一條圖書記錄,其中的 `PubID` 在 `PUBLISHERS` 表中並不存在。指出會發生什麼情況,並命名被違反的完整性約束(integrity constraint)。 (2 分)
(ii) 用戶能否插入一條 `BookID` 為空值(null)的新圖書記錄?參考數據庫完整性解釋你的答案。 (2 分)

答案

(a) (i) Primary Key: BookID; Foreign Key: PubID (ii) One-to-many (1:N). One publisher can publish many books, but each book is linked to only one publisher via PubID. (b) (i) The insertion will fail. This violates the Referential Integrity constraint. (ii) No. This violates the Entity Integrity constraint, which states primary keys cannot be null.

解題

(a) (i) 在 `BOOKS` 表中,`BookID` 能唯一識別每條圖書記錄,因此為主鍵。`PubID` 引用了 `PUBLISHERS` 表的主鍵,因此為外鍵。
(ii) 它們之間的關係是一對多 (1:N)。一個出版社可以出版多本圖書,但每本圖書只與一個出版社相關聯(通過 `BOOKS` 表中的單個 `PubID` 字段)。

(b) (i) 該插入操作會失敗並被數據庫管理系統拒絕。這違反了參照完整性約束(Referential Integrity Constraint),該約束要求 `BOOKS` 中的每個外鍵值都必須在 `PUBLISHERS` 中有匹配的主鍵值。
(ii) 不能。`BookID` 是 `BOOKS` 的主鍵。根據實體完整性約束(Entity Integrity Constraint),任何關係中的主鍵屬性都不能選擇空值(null),因為主鍵必須唯一標識每條記錄且不能為空。

評分準則

(a) (i)
- 辨識主鍵:BookID (1 分)
- 辨識外鍵:PubID (1 分)
(a) (ii)
- 指出一對多(1:N)關係 (1 分)
- 解釋:一個出版社可以出版多本圖書,但每本圖書只能對應一個出版社 (1 分)

(b) (i)
- 指出插入失敗或報錯 (1 分)
- 辨識約束:參照完整性 (1 分)
(b) (ii)
- 回答「不能」 (1 分)
- 根據實體完整性進行解釋(主鍵不能為空值) (1 分)
題目 4 · Structured Conventional
8
以下算法旨在找出含有 \(N\) 個整數的數組 `A` 中的第二大數值(其中 \(N \ge 2\))。數組索引從 1 開始。

```
1. largest = A[1]
2. second_largest = -999999
3. For i = 2 to N Do
4. If A[i] > largest Then
5. second_largest = largest
6. largest = A[i]
7. Else If A[i] > second_largest And A[i] != largest Then
8. second_largest = A[i]
9. EndIf
10. EndFor
```

(a) 通過完成下表,追蹤當 \(N = 5\) 且 \(A = [12, 15, 8, 15, 14]\) 時算法的執行過程。 (4 分)

| `i` | `A[i]` | `largest` | `second_largest` |
| --- | --- | --- | --- |
| 初始 (Initial) | - | 12 | -999999 |
| 2 | 15 | | |
| 3 | 8 | | |
| 4 | 15 | | |
| 5 | 14 | | |

(b) (i) 若輸入數組為 \(A = [10, 10, 10]\) 且 \(N = 3\),`second_largest` 的最終值是多少? (1 分)
(ii) 解釋第 7 行中的條件 `A[i] != largest` 如何確保算法在數組中存在重複的最大值時仍能正確運行(例如:找出第二大且*不重複*的數值)。 (3 分)

答案

(a) Trace table values: - i=2: largest=15, second_largest=12 - i=3: largest=15, second_largest=12 - i=4: largest=15, second_largest=12 - i=5: largest=15, second_largest=14 (b) (i) -999999 (ii) It prevents elements equal to 'largest' from updating 'second_largest' when they fail the condition in line 4, ensuring 'second_largest' remains strictly smaller than 'largest'.

解題

(a) 追蹤表執行過程:
- 當 `i = 2` 時,`A[2] = 15`。因為 `15 > 12`,`second_largest` 變為 `12`,`largest` 變為 `15`。
- 當 `i = 3` 時,`A[3] = 8`。第 4 和第 7 行的條件均為假,無變化(`largest = 15`, `second_largest = 12`)。
- 當 `i = 4` 時,`A[4] = 15`。第 4 行為假(`15 > 15` 假),第 7 行也為假(因為 `15 != 15` 假)。無變化。
- 當 `i = 5` 時,`A[5] = 14`。第 4 行為假(`14 > 15` 假),第 7 行為真(因為 `14 > 12` 且 `14 != 15`)。因此 `second_largest` 變為 `14`。

(b) (i) 最終值為 `-999999`,因為所有元素都等於初始 `largest` 值,循環中的任何條件都不會被滿足。
(ii) 如果沒有第 7 行中的 `A[i] != largest` 條件,那麼當遇到重複的最大值時(如 `[12, 15, 8, 15, 14]` 中的第二個 `15`),第 7 行將被判斷為真(因為 `15 > 12`),這會把 `second_largest` 更新為 `15`。這會導致 `largest` 和 `second_largest` 都等於 `15`。該條件排除了這種情況,確保 `second_largest` 只存儲嚴格小於 `largest` 的值,即第二大且不重複的數值。

評分準則

(a)
- 追蹤表中的每一行正確得 1 分(共 4 分):
- 第 2 行:largest = 15, second_largest = 12
- 第 3 行:largest = 15, second_largest = 12
- 第 4 行:largest = 15, second_largest = 12
- 第 5 行:largest = 15, second_largest = 14
(b) (i)
- 正確值:-999999 (1 分)
(b) (ii)
- 說明如果沒有該條件,重複的最大值會將 `second_largest` 覆蓋為最大值 (1 分)
- 解釋 `A[i] != largest` 可防止 `second_largest` 變得與 `largest` 相等 (1 分)
- 總結它成功找出了第二大且不重複的數值 (1 分)
題目 5 · Structured Conventional
8
一個電子商務平台處理機密的客戶交易並要求用戶登錄。

(a) 該平台使用 `https://` 代替 `http://` 作為其網址。
(i) 辨識用於實現 HTTPS 的網絡協議。 (1 分)
(ii) 解釋該協議如何保護用戶憑據(如密碼),使其免於在公共 Wi-Fi 上通過「數據包竊聽」(packet sniffing)被盜。 (2 分)

(b) 為了防止自動腳本進行暴力破解攻擊,該平台在登錄頁面上設置了 CAPTCHA(驗證碼)。解釋 CAPTCHA 如何幫助區分人類用戶和自動機器人。 (2 分)

(c) 在建立 HTTPS 連接期間,初始會使用非對稱加密(asymmetric encryption),但隨後系統會切換到對稱加密(symmetric encryption)來傳輸網頁。
(i) 為什麼在初始握手(handshake)中使用非對稱加密而不是對稱加密? (2 分)
(ii) 為什麼在握手後,數據傳輸更傾向於使用對稱加密而不是非對稱加密? (1 分)

答案

(a) (i) SSL / TLS (ii) It encrypts communication data so that eavesdroppers on public Wi-Fi only see cipher text. (b) CAPTCHA presents tasks (e.g., character recognition, image selection) that are easy for humans but extremely difficult for computer algorithms/scripts to solve. (c) (i) Asymmetric encryption allows secure exchange of a session key without a pre-shared secret. (ii) Symmetric encryption is much faster and computationally less expensive.

解題

(a) (i) SSL(安全套接層)或 TLS(傳輸層安全性協定)。
(ii) 它對用戶瀏覽器與網頁伺服器之間傳輸的負載數據進行加密。即使攻擊者在公共 Wi-Fi 上攔截到數據包,他們也只能看到無法理解的加密密文,無法讀取明文密碼。

(b) CAPTCHA 要求解決一些依賴於高級認知能力或圖形識別的挑戰(例如,閱讀扭曲的文字或對圖像進行分類),這些挑戰對於自動化的計算機視覺系統/腳本來說非常困難,但對於人類用戶來說卻很容易。

(c) (i) 非對稱加密使用公鑰和私鑰對,允許客戶端和伺服器在不安全的通道上安全地協商和交換會話密鑰,而無需預先共享密鑰。如果是對稱加密,直接傳輸密鑰一旦被截獲就會暴露。
(ii) 對稱加密在計算上要快得多,佔用的系統資源也少得多,因此更適合在連接建立後加密和傳輸大量的網頁內容。

評分準則

(a) (i)
- 指出 TLS 或 SSL (1 分)
(a) (ii)
- 解釋通信數據被加密 (1 分)
- 解釋即使被截獲,攻擊者也只能看到密文 / 無法解密數據 (1 分)

(b)
- 指出 CAPTCHA 提出涉及圖像識別、語意理解或扭曲文字的挑戰 (1 分)
- 解釋這些挑戰對人類而言很簡單,但對自動腳本/算法而言極其困難 (1 分)

(c) (i)
- 指出非對稱加密允許在不安全的通道上安全地交換會話密鑰 (1 分)
- 指出初始時客戶端與伺服器之間不需要預先共享密鑰 (1 分)
(c) (ii)
- 解釋對稱加密運算速度更快 / 計算開銷更低 (1 分)

卷二 Elective (Conventional)

在所選的選修單元中,四題中任擇三題回答。
3 題目 · 45
題目 1 · Elective Structured Conventional
15
本地外賣平台「HK-Express-Food」希望設計一個數據庫來存儲有關餐廳、食品項目和顧客訂單的信息。起初,一名初級數據庫設計師提出了一個單一關係(Relation)來保存所有數據:

`ORDER_TEMP (OrderID, CustomerID, CustomerName, CustomerPhone, RestaurantID, RestaurantName, RestaurantAddress, OrderDate, FoodID, FoodName, UnitPrice, Quantity, DeliveryFee)`

假設每筆訂單均由一位顧客在特定日期向一家餐廳發出,且一筆訂單中可以訂購多個不同的食品項目。

(a) 確定 `ORDER_TEMP` 的主鍵(Primary Key),並指出為什麼該關係不符合第二範式(2NF),需提及部分函數依賴(Partial Functional Dependency)的概念。(3分)

(b) 在 `ORDER_TEMP` 中找出兩個傳遞函數依賴(Transitive Dependencies)。解釋傳遞函數依賴如何導致數據冗餘(Data Redundancy)或更新異常(Update Anomalies)。(3分)

(c) 將關係 `ORDER_TEMP` 分解為一組符合第三範式(3NF)的關係。對於每個關係,指出其名稱並列出其屬性,清晰地在主鍵下方加上底線,並用星號(*)或井號(#)標記外鍵。(6分)

(d) HK-Express-Food 希望加入「優惠券(Coupons)」功能。一張優惠券可被多位不同的顧客多次使用,而一位顧客也可以在不同時間使用多張不同的優惠券,但每筆訂單最多只能使用一張優惠券。建議應如何修改數據庫模式(Database Schema)以支援此功能。(3分)

答案

See the detailed solution and marking scheme.

解題

(a)
- 主鍵:`(OrderID, FoodID)`
- 原因:存在對主鍵的部分函數依賴。某些非鍵屬性僅依賴於主鍵的一部分。例如,`FoodID -> FoodName, UnitPrice`,以及 `OrderID -> CustomerID, RestaurantID, OrderDate, DeliveryFee`。由於這些非鍵屬性僅由候選鍵 `(OrderID, FoodID)` 的子集決定,因此該關係不符合 2NF。

(b)
- 傳遞函數依賴:
1. `OrderID -> CustomerID` 且 `CustomerID -> CustomerName, CustomerPhone`(因此 `OrderID -> CustomerName, CustomerPhone` 是一個傳遞函數依賴)。
2. `OrderID -> RestaurantID` 且 `RestaurantID -> RestaurantName, RestaurantAddress`(因此 `OrderID -> RestaurantName, RestaurantAddress` 是一個傳遞函數依賴)。
- 解釋:傳遞函數依賴意味著顧客的電話號碼或餐廳的地址會在他們的每筆訂單中重複出現,這會導致數據冗餘。如果顧客更改電話號碼,則必須更新多條記錄(更新異常),若遺漏某些記錄,則會導致數據不一致。

(c)
符合 3NF 的分解如下:
1. `CUSTOMER` (under{CustomerID}, CustomerName, CustomerPhone)
2. `RESTAURANT` (under{RestaurantID}, RestaurantName, RestaurantAddress)
3. `FOOD` (under{FoodID}, FoodName, UnitPrice)
4. `ORDER` (under{OrderID}, CustomerID#, RestaurantID#, OrderDate, DeliveryFee)
5. `ORDER_ITEM` (under{OrderID#, FoodID#}, Quantity)

(d)
1. 建立一個新表 `COUPON` (under{CouponID}, DiscountValue, ...)。
2. 將 `CouponID` 作為外鍵添加到 `ORDER` 關係中(即 `ORDER` (under{OrderID}, CustomerID#, RestaurantID#, OrderDate, DeliveryFee, CouponID#))。由於每筆訂單最多只能使用一張優惠券,如果不使用優惠券,則該外鍵可為空值(Null)。

評分準則

(a) [合共: 3 分]
- 確定複合主鍵為 `(OrderID, FoodID)`。[1分]
- 指出 `FoodName`/`UnitPrice` 僅依賴於 `FoodID`,或 `CustomerName`/`DeliveryFee` 僅依賴於 `OrderID`。[1分]
- 解釋非鍵屬性依賴於複合主鍵的子集構成了部分函數依賴,違反了 2NF。[1分]

(b) [合共: 3 分]
- 正確指出至少一條傳遞函數依賴鏈(例如 `OrderID -> CustomerID -> CustomerName`)。[1分]
- 解釋傳遞函數依賴會導致數據冗餘(重複相同的非鍵值)。[1分]
- 解釋這會導致更新異常(可能出現不一致,或需要為現實世界中的一次更改進行多次更新)。[1分]

(c) [合共: 6 分]
- 正確設計 `CUSTOMER` 和 `RESTAURANT` 表並配以適當的主鍵。[1分]
- 正確設計 `FOOD` 表並以 `FoodID` 作為主鍵。[1分]
- 正確設計 `ORDER` 表並以 `OrderID` 作為主鍵,`CustomerID` 和 `RestaurantID` 作為外鍵。[2分]
- 正確設計 `ORDER_ITEM` 表並以複合主鍵 `(OrderID, FoodID)` 作為關聯表。[2分]

(d) [合共: 3 分]
- 確定需要一個新的 `COUPON` 實體/關係,並以 `CouponID` 作為其主鍵。[1分]
- 正確識別 `COUPON` 與 `ORDER` 之間存在一對多關係(因為一筆訂單最多使用一張優惠券,而一張優惠券可用於多筆訂單)。[1分]
- 指出應將 `CouponID` 作為可空的外鍵添加到 `ORDER` 表中。[1分]
題目 2 · Elective Structured Conventional
15
健身中心「FitLife」使用以下三個關係表來管理其會員、課程和預訂:

`MEMBER (MemberID, MemberName, MemberType, JoinDate, Balance)`
- `MemberType` 可為 'Gold'、'Silver' 或 'Bronze'。
- `Balance` 為會員帳戶中當前的預付貨幣餘額。

`CLASS (ClassID, ClassName, Instructor, Fee, MaxCapacity)`
- `Fee` 為參加該課程的費用。

`BOOKING (BookingID, MemberID, ClassID, BookingDate, Status)`
- `Status` 可為 'Confirmed' 或 'Cancelled'。

編寫 SQL 語句來執行 (a) 至 (e) 中的任務。

(a) 編寫一個 SQL 語句,列出所有在 '2023-01-01' 之後加入的 Gold 會員的姓名,並按姓名按字母順序升序排列。(2分)

(b) 編寫一個 SQL 語句,顯示每個課程的 `ClassName` 及其已確認('Confirmed')的預訂總數。如果某個課程沒有任何確認預訂,則顯示 0。(3分)

(c) 編寫一個 SQL 語句,顯示預訂了至少兩門由導師 'Alex' 教授的不同課程的會員姓名。(3分)

(d) (i) 由於推廣活動,FitLife 想要向所有已確認預訂「Yoga Basic」課程的 Gold 會員的帳戶餘額(`Balance`)退回 \$20。編寫一個 SQL 語句以相應地更新 `MEMBER` 表。(3分)
(ii) 指出可用於防止 `Balance` 低於零的數據庫完整性約束(Integrity Constraint)類型,並寫出用於在 `MEMBER` 表中定義此約束的 SQL 片段。(2分)

(e) 建立一個名為 `V_CLASS_SUMMARY` 的數據庫檢視表(View),顯示每個課程的 `ClassID`、`ClassName` 及其預訂率。(預訂率定義為:`BOOKING` 表中該課程的預訂總數除以其 `MaxCapacity` 再乘以 100)。(2分)

答案

See the detailed solution and marking scheme.

解題

(a)
```sql
SELECT MemberName
FROM MEMBER
WHERE MemberType = 'Gold' AND JoinDate > '2023-01-01'
ORDER BY MemberName ASC;
```

(b)
```sql
SELECT C.ClassName, COUNT(B.BookingID) AS TotalConfirmed
FROM CLASS C LEFT JOIN BOOKING B
ON C.ClassID = B.ClassID AND B.Status = 'Confirmed'
GROUP BY C.ClassID, C.ClassName;
```
*(注意:必須使用 `LEFT JOIN` 以確保包含 0 次預訂的課程,並且條件 `B.Status = 'Confirmed'` 必須置於 `ON` 子句中而非 `WHERE` 子句中,否則無預訂的課程會被過濾掉)。*

(c)
```sql
SELECT M.MemberName
FROM MEMBER M, BOOKING B, CLASS C
WHERE M.MemberID = B.MemberID
AND B.ClassID = C.ClassID
AND C.Instructor = 'Alex'
GROUP BY M.MemberID, M.MemberName
HAVING COUNT(DISTINCT C.ClassID) >= 2;
```

(d) (i)
```sql
UPDATE MEMBER
SET Balance = Balance + 20
WHERE MemberType = 'Gold'
AND MemberID IN (
SELECT B.MemberID
FROM BOOKING B, CLASS C
WHERE B.ClassID = C.ClassID
AND C.ClassName = 'Yoga Basic'
AND B.Status = 'Confirmed'
);
```
(ii)
- 約束類型:檢查約束(Check Constraint)(或值域約束)
- SQL 片段:
```sql
ALTER TABLE MEMBER ADD CONSTRAINT chk_balance CHECK (Balance >= 0);
-- 或在定義表時直接加入列約束:CHECK (Balance >= 0)
```

(e)
```sql
CREATE VIEW V_CLASS_SUMMARY AS
SELECT C.ClassID, C.ClassName, (COUNT(B.BookingID) * 100.0 / C.MaxCapacity) AS OccupancyRate
FROM CLASS C LEFT JOIN BOOKING B ON C.ClassID = B.ClassID
GROUP BY C.ClassID, C.ClassName, C.MaxCapacity;
```

評分準則

(a) [合共: 2 分]
- 正確的 `SELECT` 和 `WHERE` 過濾子句。[1分]
- 使用 `ORDER BY MemberName ASC` 進行正確排序。[1分]

(b) [合共: 3 分]
- 正確使用 `LEFT JOIN`(`CLASS` 在左側)以保留所有課程。[1分]
- 於 `ON` 子句中正確放置條件 `B.Status = 'Confirmed'`。[1分]
- 正確的 `GROUP BY` 子句與聚合函數 `COUNT(B.BookingID)`。[1分]

(c) [合共: 3 分]
- 正確地將表(`MEMBER`、`BOOKING`、`CLASS`)進行連接,並篩選出 `Instructor = 'Alex'`。[1分]
- 正確對會員屬性進行 `GROUP BY` 分組。[1分]
- 使用 `HAVING COUNT(DISTINCT C.ClassID) >= 2` 的正確 `HAVING` 子句。[1分]

(d) (i) [合共: 3 分]
- 正確的 `UPDATE MEMBER SET Balance = Balance + 20` 基本語法。[1分]
- 篩選條件 `MemberType = 'Gold'`。[1分]
- 子query(子查詢)正確篩選出狀態為 'Confirmed' 的 'Yoga Basic' 預訂。[1分]

(d) (ii) [合共: 2 分]
- 正確將約束命名為「檢查約束(Check Constraint)」。[1分]
- 正確編寫包含 `CHECK (Balance >= 0)` 的 SQL 語法。[1分]

(e) [合共: 2 分]
- 正確的建立檢視表語法 `CREATE VIEW V_CLASS_SUMMARY AS`。[0.5分]
- 正確包含左連接及分組屬性。[0.5分]
- 正確的公式計算 `(COUNT(B.BookingID) * 100.0 / C.MaxCapacity)`。[1分]
題目 3 · Elective Structured Conventional
15
網上零售店「HK-Shop」使用關係數據庫管理顧客的購買記錄。系統在高交易量下會執行大量並發(同時)的事務。其庫存控制系統的簡化模式如下:

`INVENTORY (ProductID, ProductName, StockLevel, UnitPrice)`
`ORDER_LINE (OrderID, ProductID, Quantity)`

(a) 假設顧客 A 和顧客 B 企圖在同一毫秒購買同款產品(`ProductID` = 'P101',其目前的 `StockLevel` = 1)。
(i) 描述在沒有實施事務管理(鎖定,Locking)的情況下,可能會發生的並行(Concurrency)問題。指出該現象的專業術語。(3分)
(ii) 解釋「兩階段鎖定(Two-Phase Locking, 2PL)」如何防止這種並行問題。(2分)
(iii) 然而,鎖定可能會導致「死鎖(Deadlock)」情況。在此情境下描述什麼是死鎖,並提出一種數據庫管理系統(DBMS)可以用來處理死鎖的方法。(3分)

(b) HK-Shop 的數據庫管理員(DBA)希望優化以下頻繁運行的 SQL 查詢的效能:
```sql
SELECT ProductName, UnitPrice
FROM INVENTORY
WHERE UnitPrice BETWEEN 100 AND 500
ORDER BY UnitPrice DESC;
```
(i) 建議並編寫一個 SQL 語句以建立合適的數據庫索引(Index),以加快此查詢的速度。(2分)
(ii) 解釋該索引如何提高查詢效能。(2分)
(iii) 指出在數據庫上建立過多索引的一個負面影響。(1分)

(c) 安全性是一個關鍵問題。DBA 希望將訪問權限授予新聘請的客戶服務主任 "Lucy"。Lucy 應該只被允許查看(但不能修改)訂單詳情,並且她不應該對 `INVENTORY` 表有任何訪問權限。
編寫 SQL 語句以授予 Lucy 對 `ORDER_LINE` 表的適當權限。(2分)

答案

See the detailed solution and marking scheme.

解題

(a) (i)
- 術語:遺失更新(Lost Update)(或競爭條件 Race Condition / 不一致檢索)
- 描述:顧客 A 和顧客 B 同時讀取相同的 `StockLevel`(均為 1)。顧客 A 將其減去 1 變為 0 並寫回。顧客 B 也將其從 1 減為 0 並寫回。結果,兩位顧客都成功購買,但庫存僅減少了一次。其中一個更新被覆蓋並遺失,導致超賣現象。

(a) (ii)
- 當顧客 A 開始購買的事務時,數據庫會獲取該行 'P101' 的排他鎖(Exclusive Lock / X-lock)。這是 2PL 的增長階段。
- 顧客 B 對同一行獲取鎖的請求會被阻塞並置於隊列中。
- 顧客 B 必須等待顧客 A 提交事務並釋放鎖(收縮階段),然後才能讀取更新後的庫存量(此時已變為 0),從而防止不一致的更新。

(a) (iii)
- 死鎖描述:死鎖是指兩個或多個事務無限期地等待對方釋放鎖的情況。例如,事務 1 鎖定了產品 P1 並等待產品 P2 的鎖,而事務 2 鎖定了產品 P2 並等待產品 P1 的鎖。兩者都無法繼續執行。
- DBMS 處理方法(任選其一):
1. 死鎖檢測(Deadlock Detection):DBMS 維護一個等待圖,定期檢測是否存在環路,並終止(回滾)其中一個事務(稱為「犧牲者」)。
2. 死鎖預防(Deadlock Prevention):應用諸如規定鎖獲取順序的協議(例如始終按字母順序鎖定項目)或使用基於時間戳的方案(例如 wound-wait 或 wait-die)。

(b) (i)
```sql
CREATE INDEX idx_price ON INVENTORY (UnitPrice DESC);
-- 或簡寫為:
CREATE INDEX idx_price ON INVENTORY (UnitPrice);
```

(b) (ii)
- 在沒有索引的情況下,DBMS 必須執行全表掃描(Full Table Scan),時間複雜度為 `O(N)`,需檢查表中的每一行以尋找匹配項。
- 使用 `UnitPrice` 上的 B-Tree 索引,索引按排序順序存儲這些值。DBMS 可以執行類似二分搜索的檢索(`O(log N)`)以快速定位邊界(100)並掃描葉子節點至 500,從而避免了全表掃描,並消除了 `ORDER BY UnitPrice DESC` 子句的排序開銷。

(b) (iii)
- 對表數據的任何變更(如 INSERT、UPDATE、DELETE)都需要 DBMS 同時更新對應的索引,這會減慢寫入/數據操作的速度並消耗額外的磁盤存儲空間。

(c)
```sql
GRANT SELECT ON ORDER_LINE TO Lucy;
```

評分準則

(a) (i) [合共: 3 分]
- 正確將此現象命名為「遺失更新(Lost Update)」。[1分]
- 描述兩個事務同時讀取同一個庫存值的初始並發讀取。[1分]
- 描述一個事務的更新如何覆蓋並抹去另一個事務的更新,從而導致邏輯不一致(超賣)。[1分]

(a) (ii) [合共: 2 分]
- 指出 2PL 確保事務在釋放任何鎖之前先獲取鎖(鎖的增長與收縮階段)。[1分]
- 解釋顧客 A 的排他鎖迫使顧客 B 的事務等待/阻塞,直到 A 的事務提交,從而確保隔離性。[1分]

(a) (iii) [合共: 3 分]
- 清晰解釋循環等待(事務 1 持有事務 2 所需的資源,而事務 2 持有事務 1 所需的資源)。[2分]
- 指出正確的 DBMS 處理策略(通過終止犧牲者進行死鎖檢測,或通過資源排序進行死鎖預防)。[1分]

(b) (i) [合共: 2 分]
- 正確使用 `CREATE INDEX` 語法。[1分]
- 正確指定表 `INVENTORY` 和屬性 `UnitPrice`。[1分]

(b) (ii) [合共: 2 分]
- 解釋它通過利用索引搜索(例如 B-tree 搜索範圍掃描)避免了全表掃描。[1分]
- 解釋索引本身已排序,節省了 `ORDER BY` 子句的排序時間。[1分]

(b) (iii) [合共: 1 分]
- 指出過多索引會降低 DML 語句(INSERT/UPDATE/DELETE)的性能,或增加存儲開銷。[1分]

(c) [合共: 2 分]
- 正確使用 `GRANT SELECT` 權限。[1分]
- 正確設定權限目標 `ON ORDER_LINE TO Lucy`。[1分]