要使關係達到 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 的內容是什麼?
``` 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 ```
``` 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)` 的返回值是多少?
由於該電腦 IP 地址的最後一個八位組為 45,它屬於子網 2(.32 至 .63)。 在選項中,`192.168.10.60` 的最後一個八位組(60)在此範圍內,因此它與該電腦屬於同一個子網。
评分标准
選擇正確選項 C 得 1 分。
题目 25 · MCQ
1 分
Alice 想使用公開金鑰密碼學發送一條機密訊息給 Bob。她還希望確保 Bob 能夠驗證該訊息確實是由她發送的(身份驗證)。以下哪項描述了正確的加密過程?
A.Alice 用 Bob 的公開金鑰加密訊息,然後用她自己的公開金鑰加密結果。
B.Alice 用她自己的私有金鑰加密訊息,然後用 Bob 的公開金鑰加密結果。
C.Alice 用 Bob 的私有金鑰加密訊息,然後用她自己的私有金鑰加密結果。
D.Alice 用 Bob 的公開金鑰加密訊息,然後用她自己的私有金鑰加密結果。
查看答案详解收起答案详解
解题
要同時達到機密性和身份驗證: 1. Alice 用她自己的私有金鑰加密訊息。由於只有 Alice 擁有自己的私有金鑰,任何能夠使用 Alice 的公開金鑰解密該訊息的人,就知道該訊息必定來自她(身份驗證)。 2. 然後,Alice 用 Bob 的公開金鑰加密所產生的密文。由於只有 Bob 擁有其私有金鑰,因此只有 Bob 可以進行第一階段解密,從而確保沒有其他人可以閱讀該訊息(機密性)。
關係 `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)?
A.`192.168.10.0`
B.`192.168.10.64`
C.`192.168.10.72`
D.`192.168.10.80`
查看答案详解收起答案详解
解题
要尋找網絡地址,我們需要將 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`。
Alice 想要通過互聯網向 Bob 發送一份機密文件。為了確保**機密性**(只有 Bob 能閱讀該文件)和**真實性**(Bob 能驗證 Alice 是發送者),Alice 應該使用以下哪一種加密方法?
A.先使用 Alice 的私鑰加密文件,再使用 Bob 的公鑰加密其結果。
B.先使用 Bob 的私鑰加密文件,再使用 Alice 的公鑰加密其結果。
C.先使用 Alice 的公鑰加密文件,再使用 Bob 的私鑰加密其結果。
D.先使用 Bob 的公鑰加密文件,再使用 Alice 的公鑰加密其結果。
查看答案详解收起答案详解
解题
為了同時實現機密性和真實性: 1. **真實性/完整性**:Alice 使用她自己的私鑰對文件進行加密(簽署)。因為只有 Alice 擁有她自己的私鑰,任何使用 Alice 的公鑰解密該文件的人都可以確認該文件必然源自 Alice。 2. **機密性**:Alice 隨後使用 Bob 的公鑰對前一步的結果進行加密。因為只有 Bob 擁有對應的私鑰,所以只有 Bob 可以解密外層。 因此,選項 A 是正確的。(註:在實際應用中,為了優化性能,通常會對主體文件使用對稱加密,但非對稱密鑰封裝的邏輯是相同的)。
(b) (i) DHCP(動態主機配置協議)伺服器會自動、動態地將網絡配置(如 IP 地址、子網掩碼、默認網關和 DNS 伺服器)分配給連接的設備,避免手動設置的麻煩和 IP 衝突問題。 (ii) NAT(網絡地址轉換)在內部設備訪問外部網絡時,將內部的專有 IP 地址轉換為單一的公用 IP 地址,這既節省了有限的公用 IPv4 地址,又隱藏了內部網絡結構以增加安全性。
(c) DNS(域名系統)。由於可以通過 IP 地址訪問該網站,但無法通過域名訪問,表明將域名映射為 IP 地址的解析服務出現了問題。
``` 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) ```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) 假設顧客 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分)
(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),從而防止不一致的更新。