關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。
減少資料庫中資料冗餘的過程;
1、第一正規化(1nf):
在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。
例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中的「高階職稱人數」不是乙個原子屬性,若將其拆分為「教授」和「副教授」兩個屬性,則就滿足1nf。
系名稱高階職稱人數
教授副教授
計算機系12
電子系3
42、第二正規化(2nf):
滿足1nf的關係模式會有許多重複值,修改資料可能引起疏漏。為了消除這種資料冗餘和避免更新資料的遺漏,需要使用更加規範的2nf。當且僅當關係模式滿足1nf,且每個非鍵屬性(既不屬於任何候選鍵的屬性,也稱為非主屬性)完全依賴於候選鍵時,則稱r滿足2nf。
例如,有選課關係模式sc(sno,cno,grade,credit),其中(sno,cno)->grade,cno->credit。因此,sc的候選鍵為(sno,cno)。這樣cno->credit就構成了credit對候選鍵(sno,cno)的部分函式依賴。因此,sc不滿足2nf。若要將sc轉化為2nf,可以將它拆分為sc1(sno,cno,grade)和sc2(cno,grade)。
3、第三正規化(3nf):
當且僅當關係模式滿足1nf,且r中沒有非鍵屬性傳遞依賴於候選鍵時,則稱r滿足3nf。
例如學生關係s(sno,sname,dno,dname,location)各屬性分別代表學號,姓名,所在系,系名稱和系位址,其資料如表5-5所示。
snosname
dnodname
location
s01張三
d01計算機系
1號樓s02
李四d01
計算機系
1號樓s03
王五d01
計算機系
1號樓s04
趙六d02
資訊系2號樓
……從各屬性之間的聯絡可以判斷出s的函式依賴有sno->(sname,dno,dname,location),dno->(dname,location)。顯然sno為候選鍵。在函式依賴中有sno->dno->dname與sno->dno->location,這便是傳遞函式依賴。由於dname與location為非鍵屬性,同時傳遞依賴於候選鍵,因此關係模式s不滿足3nf。若要使s滿足3nf,需要將其拆分為s1(sno,sname,dno)和s2(dno,dname,location)。
4、bc 正規化(bcnf):
若關係模式r 是1nf,且每個屬性都不傳遞依賴於r 的候選鍵,則稱r 是bcnf 模式。
資料庫 資料庫設計正規化
在關聯式資料庫中的關係是要滿足一定要求的,滿足不同程度要求為不同正規化,越高的正規化資料庫冗餘越小。但是有些時候一昧的追求正規化減少冗餘,反而會降低資料讀寫的效率,這個時候就要反正規化,利用空間來換時間。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 ...
資料庫正規化
注 表在定義中被稱為關係,記作r 欄位在定義中被稱作屬性 模式 資料庫中有三種模式,外模式,內模式,模式 粗體是關鍵字的意思 斜體為外來鍵 以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了 真暈哦 http blog.csdn.net fantasylu archive 2004 0...
資料庫 正規化
今天要說一點就是我大學好像過得挺失敗的,因為在那一大堆的公式面前我從來沒有搞清楚過正規化,經過大量的背誦好像也是似懂非懂。看來,大學課本要避免一點的就是不要用公式去說明問題,用簡潔的語句更容易明白。工作中這兩年做的資料庫設計也不少,反回來看這樣公式說明的正規化還是不明白。在網上搜了一點,一下就明白了...