關係規範化是一種基於函式依賴理論對關係進行分析及分解處理的形式化技術,它將乙個有異常資料操作的關係分解成更小的、結構良好的關係,使該關係有最小的冗餘或沒有冗餘。關係規範化給設計者提供了對關係屬性進行合理定義的指導。有了規範化關係設計,我們對資料庫可以實現高效的、正確的操作。
關係規範化技術涉及一系列規則,實施這些規則,可以確保關聯式資料庫被規範到相應程度。規範化正規化(normal forma,nf)是關係表符合特定規範化程度的模式。規範化正規化的種類與函式依賴有著直接的聯絡。在關係中存在函式依賴時就有可能存在資料冗餘,引出資料操作異常現象。資料冗餘不僅浪費儲存空間,而且會使資料庫難以保持資料的一致性。
實施某種正規化的規範化處理,可以確保關聯式資料庫中沒有各種型別的資料操作異常和資料不一致性。目前,關聯式資料庫的規範化有6種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf)。滿足最低規則要求的正規化是第一正規化(1nf)。在第一正規化的基礎上進一步滿足更多規則要求的稱為第二正規化(2nf),其餘正規化依次類推。高階正規化包含低階正規化的全部規則要求。
在資料庫應用中,一般只需滿足第三正規化(3nf)或巴斯-科德正規化(bcnf)就足夠了,而使用第四正規化(4nf)和第五正規化(5nf)的情形很少。下面分別介紹這5種正規化。
在關聯式資料庫中,第一正規化(1nf)是對關係表的基本要求,不滿足第一正規化的二維表不是關係。第一正規化指關係表的屬性列不能重複,並且每個屬性列都是不可分割的基本資料項。若乙個關係表存在重複列或可細分屬性列,則該關係表不滿足規範化的1nf正規化,該錶存在冗餘資料,對該錶進行資料操作訪問也必然會出現異常。解決非規範化關係的基本方法就是對關係進行分解處理,直到分解後的每個關係都滿足規範化為止。
1.第一正規化在關聯式資料庫中,第一正規化(1nf)是對關係表的基本要求,不滿足第一正規化的二維表不是關係。第一正規化指關係表的屬性列不能重複,並且每個屬性列都是不可分割的基本資料項。若乙個關係表存在重複列或可細分屬性列,則該關係表不滿足規範化的1nf正規化,該錶存在冗餘資料,對該錶進行資料操作訪問也必然會出現異常。解決非規範化關係的基本方法就是對關係進行分解處理,直到分解後的每個關係都滿足規範化為止。【例1】在圖1(a)所示的「學生」關係表中,關係表中的「****」屬性是乙個不明確的資料項,使用者可以填寫**資料,也可以填寫郵箱資料,即該屬性列可以再細分「**」「電子郵件」等。因此,該關係不滿足關係規範化的1nf正規化。若要使該關係表符合1nf正規化,則必須對「****」屬性列進行拆分處理,如將「****」拆分為「**」「email」屬性後,「學生」關係將滿足第一正規化,如圖1所示。
圖1 「學生」關係表
如果關係滿足第一正規化,並消除了關係中的屬性部分函式依賴,該關係滿足第二正規化。第二正規化規則要求關係表中所有資料都要和該關係表的主鍵有完全函式依賴。如果乙個關係中某些屬性資料只和主鍵的一部分存在依賴關係,該關係就不符合第二正規化。例如,關係(a,b,n,o,p)的復合主鍵為(a,b),那麼n、o、p這3個非鍵屬性都不存在只依賴a或只依賴b的情況,則該關係滿足第二正規化。反之,該關係不滿足第二正規化。為了使關係滿足第二正規化,必須為那些部分依賴表主鍵的屬性建立單獨的關係表。
【例2】在圖2(b)所示的「學生」關係表中,其主鍵為復合鍵(學號,課程號),非鍵屬性與主鍵的依賴關係如下。除成績屬性完全依賴復合主鍵外,姓名、系名、住址、**、email 屬性只依賴於復合主鍵中的學號,即該關係存在部分函式依賴,不滿足第二正規化。
為了將圖2(b)所示的「學生」關係規範化為滿足2nf正規化,其處理辦法就是消除該關係中的部分函式依賴,將部分函式依賴的屬性從原關係中移出,並放入乙個新關係中,同時將這些屬性的決定因子作為主鍵放到新關係中。將原「學生」關係分解為「學生」「課程成績」關係,每個關係均滿足2nf正規化,如圖
圖2 滿足2nf正規化的「學生」關係表和「課程成績」關係表
滿足2nf正規化的關係表在進行資料訪問操作時,依然可能存在資料操作異常問題。例如,對圖2中「學生」關係中某學生的「住址」進行更新,而其他同系學生的住址沒有修改,則會出現資料不一致問題。此時的資料更新異常是因為「學生」關係表中存在屬性傳遞函式依賴,該錶不滿足3nf正規化導致的。
第三正規化(3nf)要求關係先滿足2nf正規化,並且所有非主鍵屬性均不存在傳遞函式依賴。例如,關係(a,n,o,p)的主鍵為 a,那麼非鍵屬性 n、o或 p都不能由單個的 n、o、p或它們的組合所決定。該關係滿足3nf正規化。【例2】圖2所示的「學生」關係雖然滿足2nf正規化,但存在如下屬性傳遞依賴。
學號→系名,系名→住址,故學號→住址因此,該「學生」關係不滿足3nf 正規化。若要使「學生」關係達到3nf 正規化,則需要對該關係進行拆分處理,並使每個關係均不存在屬性傳遞函式依賴。現將原「學生」關係拆分為「學生」「系資訊」新關係。由於「課程成績」關係本身不存在傳遞函式依賴,它不需進行分解處理。圖4-45所示的關係表均滿足3nf正規化。
乙個關係即使滿足第三正規化,也仍然有可能存在一些會引起資料冗餘的屬性依賴。因此,需要進一步將關係規範化提公升到更高程度的正規化,即巴斯-科德(boyce-codd)正規化,也可稱為bcnf正規化。
該正規化是在3nf正規化基礎上,要求關係中所有函式依賴的決定因子必須是候選鍵。
圖4 滿足3nf正規化的關係表【例4】在圖4所示的「學生」「系資訊」「課程成績」關係表中,所有屬性之間的函式依賴決定因子均是該關係的主鍵,因此,它們均滿足bcnf正規化。
乙個滿足bcnf正規化的關係,可能存在多值依賴情況,從而導致資料冗餘。當乙個關係滿足bcnf正規化並消除了多值依賴時,該關係就滿足4nf正規化。【例5】圖5所示的「學生」「系資訊」「課程成績」關係表均滿足bcnf正規化。但在「系資訊」關係表中,存在如下多值依賴:系編號→→辦公**,系編號→→學生住址。系辦公**與學生住址不相關,故該關係存在多值依賴,不滿足4nf正規化。為使「系資訊」關係滿足4nf正規化,需要將其拆分為「系編碼」「**目錄」和「學生住址」關係。圖4-46所示的關係表均滿足4nf正規化。
圖5 滿足4nf正規化的關係表
如果乙個關係為消除其中連線依賴,進行投影分解,所分解的各個關係均包含原關係的乙個候選鍵,則這些分解後的關係滿足5nf正規化。連線依賴是函式依賴的一種形式,其定義如下:對關係r及其屬性的子集a,b,c,…,z,當且僅當r的每個合法元組都與其在a,b,c,…,z上投影的連線結果相同時,則稱關係r滿足連線依賴。【例6】圖6所示的「系資訊」關係表滿足bcnf正規化。但該關係中存在連線依賴(系編號,系名稱)、(系編號,辦公**)、(系編號,學生住址)。為該關係消除連線依賴,進行關係投影分解,得到圖6所示關係表。
圖6 滿足5nf正規化的關係表從關係分解的結果來看,它們既滿足4nf正規化,同時又滿足5nf正規化。
資料庫三正規化是什麼?
什麼是正規化?簡言之就是,資料庫設計對資料的儲存效能,還有開發人員對資料的操作都有莫大的關係。所以建立科學的,規範的的資料庫是需要滿足一些規範的來優化資料資料儲存方式。在關係型資料庫中這些規範就可以稱為正規化。什麼是三大正規化?第一正規化 1nf 強調的是列的原子性,即列不能夠再分成其他幾列。第二正...
資料庫三正規化是什麼
第一正規化 1nf 字段具有原子性,不可再分。所有關係型資料庫系統都滿足第一正規化 資料庫表中的字段都是單一屬性的,不可再分。例如,姓名字段,其中的姓和名必須作為一 個整體,無法區分哪部分是姓,哪部分是名,如果要區分出姓和名,必須設計成兩個獨立的 字段。第二正規化 2nf 第二正規化 2nf 是在第...
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...