標籤:mysql 學習筆記 mysql入門
設計範式(NF = Normal Format)
範式:規範的格式。
範式是設計關聯式資料庫必須遵守的規則。
如果我們滿足了設計範式的要求,則資料庫會簡潔,結構清晰。
反之,會出現資料冗餘,還有插入、刪除、修改資料出現異常。
設計範式種類:1NF、2NF、3NF、BCNF(巴德斯科範式)、4NF、5NF(完美範式)。
1NF是最寬鬆的,依次遞增限制越大。
一般資料庫只需要滿足到3NF就可以了。
1、1NF(第一範式):欄位的原子性
要求:資料是二維表,每一列都不能在分割,屬性不能再分割,欄位保證原子性。
不滿足1NF的資料庫,則為非關係型資料庫。
不滿足1NF的2個例子:
name
|
tel |
age |
| 小明 |
13988774444,011-15945612 |
1 |
| 小紅 |
16812314725 |
0 |
| name |
手機,有線電話 |
age |
| 小明 |
13988774444,011-15945612 |
1 |
| 小紅 |
16812314725,無 |
0 |
解決辦法:
| name |
手機 |
有線電話 |
age |
| 小明 |
13988774444 |
011-15945612 |
1 |
| 小紅 |
16812314725 |
無 |
0 |
2、2NF(第二範式):消除部分(不完全)依賴
要求:滿足1NF的前提下,消除欄位對主鍵的部分依賴,從而完全依賴於主鍵。
依賴:如果欄位A一旦確定,則可以指出B欄位的值。
部分(不完全)依賴:依賴其中某個部分的值。
不滿足2NF的例子:
學生 |
課程 |
老師姓名 |
老師學曆 |
課程教材 |
上課教室 |
上課時間 |
| 小明 |
二年級語文上 |
張三 |
研究生 |
二年級語文上冊 |
102 |
8:00 |
| 小紅 |
五年級數學上 |
李四 |
博士 |
五年級數學上冊 |
306 |
16:00 |
一個課程,一定指定了某個教材,一年級語文上肯定用的是《一年級語文上冊》,那麼就有課程推出教材。課程決定了教材,這就叫做部分依賴。
解決辦法,拆分成二個或者若干個表:
| 學生 |
課程 |
老師 |
老師學曆 |
上課教室 |
上課時間 |
| 小明 |
二年級語文上 |
張三 |
研究生 |
102 |
8:00 |
| 小紅 |
五年級數學上 |
李四 |
博士 |
306 |
16:00 |
課程 |
教材 |
| 二年級語文上 |
二年級語文上冊 |
| 五年級數學上 |
五年級數學上冊 |
3、3NF:消除傳遞依賴
要求:滿足2NF的前提下消除傳遞依賴。
當表裡存在不只一類獨立實體,資料也可能存在冗餘,在插入、修改、刪除、時可能出現混亂的情況。
↓解決辦法:拆分成3個表,利用主鍵建立關係。
學生學號 |
學生姓名 |
學生課程 |
教師 |
| 110 |
小明 |
001 |
578 |
| 911 |
小紅 |
005 |
561 |
課程ID |
課程名稱 |
教材名稱 |
001 |
二年級語文上 |
二年級語文上冊 |
005 |
五年級數學上 |
五年級數學上冊 |
教師ID |
老師姓名 |
老師學曆 |
| 578 |
張三 |
研究生 |
| 561 |
李四 |
博士 |
4、BC範式(BCNF):符合3NF,並且主屬性不依賴於主屬性。
若關係模式屬於第一範式,且每個屬性都不傳遞依賴於鍵碼,則R屬於BC範式。
通常:BC範式的條件有多種等價的表述:每個非平凡依賴的左邊必須包含鍵碼;每個決定因素必須包含鍵碼。
BC範式既檢查非主屬性,又檢查主屬性。當只檢查非主屬性時,就成了第三範式。滿足BC範式的關係都必然滿足第三範式。
還可以這麼說:若一個關係達到了第三範式,並且它只有一個候選碼,或者它的每個候選碼都是單屬性,則該關係自然達到BC範式。
一般,一個資料庫設計符合3NF或BCNF就可以了。在BC範式以上還有第四範式、第五範式。
5、第四範式:要求把同一表內的多對多關係刪除。
6、第五範式:從最終結構重建立立原始結構。
本文出自 “一起學習交流” 部落格,請務必保留此出處http://chenhaolinux.blog.51cto.com/9609922/1710794
MySQL學習筆記(6)之設計範式