310 likes | 392 Views
Chapter 7. 正規化. 大綱. 修改異常 函數相依 主要正規形式 關聯獨立 實務考量. 修改異常. 非預期的副效應 插入、修改和刪除過多的資料 過多冗餘所造成 一個地方一件事實. Big 大學資料庫表格. 函數相依. 表格中對可能某些列的限制 像 FK 和 PK 的數值中立 判定 了解商業法則. FD 定義. X Y X ( 函數上 ) 決定 Y X: 左邊 (LHS) 或決定因子 每一個 X 值, 最多有一個 Y 值 與候補鍵相似. FD 圖形和序列.
E N D
Chapter 7 正規化
大綱 • 修改異常 • 函數相依 • 主要正規形式 • 關聯獨立 • 實務考量
修改異常 • 非預期的副效應 • 插入、修改和刪除過多的資料 • 過多冗餘所造成 • 一個地方一件事實
函數相依 • 表格中對可能某些列的限制 • 像 FK和PK 的數值中立 • 判定 • 了解商業法則
FD 定義 • X Y • X (函數上) 決定Y • X: 左邊(LHS) 或決定因子 • 每一個X值,最多有一個Y值 • 與候補鍵相似
FD 圖形和序列 StdSSN StdCity, StdClass OfferNo OffTerm, OffYear, CourseNo, CrsDesc CourseNo CrsDesc StdSSN, OfferNo EnrGrade
資料中的 FD • 根據資料證明不得存在 (不是不存在) • 兩列有相同的X 值但不同的Y 值
正規化 • 移除不必要冗餘的過程 • 應用正規形式 • 指出FD • 決定到底FD 是否為正規形式 • 如果有違例時,分割表格以滿足正規形式
1NF • SQL:1999 資料庫的起始點 • 沒有重複的群組: 單一層的橫列
2NF/3NF 的組合定義 • 鍵欄位: 候補鍵或部分的候補鍵 • 可比擬為傳統的正義誓言 • 每一個非鍵欄位依賴一個鍵、整個鍵,就只是鍵 • 通常分開定義
2NF • 每一個非鍵欄位依賴整個鍵,不是部分鍵 • 違例 • 部分鍵 非鍵 • 違例只對組合鍵而言
2NF 範例 • Big 大學資料庫表格的許多違例 • StdSSN StdCity, StdClass • OfferNo OffTerm, OffYear, CourseNo, CrsDesc • 分割表格 • UnivTable1 (StdSSN, StdCity, StdClass) • UnivTable2 (OfferNo, OffTerm, OffYear, CourseNo, CrsDesc)
3NF • 每一個非鍵欄位只依賴鍵,不是非鍵欄位 • 違例: 非鍵 非鍵 • 替代的公式化 • 沒有遞移的FD • A B, B C 那麼A C • OfferNo CourseNo, CourseNo CrsDesc then OfferNo CrsDesc
3NF 範例 • UnivTable2 的一個違例 • CourseNo CrsDesc • 分割表格 • UnivTable2-1 (OfferNo, OffTerm, OffYear, CourseNo) • UnivTable2-2 (CourseNo, CrsDesc)
BCNF • 每一個決定因子必須是候補鍵 • 較簡易的定義 • 應用簡易綜合程序 • 某些特例不在 3NF 範圍內 • 部分鍵 部分鍵 • 非鍵 部分鍵 • 特例不多見
BCNF 範例 • Big 大學資料庫的許多違例 • StdSSN StdCity, StdClass • OfferNo OffTerm, OffYear, CourseNo • CourseNo CrsDesc • 分割成四個表格
簡易綜合程序 • 自 LHS 移除無關的欄位 • 移除衍伸的FD • 群組FD ,每一個群組有相同的決定因子 • 對於每一個FD 群組,以決定因子做為製作一個表格的主鍵 • 合併表格,其中一個表格含有另一個表格的所有欄位
簡易綜合範例 • 以第7 張投影片的 FD開始 • 步驟 1: 沒有不相關的欄位 • 步驟2: 移除OfferNo CrsDesc • 步驟3: LHS 已經排妥 • 步驟 4: 四個表格(Student, Enrollment, Course, Offering) • 步驟5: 沒有冗餘表格
多重候補鍵 • 多重候補鍵並沒有違背 3NF或 BCNF • 簡易綜合程序的步驟5產生多重候補鍵的表格 • 不能因為它有多重候補鍵就不應分割表格 • 分割表格不一定就會影響查詢效能
關聯獨立和 4NF • M 向關聯可自二元關聯衍伸而得 • 分割為二元關聯 • 特殊的問題 • 4NF 與FD 無關
MVDs 和 4NF • MVD: 不易識別 • A B | C (多重決定) • A 牽涉到B 和C 的值有關 • B 和C 不相依 • 非顯然MVD: 也不是FD • 4NF: 沒有非顯然MVD
MVD 表示法 已知線上的兩列, 如果MVD為真,則線下的兩列在表格裡面 A B | C OfferNo StdSSN | TextNo
較高層次的正規形式 • M 向關聯的5NF • DKNF: 完全的正規形式 • DKNF 是一個理想的,但不切實際的正規形式
正規化的角色 • 精鍊 • 使用於ERD 之後 • 應用於表格設計或ERD • 初始設計 • 紀錄屬性和FD • 沒有初始的ERD • 正規化後,或可反向 ERD 工程
正規化目標 • 更新偏差 • 資料庫沒有更新就不需考慮(資料倉儲) • 去正規化 • 蓄意違背正規化 • 有些FD 會導致異常 • 可改善效能
摘要 • 注意不需要的冗餘 • FD 是重要的限制 • 追求BCNF • 使用CASE 工具處理大型問題 • 資料庫開發的重要工具 • 專注於正規化目標