關係型資料庫正規化

2022-02-15 00:44:00 字數 1688 閱讀 4377

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)。滿足最低要求的正規化是第一正規化(1nf)。在第一正規化的基礎上進一步滿足更多規範要求的稱為第二正規化(2nf),其餘正規化以次類推。一般來說,資料庫只需滿足第三正規化(3nf)就行了。

第一正規化(1nf):資料表中的每一列(每個字段)必須是不可拆分的最小單元,也就是確保每一列的原子性;如下圖的表設計就不符合第一正規化:其中」家庭位址」列還可以細分為城市、區、街道;在國外更多的程式把」姓名」列也分成2列,即」姓」和「名」。

符合第一正規化的設計應該是:

雖然第一正規化要求各列要儲存原子性,不能再分,但是這種要求和我們的需求是相關聯的,如上表中我們對」位址」沒有城市、區這樣方面的查詢和應用需求,則不需拆分,」姓名」列也是同樣如此。

在1nf的基礎上,非key屬性必須完全依賴於主鍵,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係。第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。第二正規化(2nf)要求乙個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。

如下圖,乙個表描述了公司資訊,員工資訊等,這樣就造成了大量資料的重複,不符合第二正規化:  

按照第二正規化,我們可以將表進行拆分:   

第三正規化是在第二正規化基礎上,更進一層,第三正規化的目標就是確保表中各列與主鍵列直接相關,而不是間接相關。即各列與主鍵列都是一種直接依賴關係,則滿足第三正規化。第三正規化要求各列與主鍵列直接相關,我們可以這樣理解,假設李四是張三的手下,王五則是李四的手下,這時王五是不是張三的手下呢?從這個關係中我們可以看出,王五也是張三的手下,因為王五依賴於李四,而李四是張三的手下,所以王五也是。這中間就存在一種間接依賴的關係而非我們第三正規化中強調的直接依賴。

如上圖中,在員工資訊表中包含:」員工編號」、」員工姓」、「員工名」,」職務」、」待遇」,而我們知道,薪資水平是有職務決定,這裡」薪資水平」通過」職務」與員工相關,則不符合第三正規化。我們需要將員工資訊表進一步拆分,如下:  

通過對比我們發現,表多了,關係複雜了,查詢資料變的麻煩了,程式設計中的難度也提高了,但是各個表中內容更清晰了,重複的資料少了,更新和維護變的更容易了,哪麼如何平衡這種矛盾呢?

關係型資料庫的正規化

關係型資料庫有六個正規化,越靠後的正規化對資料庫的 要求 越高。我改寫了描述,讓其更通俗易懂,但是不太嚴謹,以下文字中 列對應屬性 行對應實體 表對應關係。不再一一區分。對於我們使用的關係型資料庫,滿足第三正規化即可。第一正規化 1nf 無重複的列 即每一行中,不能有兩列的含義完全相同,也不能有某一...

關係型資料庫設計正規化

理解三大正規化 學後知變通 什麼是正規化 資料庫設計對資料的儲存效能和開發人員對資料的操作都有關係。所以建立科學的 規範的資料庫需要滿足一些規範。在關係型資料庫中這些規範就可以稱為正規化。三大正規化概念 第一正規化 當關係模式r的所有屬性都不能分解為更基本的資料單位時,稱r是滿足第一正規化的,簡記為...

關係型資料庫設計正規化

首先要明白 正規化 nf 是什麼意思。按照教材中的定義,正規化是 符合某一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度 很晦澀吧?實際上你可以把它粗略地理解為一張資料表的表結構所符合的某種設計標準的級別。就像家裡裝修買建材,最環保的是e0級,其次是e1級,還有e2級等等。資料...