範式理論,資料庫範式理論
目前的關係型資料庫有六種範式:第一範式(1NF),第二範式(2NF),第三範式(3NF),第四範式(四NF),第五範式(5NF),第六範式(6NF)。滿足最低要求的範式是第一範式。在第一範式的基礎上進一步滿足更多要求的稱為第二範式,其餘的範式依次類推。一般說來,資料庫滿足第三範式即可。
第一範式是最低的正常化要求,第一範式要求資料表不能存在重複的記錄,即存在一個關鍵字。1NF的第二個要求是每個欄位都不可再分,即已經分到最小,關聯式資料庫的定義就決定了資料庫滿足這一條。第一範式是設計資料庫表的最低要求,其最主要的特點就是實體的屬性不能再分,映射到表中,就是列(欄位)不能再分,如下:
學號 |
姓名 |
連絡方式 |
101 |
李曉峰 |
0995-23451214 675423369 |
如上面的連絡方式還可以再分,這樣就不符合第一範式,我們應該這樣子改:
學號 |
姓名 |
電話 |
QQ |
101 |
李曉峰 |
0995-23451214 |
675423369 |
第二範式:
如果一個關係屬於1NF,且所有的非主關鍵字段都完全地依賴於主關鍵字,則稱之為第二範式,簡記為2NF
姓名 |
選秀課程 |
教材 |
張三 |
Struts2 |
Struts2完全手冊 |
李四 |
Struts2 |
Struts2完全手冊 |
李四 |
Oracle12c |
Oracle開發手冊 |
上面的這個表是符合第一範式的,但是上面的資料中可以看出,姓名和選秀的課程是有對應的關係,但是姓名和教材是沒有什麼對應的關係,但是選秀課程和教材是有關係的,所以我們應該設計如下的表:
姓名 |
選秀課程 |
張三 |
Struts2 |
李四 |
Struts2 |
李四 |
Oracle12c |
課程 |
教材 |
Oracle12c |
Oracle開發手冊 |
Struts2 |
Struts完全手冊 |
第三範式
如果一個關係屬於2NF,且每個非關鍵字不傳遞依賴於主關鍵字,這種關係是3NF。如下:
學好 |
姓名 |
班級 |
系別 |
101 |
張三 |
C++1班 |
電腦技術 |
102 |
李四 |
英語1班 |
外語專業 |
上面的表示符合第二範式的,但是如果我們已經知道了這個學生所在的班級的話,那麼我們也就可以知道了這個學生所在的系別,那麼就是說系別資訊是多餘的。我們如下設計:
學好 |
姓名 |
班級 |
101 |
張三 |
C++1班 |
102 |
李四 |
英語1班 |
班級 |
系別 |
C++1班 |
電腦技術 |
英語1班 |
英語1班 |