MySQL屬於第幾正規化 mysql 之 三大正規化

2021-10-17 12:08:09 字數 2796 閱讀 3079

前言:

在使用mysql中對錶的設計,我們需要遵循三大正規化。

設計關係型資料庫時,遵從不同的規範和要求,設計出合理的關係型資料庫,這些不同的規範和要求稱為不同的正規化。各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。

若要遵循後面的正規化必須遵循之前的正規化。1nf<2nf<3nf<...>

正規化分類:

目前關係型資料庫有六種正規化

第一正規化(1nf)

第二正規化(2nf)

第三正規化(3nf)

巴斯-科徳正規化(bcnf)

第四正規化(4nf)

第五正規化(5nf)

第一正規化(1nf):

每一列都是不可分割的原子資料項(有點抽象),那麼什麼是原子不可分割的呢?

用excel定義一張表(注意紅色部分)乙個列(系)又被分為了 多個列(系名、系主任),很明顯不符合第一正規化要求中的資料列是不可再分的規範。

如何才能符合第一正規化呢(如下)?這才是我們實際上在對錶的正確定義。也就是說關係型資料庫(mysql)自動遵循了第一正規化。目前為止我都沒見過mysql可以建立復合列。

第一正規化有哪些問題呢?資料冗餘嚴重,拿張三說事(羅教授有沒有朋友知道的)姓名、系名、系主任字段冗餘是不是特別嚴重?

資料新增存在問題,若我們在第一正規化基礎上新增乙個系資訊(系名、系主任),如紅色部分,顯得特別不合理。

資料刪除存在問題,刪除張三的資料資訊,同樣也會將系名、系主任資訊刪除掉。

了解了第一正規化的問題後,如何進行解決了?就需要第二正規化和第三正規化。

第二正規化(2nf):

在滿足第一正規化的基礎上,非碼屬性必須完全依賴於碼,(在1nf基礎上消除非主屬性對主碼的部分函式依賴)

要想學習第

二、三正規化需要了解幾個概念。

函式依賴:a..>b,如果通過a屬性(屬性組)的值,可以確定唯一b的屬性值,那麼則稱b依賴於a。

例如:id>姓名,id稱為a,姓名稱為b,結合上面的那句話,說明姓名依賴於id。

還有乙個屬性組的概念,例如:通過id確定乙個的分數,是無法做到的,但是(id+課程名稱)>分數,則可以確定乙個的分數。

完全函式依賴:a..>b,如果a是乙個屬性組,則b屬性值的確定需要依賴於a屬性組中的所有的屬性值。

例如:id和課程名稱可以確定乙個分數,但是id和姓名、系名等其他欄位都不能確定乙個分數,那麼分數就完全依賴於 id和課程名稱。

部分函式依賴:有了完全依賴就肯定有部分函式依賴,如果a是乙個屬性組,則b屬性值的確立只需要依賴於a屬性組的某一些值即可。

例如:id 可以確認乙個姓名,id+課程名稱同樣也可以確定乙個姓名。兩種關係,只要其中一種符合就行了,這就是部分函式依賴。

傳遞函式概念:a..>b ,b..>c,如果通過a屬性(屬性組)的值,可以確定唯一b的屬性值,再通過b屬性(屬性組)的值可以確定唯一c的屬性值,則c傳遞函式依賴於a。

例如:id(a) 可以確定 系名(b),系名(b)又可以確定系主任(c)。

碼:如果在一張表中,乙個屬性值或屬性組,被其他所有屬性所完全依賴,則稱為這個屬性或屬性組為該錶的碼。

例如:通過id能確定姓名、姓名又確定系名,系統再確定系主任,但是id無法確定分數。若要確定分數需要(id+課程名稱),在該表中,id和課程名稱被稱為該錶的碼。

將到這裡明白了第一正規化的問題就是減少冗餘,那麼第二正規化又該怎麼解決呢? 將原來的表拆分出去(如下)。

這就是第二正規化,消除a>b的依賴,減少冗餘資料

第三正規化(3nf):

在2nf基礎上,任何非主屬性不依賴於其他非主屬性(在2nf基礎上消除傳遞依賴)

2nf只是減少了部分依賴,但依然存在傳遞依賴(再看看傳遞函式概念)

傳遞函式概念:a..>b ,b..>c,如果通過a屬性(屬性組)的值,可以確定唯一b的屬性值,再通過b屬性(屬性組)的值可以確定唯一c的屬性值,則c傳遞函式依賴於a。

例如:id(a) 可以確定 系名(b),系名(b)又可以確定系主任(c)。

第三正規化就是需要消除傳遞依賴:如上(學生表)中的系名,系主任,不能應該和學生掛鉤。於是又做了一次拆分,減少傳遞依賴。

反第三正規化:

雖然第三正規化減少了資料冗餘問題,也降低了表與表之間的耦合度,但並不是沒有冗餘的表才是最好的,因為關聯查詢在一定的情況下還是有部分的效能消耗的,為了使資料查詢效率更高,在合理的範圍內定義一些合理冗餘資料。

總結:mysql三大正規化,說簡單點就是減少耦合度,減少資料的冗餘,學費(會)拆分。

巴斯-科徳正規化(bcnf):

第四正規化(4nf):

第五正規化(5nf):

剩下三個有機會去補充

mysql判斷第幾正規化 MySQL之正規化

一 正規化 正規化的英文名稱是normal form,它是英國人e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的。正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3...

怎樣判斷乙個函式依賴集屬於第幾正規化

判斷乙個函式依賴集屬於第幾正規化 首先,要懂得以下幾條概念 1.完全函式依賴 如果x y,且對於任意乙個x的子集x 都有x y,則稱y完全函式依賴於x 2.部分函式依賴 y不完全函式依賴於x 總之,如果乙個屬性y既依賴於x,也依賴於x的某個子集,則說明y部分依賴於x 3.傳遞函式依賴 如果x y,y...

JAVA獲取日期屬於當年第幾周

string today 2017 11 11 dateformat format new dateformat yyyy mm dd date date format.parse today calendar calendar calendar.getinstance calendar.setfi...