資料庫學習 正規化 md

2021-08-28 08:10:25 字數 2000 閱讀 3790

正規化:符合是一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度。

通俗點講就是一張資料表的表結構所符合的某種設計標準的級別。

目前資料庫的正規化共有6中,即第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)、第五正規化(5nf)。

第二正規化是在第一正規化的基礎上,第三正規化是在第二正規化的基礎上,依次遞推。

資料冗餘:出現大量的冗餘資料。

舉例:現有設計學生表(學號,姓名,學院):

學號姓名學院1

張三計算機學院2李四

計算機學院3王五

計算機學院nn

計算機學院

在這個表中大量重複了計算機學院,大大消耗了資料庫的儲存空間,這既是資料冗餘。

插入異常:資料由於某種原因無法插入。

假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。

舉例:現設計課程表(學號,課程名稱,學分),其中學號為課程表的主鍵。

當新增一門課程時,由於還沒有學生選這門課(主鍵不存在),那麼課程的相關資訊也是不能插入的。

更新異常:乙個元素進行了修改,所有的與該元素有關的元組都需要修改。

舉例:現有學生表(學號,學院名稱)

學號學院名稱

1計算機

2計算機

當計算機學院更名為人工智慧學院時,我需要把,學生表中所有的資料都更新一遍。

刪除異常:刪除一些資料,把不想刪的資料也刪掉了。

舉例:現有學生表(學號,姓名,班級,班主任)

當這個班級的學生畢業了,在刪除這個班的學生資訊時,同時也把班主任刪掉了。

資料表中的每一列資料都是不可分割的。

第一正規化反例:

即乙個屬性可以繼續再分。

第一正規化正例

學生表(學號,姓名,家庭**,移動**)

定義:在第一正規化的前提上,非主屬性完全函式依賴於碼。

第二正規化反例:

選課表(學號,課程號,課程名);其中(學號,課程號)為主鍵

在這張表中

可以看出課程名其實只依賴於課程號,如果把(學號,課程號)設為主鍵,那麼就出現了部分依賴(多此一舉)。

解決方法:(把一張表分為兩張表)

定義:在滿足第二正規化的基礎上,沒有傳遞依賴。

傳遞依賴:a -> b,b -> c,那麼就存在a->c,這就是傳遞依賴。

第三正規化反例:

學生表(學號,姓名,系號,系名稱)

在這張表中,學號可以決定系號,系號可以決定系名稱,那麼就有學號可以決定系名稱:

解決方法:(建立中間表)

符合3nf要求的資料庫設計,基本上解決了資料冗餘過大插入異常更新異常刪除異常的問題。

bcnf與第三正規化的不同之處在於:第三正規化中不允許非主屬性被另乙個非主屬性決定,但第三正規化允許主屬性被非主屬性決定;而在bcnf中,任何屬性(包括非主屬性和主屬性)都不能被非主屬性所決定。

任何乙個bcnf必然滿足:

總結

bcnf:滿足3nf,還滿足主屬性不依賴主屬性(兩個主屬性不相互依賴)

第三正規化只判斷非主屬性是否部分依賴和傳遞依賴主屬性。

bcnf既判斷非主屬性,又判斷主屬性是否有部分依賴和傳遞依賴。

若乙個關係達到了第三正規化,並且它只有乙個候選碼,或者它的每個候選碼都是單屬性(非多個屬性組合而成的候選碼),則該關係自然達到bcnf。

資料庫學習 正規化

正規化,即normal form,是我們在設計資料庫結構過程中所遵循的知道方法和規則,通常所用到的只是前三個正規化,即 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 1nf 強調的是列的原子性,即列不能夠再分成其他幾列。考慮這樣乙個表 聯絡人 姓名,性別,如果在實際場景中,乙個聯絡人有...

資料庫 資料庫正規化

關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...

資料庫正規化 三正規化

所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...