什麼是正規化
依據欄位之間的函數相依分割關聯式資料庫的表格,讓同一事實不會記錄在多處的設計步驟。可消除資料重複,防止修改異常、插入異常與刪除異常。有第一正規化到第三正規化、BCNF等階段。
日文名稱: 正規化
「正規化」出現在1領域的4道練習題中(資料庫基礎等)。
這個名詞所屬的領域: 資料庫基礎
依據欄位之間的函數相依分割關聯式資料庫的表格,讓同一事實不會記錄在多處的設計步驟。可消除資料重複,防止修改異常、插入異常與刪除異常。有第一正規化到第三正規化、BCNF等階段。
日文名稱: 正規化
「正規化」出現在1領域的4道練習題中(資料庫基礎等)。
這個名詞所屬的領域: 資料庫基礎
在未正規化的表格中,同一事實會在多筆資料列中重複記錄。例如在員工表格的每筆資料列中都存入部門名稱,那麼變更部門名稱時,就必須改寫該部門所有員工的資料列,只要有遺漏,內容就會不一致(修改異常)。尚無員工的部門無法登錄(插入異常),刪除部門最後一位員工時,連部門資訊也會消失(刪除異常)。把部門資訊分到另一個表格,就能讓一個事實只記錄在一處,防止這些異常。
第一正規化是每個欄位都只有一個不重複之值的狀態。第二正規化是在第一正規化之上,沒有只相依於主鍵一部分之欄位(部分函數相依)的狀態,在主鍵由多個欄位組成的表格中會成為問題。第三正規化是在第二正規化之上,沒有經由主鍵以外的欄位而決定之欄位(遞移函數相依)的狀態。例如有 訂單編號 → 客戶編號 → 客戶名稱 這樣的相依時,就把客戶編號與客戶名稱分到另一個表格。分割時要讓分開的表格以共同欄位連結後,能還原成原本的表格(不遺失資訊)。
正規化能消除重複,但表格分開後,每次搜尋都需要連結。在以讀取與彙總為主的資料庫等場合,有時為了效能,會刻意合併表格、保留重複,這稱為反正規化。此時需要有一致地修改重複資料的機制。在修改頻繁的業務處理資料庫中,一般以正規化到第三正規化為基本。
正確答案:C. 消除資料重複,防止更新時內容不一致等異常
正規化是依據欄位之間的函數相依(某欄位的值確定後,另一欄位的值就唯一確定的關係)分割表格,讓同一事實不會記錄在多處的設計步驟。例如在員工表格的每筆資料列中都寫入部門名稱,那麼變更部門名稱時,就必須改寫該部門所有員工的資料列,只要有遺漏,內容就會不一致(更新異常)。此外還會發生無法登錄尚無員工的部門(插入異常)、刪除部門最後一位員工時連部門資訊也一併消失(刪除異常)等問題。若把部門資訊分到部門表格,部門名稱只需修改一處即可。另一方面,表格分開後,搜尋時的連結會增加,因此正規化不一定會讓搜尋變快。
正確答案:B. 訂單明細(訂單編號, 商品編號, 數量)、訂單(訂單編號, 客戶編號)、客戶(客戶編號, 客戶名稱)
第二正規化是在第一正規化之上,沒有只相依於主鍵一部分之欄位(部分函數相依)的狀態。訂單編號 → 客戶編號 是只由主鍵一部分的訂單編號就決定客戶編號的部分函數相依,因此原本的表格屬於第一正規化,但不屬於第二正規化。把由訂單編號決定的欄位分出成為訂單(訂單編號, 客戶編號, 客戶名稱),就成為第二正規化。第三正規化是在第二正規化之上,沒有經由主鍵以外的欄位而決定之欄位(遞移函數相依)的狀態。訂單表格中仍留有 訂單編號 → 客戶編號 → 客戶名稱 的遞移函數相依,因此再分出客戶(客戶編號, 客戶名稱)。如此一來,訂單明細(訂單編號, 商品編號, 數量)、訂單(訂單編號, 客戶編號)、客戶(客戶編號, 客戶名稱)這3個表格就屬於第三正規化。分開的表格以訂單編號與客戶編號連結,即可還原成原本的表格。
第二正規化是沒有只由主鍵一部分決定之欄位(部分函數相依)的狀態。第三正規化則是在此之上,也沒有經由主鍵以外的欄位而決定之欄位(遞移函數相依)的狀態。主鍵只有一個欄位的表格,只要屬於第一正規化,就自動屬於第二正規化。
不一定。正規化的目的是消除重複、防止修改時的異常,表格分開後,搜尋時的連結會增加。在讀取效能很重要時,有時也會刻意反正規化。
正規化是依據欄位之間的函數相依(某欄位的值確定後,另一欄位的值就唯一確定的關係)分割表格,讓同一事實不會記錄在多處的設計步驟。
將關聯式資料庫的表格正規化,主要目的是下列何者?第二正規化是在第一正規化之上,沒有只相依於主鍵一部分之欄位(部分函數相依)的狀態。
訂單表格(訂單編號, 商品編號, 數量, 客戶編號, 客戶名稱)的主鍵為{訂單編號, 商品編號},函數相依為 {訂單編…每個欄位都只有一個不重複的值,因此屬於第一正規化。
員工表格(員工編號, 姓名, 部門代碼, 部門名稱)的主鍵為員工編號,每個欄位都只有一個值。函數相依為 員工編號 → …正規化能消除資料重複、防止更新異常,但每次搜尋都需要連結多個表格。
在以讀取與彙總為主的資料庫中,有時會刻意把正規化後的表格合併成一個,讓相同資料重複保存(反正規化)。此設計的優點與缺點…