正規化的英文名稱是normal form,它是英國人e.f.codd(關聯式資料庫的老祖宗)在上個世紀70年代提出關聯式資料庫模型後總結出來的。正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是:1nf,2nf,3nf,bcnf,4nf,5nf,dknf,6nf。通常所用到的只是前三個正規化,即:第一正規化(1nf),第二正規化(2nf),第三正規化(3nf)。
資料往往種類繁多,而且每種資料之間又互相關聯,因此,在設計資料庫時,所需要滿足的正規化越多,那錶的層次及結構也就越複雜,最終造成資料的處理困難。這樣,還不如不滿足這些正規化呢。所以在使用正規化的時候也要細細斟酌,是否一定要使用該正規化,必須根據實際情況做出選擇。一般情況下,我們使用前三個正規化已經夠用了,不再使用更多正規化,就能完成對資料的優化,達到最優效果。
第一正規化
就是屬性不可分割,每個欄位都應該是不可再拆分的。比如乙個欄位是姓名(name),在國內的話通常理解都是姓名是乙個不可再拆分的單位,這時候就符合第一正規化;但是在國外的話還要分為first name和last name,這時候姓名這個字段就是還可以拆分為更小的單位的字段,就不符合第一正規化了。
第二正規化
就是要求表中要有主鍵,表中其他其他欄位都依賴於主鍵,因此第二正規化只要記住主鍵約束就好了。比如說有乙個表是學生表,學生表中有乙個值唯一的字段學號,那麼學生表中的其他所有欄位都可以根據這個學號字段去獲取,依賴主鍵的意思也就是相關的意思,因為學號的值是唯一的,因此就不會造成儲存的資訊對不上的問題,即學生001的姓名不會存到學生002那裡去。(唯一,非空,就屬於約束)
第三正規化
就是要求表中不能有其他表中存在的、儲存相同資訊的字段,通常實現是在通過外來鍵去建立關聯,因此第三正規化只要記住外來鍵約束就好了。比如說有乙個表是學生表,學生表中有學號,姓名等字段,那如果要把他的系編號,系主任,系主任也存到這個學生表中,那就會造成資料大量的冗餘,一是這些資訊在系資訊表中已存在,二是系中有1000個學生的話這些資訊就要存1000遍。因此第三正規化的做法是在學生表中增加乙個系編號的字段(外來鍵),與系資訊表做關聯。(主表中的外來鍵是另一張表中的主鍵)
MYSQL三大正規化
第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...
MySQL三大正規化
資料庫 的三個正規化 指的是什麼呢?即 屬性唯一,記錄唯一,表唯一。下面我們用一張關係圖來三者之間的關係。第一正規化 1nf 資料庫表中的字段的 屬性都是單一的,不可再分。這個單一屬性由哪些型別組成呢?主要是基本型別構成,包括整型 實數 字元型 邏輯型 日期型等。第二正規化 2nf 資料庫表 中不存...
mysql三大正規化
1.第一正規化 確保資料表中每列 字段 的原子性。如果資料表中每個欄位都是不可再分的最小資料單元,則滿足第一正規化。例如 user使用者表,包含欄位id,username,password 2.第二正規化 在第一正規化的基礎上更進一步,目標是確保表中的每列都和主鍵相關。如果乙個關係滿足第一正規化,並...