mysql三大正規化的概念 資料庫三大正規化

2021-10-19 01:34:06 字數 1849 閱讀 5158

何為正規化

顧名思義,規範的方式。資料庫作為底層的儲存系統,直接影響業務層的效能,因此,為了能夠讓開發人員科學規範地使用資料庫,三大正規化應運而生。本文將以較為簡潔的文字並舉例描述三大正規化。

第一正規化(1nf)

第一正規化是指關係表r中的每列都是原子不可分的項,即每個屬性都是最基本的資料項。這裡用**舉個栗子:

// 員工類

typedef employee struct {

id string // 員工id

name string // 員工姓名

age int // 員工名字

dept department // 員工所屬部門

// 部門類

typedef department struct {

id string // 部門id

name string // 部門名字

detail string // 部門詳情

如果我們在資料庫中建立一張員工表emp(id, name, age, dept),對於前三個屬性都是基本型別,不可再分,而對於第四個屬性dept,它在程式中其實對應於結構體,為復合屬性,因此,按照第一正規化正確的建表方式應該是將復合屬性拆分為多個原子不可分的基本屬性,即emp(id,name,age,dept_id,dept_name,dept_detail)。

第二正規化(2nf)

第二正規化是指在滿足第一正規化的情況下,關係表r中的所有非主屬性都完全依賴於r的每乙個候選關鍵屬性。這句話怎麼理解呢,這裡還是舉個栗子:

假如有乙個學生課程表student_course(學號, 姓名, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為只有這兩個屬性一起才能決定一條記錄,即(學號, 課程名稱) → (姓名, 成績, 學分) ,這個關係表便不符合第二正規化,因為"姓名"僅依賴於"學號","學分"僅依賴於"課程名",因此,不滿足第二正規化條件。那麼,不滿足第二正規化會有什麼問題呢?如下:

資料冗餘

對於一門課程,如果有n名學生選修,則這門課程的全部資訊將會重複儲存n-1次,同理,乙個學生選修了m門課程,則學生全部資訊會重複儲存m-1次,導致資料冗餘儲存。

更新問題

如果要更新某門課程的學分,那麼所有關聯這門課程的記錄都將更新,否則會出現資料不一致問題。

插入問題

假如新增一門課程,但是尚未有學生選修,則該門課程的資訊無法入庫。

刪除問題

假如某門課程對應的記錄完全被刪除,則將導致這門課程的資訊完全丟失。

那我們可以按照第二正規化來改造上述關係表,將表才分成student(學號,姓名),cource(課程名稱,學分),student_cource(學號, 課程名稱, 成績),這樣便避免了上述問題。

第三正規化(3nf)

第三正規化是指,在滿足第二正規化的前提下,關係表r中的所有非主屬性由主鍵直接決定,不存在間接依賴關係,簡而言之,第三正規化(3nf)要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。

如表emp(id,name,age,dept_id,dept_name,dept_detail),這張表中的員工id能夠決定所有非主屬性,單我們發現dept_name,dept_detail這兩個非主屬性也可以由非主屬性dept_id決定,而dept_id又依賴於id,因此存在間接傳遞依賴,不滿足第三正規化。同時,可以看出,不滿足第三正規化的問題是存在大量的冗餘資料,解決該問題的方式很簡單,只需將原關係表拆分為emp(id,name,age, dept_id), dept(dept_id,dept_name, dept_detail),這樣不管是對於表emp還是表dept,各自的非主屬性都直接依賴於主鍵,滿足第三正規化,同時也解決了資料冗餘的問題。

小結資料庫的三大正規化是很基礎同時也是非常重要的概念,深刻理解後,有利於我們在專案中合理地設計資料關係表,同時也能提高開發效率,降低儲存成本等等。

資料庫 三大設計正規化(概念 三大正規化的理解)

1 概念 設計正規化 正規化,資料庫設計正規化,資料庫的設計正規化 是符合某一種級別的關係模式的集合。構造資料庫必須遵循一定的規則。在關聯式資料庫中,這種規則就是正規化。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf ...

mysql三大正規化 答案 資料庫三大正規化通俗理解

資料庫三大正規化通俗理解 1 原子性,要求屬性具有原子性,不可再分解。表 欄位1 欄位2 欄位2.1 欄位2.2 欄位3 如學生 學號,姓名,性別,出生年月日 如果認為最後一列還可以再分成 出生年,出生月,出生日 它就不是一正規化了,否則就是 2 唯一性,乙個表只能說明乙個事物,即實體的惟一性。表 ...

資料庫設計三大正規化資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...