關聯式資料庫正規化快速識別方法 第幾正規化

2021-09-24 06:08:30 字數 2154 閱讀 5620

首先要明白」正規化(nf)」是什麼意思。按照教材中的定義,正規化是「符合某一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度」。很晦澀吧?實際上你可以把它粗略地理解為一張資料表的表結構所符合的某種設計標準的級別。就像家裡裝修買建材,最環保的是e0級,其次是e1級,還有e2級等等。資料庫正規化也分為1nf,2nf,3nf,bcnf,4nf,5nf。一般在我們設計關係型資料庫的時候,最多考慮到bcnf就夠。符合高一級正規化的設計,必定符合低一級正規化,例如符合2nf的關係模式,必定符合1nf。

符合1nf的關係(你可以理解為資料表。「關係模式」和「關係」的區別,類似於物件導向程式設計中」類「與」物件「的區別。」關係「是」關係模式「的乙個例項,你可以把」關係」理解為一張帶資料的表,而「關係模式」是這張資料表的表結構。1nf的定義為:符合1nf的關係中的每個屬性都不可再分。表1所示的情況,就不符合1nf的要求。

接下來就對每一級正規化進行一下解釋,首先是第一正規化(1nf)。符合1nf的關係(你可以理解為資料表。「關係模式」和「關係」的區別,類似於物件導向程式設計中」類「與」物件「的區別。」關係「是」關係模式「的乙個例項,你可以把」關係」理解為一張帶資料的表,而「關係模式」是這張資料表的表結構。1nf的定義為:符合1nf的關係中的每個屬性都不可再分。表1所示的情況,就不符合1nf的要求。

實際上,1nf是所有關係型資料庫的最基本要求,你在關係型資料庫管理系統(rdbms),例如sql server,oracle,mysql中建立資料表的時候,如果資料表的設計不符合這個最基本的要求,那麼操作一定是不能成功的。也就是說,只要在rdbms中已經存在的資料表,一定是符合1nf的。如果我們要在rdbms中表現表中的資料,就得設計為表2的形式:

每一名學生的學號、姓名、系名、系主任這些資料重複多次。每個系與對應的系主任的資料也重複多次——資料冗餘過大 假如學校新建了乙個系,但是暫時還沒有招收任何學生(比如3月份就新建了,但要等到8月份才招生),那麼是無法將系名與系主任的資料單獨地新增到資料表中去的 (注1)——插入異常

注1:根據三種關係完整性約束中實體完整性的要求,關係中的碼(注2)所包含的任意乙個屬性都不能為空,所有屬性的組合也不能重複。為了滿足此要求,圖中的表,只能將學號與課名的組合作為碼,否則就無法唯一地區分每一條記錄。

注2:碼:關係中的某個屬性或者某幾個屬性的組合,用於區分每個元組(可以把「元組」理解為一張表中的每條記錄,也就是每一行)。假如將某個系中所有學生相關的記錄都刪除,那麼所有系與系主任的資料也就隨之消失了(乙個系所有學生都沒有了,並不表示這個系就沒有了)。——刪除異常假如李小明轉系到法律系,那麼為了保證資料庫中資料的一致性,需要修改三條記錄中系與系主任的資料。——修改異常。正因為僅符合1nf的資料庫設計存在著這樣那樣的問題,我們需要提高設計標準,去掉導致上述四種問題的因素,使其符合更高一級的正規化(2nf),這就是所謂的「規範化」。第二正規化(2nf)在關係理論中的嚴格定義我這裡就不多介紹了(因為涉及到的鋪墊比較多),只需要了解2nf對1nf進行了哪些改進即可。其改進是,2nf在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴。接下來對這句話中涉及到的四個概念——「函式依賴」、「碼」、「非主屬性」、與「部分函式依賴」進行一下解釋。函式依賴

我們可以這麼理解(但並不是特別嚴格的定義):若在一張表中,在屬性(或屬性組)x的值確定的情況下,必定能確定屬性y的值,那麼就可以說y函式依賴於x,寫作 x → y。也就是說,在資料表中,不存在任意兩條記錄,它們在x屬性(或屬性組)上的值相同,而在y屬性上的值不同。這也就是「函式依賴」名字的由來,類似於函式關係 y = f(x),在x的值確定的情況下,y的值一定是確定的。例如,對於表3中的資料,找不到任何一條記錄,它們的學號相同而對應的姓名不同。所以我們可以說姓名函式依賴於學號,寫作 學號 → 姓名。但是反過來,因為可能出現同名的學生,所以有可能不同的兩條學生記錄,它們在姓名上的值相同,但對應的學號不同,所以我們不能說學號函式依賴於姓名。表中其他的函式依賴關係還有如:系名 → 系主任學號 → 系主任(學號,課名) → 分數但以下函式依賴關係則不成立:學號 → 課名學號 → 分數課名 → 系主任(學號,課名) → 姓名從「函式依賴」這個概念展開,還會有三個概念:完全函式依賴在一張表中,若 x → y,且對於 x 的任何乙個真子集(假如屬性組 x 包含超過乙個屬性的話),x 』 → y 不成立,那麼我們稱 y 對於 x 完全函式依賴,記作 x f→ y。(那個f應該寫在箭頭的正上方,沒辦法打出來……,正確的寫法如圖1)

**:

關聯式資料庫正規化

在建立乙個資料庫的過程中,必須依照一定的準則,這些準則被稱為正規化,從第一到第六共六個正規化,一般資料庫設計只要遵循第一正規化,第二正規化,和第三正規化就足夠了。滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂...

關聯式資料庫正規化

判斷是第幾正規化 概念 設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。種類 目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf...

關聯式資料庫的正規化

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