關係模式:關係模式相當於一張二維表的框架,在這個框架下填入資料,稱為關係模式的乙個例項,或者叫關係(r)。
r(a1,a2,a3...ai):r是關係名,ai是關係的屬性名。乙個關係名對應一張表,關係名對應表名,屬性對應表中的列名。
關係模式的簡化表示法 r。
•未經規範化的資料庫一般都有下述缺點:
較大的資料冗餘,資料一致性差,資料修改複雜,對錶進行插入、刪除、更新時會產生插入、更新、刪除異常。規範化的作用就在於盡量去除冗餘,使資料保持一致,使資料修改簡單,除去在表中進行插入、刪除時產生的異常,規範化後的表一般都較小。
第一正規化(1nf)
在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫
定義:在關係模型中的每乙個具體關係r中,如果每個屬性都是不可再分的,則稱r屬於第一正規化(1nf),記作r∈1nf。
第一正規化(1nf):資料庫表中的字段都是單一屬性的,不可再分。
•例:如職工號,姓名,**號碼組成乙個表(乙個人可能有乙個辦公室**和乙個家裡**號碼) 規範成為1nf
•總結:不能有重複的列,列不可再分.
•不滿足第一正規化條件的關係為非正規化關係,在關聯式資料庫中,凡非正規化關係必須要化成正規化關係.
e.g.如下的資料庫表是符合第一正規化的:
欄位1 欄位2 欄位3 欄位4
而這樣的資料庫表是不符合第一正規化的:
欄位1 欄位2 欄位3(欄位3.1,欄位3.2) 欄位4
第二正規化(2nf)
第二正規化是在第一正規化的基礎上建立起來的,即滿足第二正規化必須先滿足第一正規化(1nf)。
定義:如果關係模式r屬於1nf,且每乙個非主屬性都完全依賴於主碼,則稱關係r是屬於第二正規化的,記作r屬於2nf。
第二正規化(2nf)說明:要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴於主關鍵字的一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。
e.g.
假定選修課關係表為selectcourse(學號,姓名,年齡,課程名稱,成績,學分),關鍵字為組合關鍵字(學號,課程名稱),因為存在如下決定關係:
(學號,課程名稱)->(姓名,年齡,成績,學分)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:
(課程名稱)->(學分)
(學號)->(姓名,年齡)
即存在學分和姓名,年齡部分依賴於主關鍵字。
由於不符合2nf,這個選課關係表會存在如下問題:
(1)資料冗餘:
同一門課程會有n個學生選修,「學分」就會重複n-1次;同乙個學生選修了m門課程,那姓名和年齡會重複m-1次。
(2)更新異常:
若課程的學分更新,那必須把表中所有的學分值都更新,不然會出現同一課程出現不同的學分。
(3)插入異常:
假設要開設一門新的課程,但是目前還沒有學生選修這門課程,由於沒有學號導致資料無法錄入到資料庫中。
(4)刪除異常:
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫中刪除,但是,同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
所以我們將設計修改了一下,把選課關係表selectcourse改為如下三個表:
學生:student(學號,姓名,年齡)
課程:course(課程名稱,學分)
選課關係:selectcourse(學號,課程名稱,成績)
這樣的資料庫表是符合第二正規化的,消除了資料冗餘,更新,插入,刪除異常。
注:所有的單關鍵字的資料庫表都符合第二正規化,因為不可能存在組合關鍵字,也就不可能存在非主屬性部分依賴於主關鍵字了。
第三正規化
定義:如果關係模式r屬於2nf,並且r中的非主屬性不傳遞依賴與r的主碼,則稱關係r是屬於第三正規化的。(個人總結,非主屬性必須直接依賴於主碼,不能存在通過其他非主屬性傳遞依賴於主碼)
所謂傳遞依賴,就是a依賴於b,b依賴於c,則a傳遞依賴於c。
因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:
關鍵字段->非關鍵字段x->非關鍵字段y
e.g.
假定學生關係表為student(學號,姓名,年齡,所在學院,學院地點,學院**),關鍵字為單一的學號,所以肯定符合第二正規化,但是因為存在非關鍵字學院地點和學院**依賴於所在學院,即傳遞依賴於學號,所以此關係表不符合第三正規化。同樣會導致資料冗餘,ddl操作異常等問題。
所以我們可以對其進行修改:
學生:(學號,姓名,年齡,所在學院)
學院:(學院,地點,**)
這樣的資料庫表就符合第三正規化了。
總結:
a. 規範化目的是使結構更合理,消除儲存異常,減少資料冗餘,便於插入,刪除,更新。
b. 原則:遵從概念單一化「一事一地」原則,即乙個關係模式描述乙個實體或實體建的一種聯絡。
c. 方法:將關係模式投影,分解成兩個或兩個以上的關係模式。
d. 分解後的關係模式集合應當與原關係模式保持等價關係,即通過自然聯接可以恢復原關係而不丟失資訊,並保持屬性間合理的聯絡。
注意:乙個關係模式結合分解可以得到不同關係模式集合,也就是說分解方法不是唯一的。最小冗餘的要求必須以分解後的資料庫能夠表達原來資料庫所有資訊為前提來實現的。其根本膜表是節省儲存空間,避免資料不一致性,提供對關係的操作效率,同事滿足應用需求。實際上,並不一定要求全部模式都達到bcnf不可。有時候故意保留部分冗餘可能更方便資料查詢。尤其對於那些更新頻度不高,查詢頻率極高的資料庫系統更是如此。在關聯式資料庫中,除了函式依賴之外還有多值依賴,聯接依賴的問題,從而提出了第四正規化,第五正規化等更高一級的規範化要求。
關係模式規範化
3nf規範化 通過該演算法可以獲得乙個保持函式依賴性並滿足3nf的關係模式分解 先求出fmin 1 x a,xa r 那麼xa單獨構成乙個關係模式 2 如果關係模式r中的某些屬性與函式依賴集f的左右部屬性均無關的話,將他們單獨作為乙個模式 3 出現x a1,x a2 可以合併成乙個關係模式 x a1...
關係模式的規範化
原文路徑 了解關係模式規範化的作用 掌握第一正規化 重點 掌握第二正規化 重點 掌握第三正規化 重點 回顧關係模式 關係模式 關係模式相當於一張二維表的框架,在這個框架下填入資料,稱為關係模式的乙個例項,或者叫關係 r r a1,a2,a3.ai r是關係名,ai是關係的屬性名。乙個關係名對應一張表...
MySQL關係規範化
指導老師 桃群老師 1 函式依賴 什麼是函式依賴?比如學生管理系統資料庫,有學生姓名 sname 學生系名 sdept 學生學號 sno 等等。乙個學號只能唯一確定乙個學生,乙個學生只在乙個系學習。所以,當 學號 確定後,學生姓名和該學生所在系也被唯一確定了。這時我們可以說 sno函式決定sname...