[list]
[*][b]第二正規化(2nf):[/b]單關鍵字的表,或者若為組合關鍵字則必須沒有關鍵字組合鍵中的某個字段→非關鍵字段的表;()
[*][b]第三正規化(3nf):[/b]在第二正規化的基礎上,資料表中如果不存在傳遞函式依賴:關鍵字段 → 非關鍵字段x → 非關鍵字段y
[/list]
[size=large][b]第一正規化(1nf):[/b][/size]資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。 很顯然,在現有的dbms中設計出不符合第一正規化的資料庫都是不可能的。
[size=large][b]第二正規化(2nf):[/b][/size]資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴(部分函式依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴於任意一組候選關鍵字。
([b]補充2023年7月相對加深的理解:[/b][i]所有非關鍵字段,都必須完全依賴於組合鍵,即所有非關鍵字段都必須通過組合鍵所有字段才能確定[/i])
[b]舉例如下:[/b]
假定選課關係表為selectcourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關係:
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的字段決定非關鍵字的情況。
由於不符合2nf,這個選課關係表[b]會存在如下問題: [/b]
[b](1) 資料冗餘: [/b]
同一門課程由n個學生選修,「學分」;就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。
[b](2) 更新困難:[/b]
若調整了某門課程的學分,資料表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
[b](3) 插入異常:[/b]
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有「學號」關鍵字,課程名稱和學分也無法記錄入資料庫。
[b](4) 刪除異常: [/b]
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
把選課關係表selectcourse改為如下三個表:
學生:student(學號, 姓名, 年齡);
課程:course(課程名稱, 學分);
選課關係:selectcourse(學號, 課程名稱, 成績)。
這樣的資料庫表是符合第二正規化的, 消除了資料冗餘、更新異常、插入異常和刪除異常。
另外,所有單關鍵字的資料庫表都符合第二正規化,因為不可能存在組合關鍵字。
[size=large][b]第三正規化(3nf):[/b][/size]在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合第三 正規化。所謂傳遞函式依賴,指的是如果存在「a → b → c」的決定關係,則c傳遞函式依賴於a。因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:關鍵字段 → 非關鍵字段x → 非關鍵字段y
假定學生關係表為student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**),關鍵字為單一關鍵字「學號」,因為存在如下決定關係:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院**)
這個資料庫是符合2nf的,但是不符合3nf,因為存在如下決定關係:
(學號) → (所在學院) → (學院地點, 學院**)
即存在非關鍵字段「學院地點」、「學院**」對關鍵字段「學號」的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關係表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, **)。
這樣的資料庫表是符合第三正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
三正規化的理解
1nf 字段不可分 2nf 有主鍵,非主鍵字段依賴主鍵 3nf 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴 不符合第一正規化的例子 關聯式資料庫中create不出這樣的表 表...
三正規化理解
再次強化資料庫正規化,別在犯迷糊 大部分資料庫從業人員都知道關聯式資料庫有三個基本的正規化,即 第一正規化,第二正規化,第三正規化。當然也有牛人知道bc正規化,第四正規化,第五正規化,第六正規化,甚至還有個dk正規化。本人對資料庫的正規化概念也是一知半解的,想想有些可笑,搞資料庫的竟然不了解關聯式資...
SQL三正規化理解
sql三正規化的理解 做為一條有用的資料,那麼他必須是完整的,也就是資料的完整性,那怎麼才能做到資料的完整性呢?在設計資料庫時我們需要滿足三正規化的要求,那什麼是三正規化呢,三正規化分為三部分,第一步是資料的原子性,所謂原子就是不可分割的最小的單位,我們設計的表裡面的列必須是乙個能夠表達完整的資訊的...