資料庫基礎

訂單表格(訂單編號, 商品編號, 數量, 客戶編號, 客戶名稱)的主鍵為{訂單編號, 商品編號},函數相依為 {訂單編號, 商品編號} → 數量、訂單編號 → 客戶編號、客戶編號 → 客戶名稱。將此表格正規化到第三正規化(3NF)的結果,下列何者正確?

  1. A訂單明細(訂單編號, 商品編號, 數量, 客戶編號)、客戶(客戶編號, 客戶名稱)
  2. B訂單明細(訂單編號, 商品編號, 數量)、訂單(訂單編號, 客戶編號)、客戶(客戶編號, 客戶名稱)
  3. C訂單明細(訂單編號, 商品編號, 數量)、訂單(訂單編號, 客戶編號, 客戶名稱)
查看答案與解析

正確答案:B. 訂單明細(訂單編號, 商品編號, 數量)、訂單(訂單編號, 客戶編號)、客戶(客戶編號, 客戶名稱)

第二正規化是在第一正規化之上,沒有只相依於主鍵一部分之欄位(部分函數相依)的狀態。訂單編號 → 客戶編號 是只由主鍵一部分的訂單編號就決定客戶編號的部分函數相依,因此原本的表格屬於第一正規化,但不屬於第二正規化。把由訂單編號決定的欄位分出成為訂單(訂單編號, 客戶編號, 客戶名稱),就成為第二正規化。第三正規化是在第二正規化之上,沒有經由主鍵以外的欄位而決定之欄位(遞移函數相依)的狀態。訂單表格中仍留有 訂單編號 → 客戶編號 → 客戶名稱 的遞移函數相依,因此再分出客戶(客戶編號, 客戶名稱)。如此一來,訂單明細(訂單編號, 商品編號, 數量)、訂單(訂單編號, 客戶編號)、客戶(客戶編號, 客戶名稱)這3個表格就屬於第三正規化。分開的表格以訂單編號與客戶編號連結,即可還原成原本的表格。

  • A. 訂單明細中仍留有只由訂單編號決定的客戶編號,存在部分函數相依,因此連第二正規化都不是。
  • B. 正確。部分函數相依與遞移函數相依都已去除,屬於第三正規化。
  • C. 這屬於第二正規化,但訂單表格中仍留有 訂單編號 → 客戶編號 → 客戶名稱 的遞移函數相依。
練習這個領域 前往領域頁面

相關計算工具

資料庫基礎的其他題目

  1. 員工表格(員工編號, 姓名, 部門代碼, 部門名稱)的主鍵為員工編號,每個欄位都只有一個值。函數相依為 員工編號 → 姓名、員工編號 → 部門代碼、部門代碼 → 部門名稱。此表格的正規化形式,下列何者正確?
  2. 在以讀取與彙總為主的資料庫中,有時會刻意把正規化後的表格合併成一個,讓相同資料重複保存(反正規化)。此設計的優點與缺點組合,下列何者正確?
  3. 在E-R圖中,學生與課程之間有「一位學生修多門課,一門課有多位學生修」的多對多關係。以關聯式資料庫的表格實現此關係的適當方法是下列何者?
  4. 在帳戶表格中開始一筆交易,執行從帳戶A的餘額減去300的UPDATE,以及在帳戶B的餘額加上300的UPDATE。之後執行ROLLBACK而非COMMIT。帳戶表格會變成怎樣?
  5. 在交易應具備的ACID特性中,「從帳戶A扣款並存入帳戶B的轉帳處理,即使途中發生故障,也只會是兩者都完成或完全不進行」的性質是下列何者?