第一正規化(1nf)即滿足原子性:資料庫表中每一列都是不可分割的資料項,集合、陣列等屬於非原子項,此類屬性必須拆分為不同的屬性。
例子:學生****包括手機號和郵箱,
學號****
1138****8888
學生可能只有手機號或郵箱,如果學生既有手機號又有郵箱,這種情況應該使用「手機號」和「郵箱」兩個屬性而不能採用「****」乙個屬性來儲存。
學號手機郵箱1
138****8888
第二正規化(2nf)即在1nf基礎上,所有非主屬性完全依賴於主屬性。
完全依賴:設一函式依賴x→y,若存在z,使得z→y成立。稱x→y為區域性依賴,否則稱x→y為完全依賴
例子:學生的班級與班主任,若學生表設計為
學號班級
班主任1
三年二班
***學號
→班主任
與班級
→班主任
同時成立,如果班集更換班主任,需要修改該班級所有學生的記錄。設計違反第二正規化。正確的設計方式為
學號班級
1三年二班
班級班主任三年二班
***第三正規化(3nf)即在2nf基礎上,任何非主屬性不依賴於其它非主屬性,要求乙個關係中不包含已在其它關係已包含的非主關鍵字資訊,即不存在依賴的傳遞。
設存在函式依賴x→y→z,稱z傳遞依賴與x
例子:課程資訊
課程教師
教師職稱
高數***
教授如果教師並沒有代課,那麼教師的職稱無法儲存,即存在課程
→教師
→職稱
,對於教師的職稱屬性構成傳遞依賴。設計違反第三正規化,正確的設計方式為
課程教師
高數*** 教師
教師職稱
***教授
巴斯-科德正規化(bcnf)即在3nf基礎上,主屬性不依賴於主屬性,若滿足第三正規化且只有乙個候選碼,即達成bc正規化。
例子:學生的選課資訊,設計為關聯表:
學生表:
學號姓名1小明
教師表:
教師工號
教師姓名
1***
課程表課程編號
課程名稱1高數
選課表選課記錄id
學號教師工號
課程編號11
11「小明」,「***」和「高數」分別是「學生」,「教師」和「課程」的主屬性,如果沒有學生選***的高數課,那麼***代有沒有代高數?合理的設計為:
增加教師代課表
代課記錄id
課程編號
教師工號11
1修改選課表
選課記錄id
學號代課記錄id11
1
資料庫設計正規化
目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 1nf 在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化 2nf 其餘正規化以次類推。一般說來,資料庫只需滿...
資料庫設計正規化
前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...
資料庫正規化設計
在軟體開發過程中,資料庫的設計是非常重要的。可以說,良好的資料庫設計,是對使用者需求的理解的精準定位。它不僅能夠使得軟體開發起來非常便捷,而且還能夠使軟體系統高效執行,同時,為日後的維護或者更換資料庫提供便利。在最近開發系統的過程中,感覺收穫最大的也是關於資料庫的操作。最初開發機房收費系統的時候,由...