1. 程式人生 > >資料庫正規化問題

資料庫正規化問題

國內絕大多數院校用的王珊的《資料庫系統概論》這本教材,某些方面並沒有給出很詳細很明確的解釋,與實際應用聯絡不那麼緊密,你有這樣的疑問也是挺正常的。我教《資料庫原理》這門課有幾年了,有很多學生提出了和你一樣的問題,試著給你解釋一下吧。(基本來自於我上課的內容,某些地方為了不過於囉嗦,放棄了一定的嚴謹,主要是在“關係”和“表”上)

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

接下來就對每一級正規化進行一下解釋,首先是第一正規化(1NF)。

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


表1

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

的形式:


表2

但是僅僅符合1NF的設計,仍然會存在資料冗餘過大,插入異常,刪除異常,修改異常的問題,例如對於表3中的設計:


表3

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

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

    注2:碼:關係中的某個屬性或者某幾個屬性的組合,用於區分每個元組
    (可以把“元組”理解為一張表中的每條記錄,也就是每一行)
  3. 假如將某個系中所有學生相關的記錄都刪除,那麼所有系與系主任的資料也就隨之消失了(一個系所有學生都沒有了,並不表示這個系就沒有了)。——刪除異常
  4. 假如李小明轉系到法律系,那麼為了保證資料庫中資料的一致性,需要修改三條記錄中系與系主任的資料。——修改異常

正因為僅符合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

<img src="https://pic1.zhimg.com/50/12513de20079d12b99d946072df7311a_hd.jpg" data-caption="" data-rawwidth="98" data-rawheight="53" class="content_image" width="98">

圖1

例如:

  • 學號 F→ 姓名
  • (學號,課名) F→ 分數 (注:因為同一個的學號對應的分數不確定,同一個課名對應的分數也不確定)

部分函式依賴

假如 Y 函式依賴於 X,但同時 Y 並不完全函式依賴於 X,那麼我們就稱 Y 部分函式依賴於 X,記作 X P→ Y,如圖2

圖2

例如:

  • (學號,課名) P→ 姓名

傳遞函式依賴
假如 Z 函式依賴於 Y,且 Y 函式依賴於 X (感謝

@百達 指出的錯誤,這裡改為:『Y 不包含於 X,且 X 不函式依賴於 Y』這個前提),那麼我們就稱 Z 傳遞函式依賴於 X ,記作 X T→ Z,如圖3


圖3


設 K 為某表中的一個屬性或屬性組,若除 K 之外的所有屬性都完全函式依賴於 K(這個“完全”不要漏了),那麼我們稱 K 為候選碼,簡稱為。在實際中我們通常可以理解為:假如當 K 確定的情況下,該表除 K 之外的所有屬性的值也就隨之確定,那麼 K 就是碼。一張表中可以有超過一個碼。(實際應用中為了方便,通常選擇其中的一個碼作為主碼

例如:
對於表3,(學號、課名)這個屬性組就是碼。該表中有且僅有這一個碼。(假設所有課沒有重名的情況)

非主屬性
包含在任何一個碼中的屬性成為主屬性。

例如:
對於表3,主屬性就有兩個,學號課名

終於可以回過來看2NF了。首先,我們需要判斷,表3是否符合2NF的要求?根據2NF的定義,判斷的依據實際上就是看資料表中是否存在非主屬性對於碼的部分函式依賴。若存在,則資料表最高只符合1NF的要求,若不存在,則符合2NF的要求。判斷的方法是:

第一步:找出資料表中所有的
第二步:根據第一步所得到的碼,找出所有的主屬性
第三步:資料表中,除去所有的主屬性,剩下的就都是非主屬性了。
第四步:檢視是否存在非主屬性對碼的部分函式依賴

對於表3,根據前面所說的四步,我們可以這麼做:

第一步:

  1. 檢視所有每一單個屬性,當它的值確定了,是否剩下的所有屬性值都能確定。
  2. 檢視所有包含有兩個屬性的屬性組,當它的值確定了,是否剩下的所有屬性值都能確定。
  3. ……
  4. 檢視所有包含了六個屬性,也就是所有屬性的屬性組,當它的值確定了,是否剩下的所有屬性值都能確定。

看起來很麻煩是吧,但是這裡有一個訣竅,就是假如A是碼,那麼所有包含了A的屬性組,如(A,B)、(A,C)、(A,B,C)等等,都不是碼了(因為作為碼的要求裡有一個“完全函式依賴”)。

圖4表示了表中所有的函式依賴關係:

<img src="https://pic1.zhimg.com/50/51e2689ac9416a91800e63101bee9db7_hd.jpg" data-caption="" data-rawwidth="541" data-rawheight="212" class="origin_image zh-lightbox-thumb" width="541" data-original="https://pic1.zhimg.com/51e2689ac9416a91800e63101bee9db7_r.jpg">

圖4

這一步完成以後,可以得到,表3的碼只有一個,就是(學號、課名)

第二步:
主屬性有兩個:學號 課名

第三步:
非主屬性有四個:姓名系名系主任分數

第四步:
對於(學號,課名) → 姓名,有 學號 → 姓名,存在非主屬性 姓名 對碼(學號,課名)的部分函式依賴。
對於(學號,課名) → 系名,有 學號 → 系名,存在非主屬性 系對碼(學號,課名)的部分函式依賴。
對於(學號,課名) → 系主任,有 學號 → 系主任,存在非主屬性 對碼(學號,課名)的部分函式依賴。

所以表3存在非主屬性對於碼的部分函式依賴,最高只符合1NF的要求,不符合2NF的要求。

為了讓表3符合2NF的要求,我們必須消除這些部分函式依賴,只有一個辦法,就是將大資料表拆分成兩個或者更多個更小的資料表,在拆分的過程中,要達到更高一級正規化的要求,這個過程叫做”模式分解“。模式分解的方法不是唯一的,以下是其中一種方法:
選課(學號,課名,分數)
學生(學號,姓名,系名,系主任)

我們先來判斷以下,選課表與學生表,是否符合了2NF的要求?

對於選課表,其碼是(學號,課名),主屬性是學號課名,非主屬性是分數學號確定,並不能唯一確定分數課名確定,也不能唯一確定分數,所以不存在非主屬性分數對於碼 (學號,課名)的部分函式依賴,所以此表符合2NF的要求。

對於學生表,其碼是學號,主屬性是學號,非主屬性是姓名、系名系主任,因為碼只有一個屬性,所以不可能存在非主屬性對於碼 的部分函式依賴,所以此表符合2NF的要求。

圖5表示了模式分解以後的新的函式依賴關係


圖5

表4表示了模式分解以後新的資料

<img src="https://pic4.zhimg.com/50/44af74509a4e21372ed372be8560539d_hd.jpg" data-caption="" data-rawwidth="478" data-rawheight="314" class="origin_image zh-lightbox-thumb" width="478" data-original="https://pic4.zhimg.com/44af74509a4e21372ed372be8560539d_r.jpg">

表4

(這裡還涉及到一個如何進行模式分解才是正確的知識點,先不介紹了)

現在我們來看一下,進行同樣的操作,是否還存在著之前的那些問題?

  1. 李小明轉系到法律系
    只需要修改一次李小明對應的系的值即可。——有改進
  2. 資料冗餘是否減少了?
    學生的姓名、系名與系主任,不再像之前一樣重複那麼多次了。——有改進
  3. 刪除某個系中所有的學生記錄
    該系的資訊仍然全部丟失。——無改進
  4. 插入一個尚無學生的新系的資訊。
    因為學生表的碼是學號,不能為空,所以此操作不被允許。——無改進

所以說,僅僅符合2NF的要求,很多情況下還是不夠的,而出現問題的原因,在於仍然存在非主屬性系主任對於碼學號的傳遞函式依賴。為了能進一步解決這些問題,我們還需要將符合2NF要求的資料表改進為符合3NF的要求。

第三正規化(3NF) 3NF在2NF的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。也就是說, 如果存在非主屬性對於碼的傳遞函式依賴,則不符合3NF的要求。

接下來我們看看錶4中的設計,是否符合3NF的要求。

對於選課表,主碼為(學號,課名),主屬性為學號課名,非主屬性只有一個,為分數,不可能存在傳遞函式依賴,所以選課表的設計,符合3NF的要求。

對於學生表,主碼為學號,主屬性為學號,非主屬性為姓名系名系主任。因為 學號 → 系名,同時 系名 → 系主任,所以存在非主屬性系主任對於碼學號的傳遞函式依賴,所以學生表的設計,不符合3NF的要求。。

為了讓資料表設計達到3NF,我們必須進一步進行模式分解為以下形式:
選課(學號,課名,分數)
學生(學號,姓名,系名)
系(系名,系主任)

對於選課表,符合3NF的要求,之前已經分析過了。

對於學生表,碼為學號,主屬性為學號,非主屬性為系名,不可能存在非主屬性對於碼的傳遞函式依賴,所以符合3NF的要求。

對於表,碼為系名,主屬性為系名,非主屬性為系主任,不可能存在非主屬性對於碼的傳遞函式依賴(至少要有三個屬性才可能存在傳遞函式依賴關係),所以符合3NF的要求。。

新的函式依賴關係如圖6


圖6

新的資料表如表5


表5

現在我們來看一下,進行同樣的操作,是否還存在著之前的那些問題?

  1. 刪除某個系中所有的學生記錄
    該系的資訊不會丟失。——有改進
  2. 插入一個尚無學生的新系的資訊。
    因為系表與學生表目前是獨立的兩張表,所以不影響。——有改進
  3. 資料冗餘更加少了。——有改進

結論
由此可見,符合3NF要求的資料庫設計,基本上解決了資料冗餘過大,插入異常,修改異常,刪除異常的問題。當然,在實際中,往往為了效能上或者應對擴充套件的需要,經常 做到2NF或者1NF,但是作為資料庫設計人員,至少應該知道,3NF的要求是怎樣的。

==============時隔半年,終於決定把這個坑填上,來晚了 ===========

BCNF正規化

要了解 BCNF 正規化,那麼先看這樣一個問題:

若:

  1. 某公司有若干個倉庫;
  2. 每個倉庫只能有一名管理員,一名管理員只能在一個倉庫中工作;
  3. 一個倉庫中可以存放多種物品,一種物品也可以存放在不同的倉庫中。每種物品在每個倉庫中都有對應的數量。

那麼關係模式 倉庫(倉庫名,管理員,物品名,數量) 屬於哪一級正規化?

答:已知函式依賴集:倉庫名 → 管理員,管理員 → 倉庫名,(倉庫名,物品名)→ 數量
碼:(管理員,物品名),(倉庫名,物品名)
主屬性:倉庫名、管理員、物品名
非主屬性:數量
∵ 不存在非主屬性對碼的部分函式依賴和傳遞函式依賴。∴ 此關係模式屬於3NF。

基於此關係模式的關係(具體的資料)可能如圖所示:

<img src="https://pic4.zhimg.com/50/68d080d437732aad8cfe451b427849d6_hd.jpg" data-caption="" data-rawwidth="625" data-rawheight="296" class="origin_image zh-lightbox-thumb" width="625" data-original="https://pic4.zhimg.com/68d080d437732aad8cfe451b427849d6_r.jpg">

好,既然此關係模式已經屬於了 3NF,那麼這個關係模式是否存在問題呢?我們來看以下幾種操作:

  1. 先新增加一個倉庫,但尚未存放任何物品,是否可以為該倉庫指派管理員?——不可以,因為物品名也是主屬性,根據實體完整性的要求,主屬性不能為空。
  2. 某倉庫被清空後,需要刪除所有與這個倉庫相關的物品存放記錄,會帶來什麼問題?——倉庫本身與管理員的資訊也被隨之刪除了。
  3. 如果某倉庫更換了管理員,會帶來什麼問題?——這個倉庫有幾條物品存放記錄,就要修改多少次管理員資訊。

從這裡我們可以得出結論,在某些特殊情況下,即使關係模式符合 3NF 的要求,仍然存在著插入異常,修改異常與刪除異常的問題,仍然不是 ”好“ 的設計。

造成此問題的原因:存在著主屬性對於碼的部分函式依賴與傳遞函式依賴。(在此例中就是存在主屬性【倉庫名】對於碼【(管理員,物品名)】的部分函式依賴。

解決辦法就是要在 3NF 的基礎上消除主屬性對於碼的部分與傳遞函式依賴。

倉庫(倉庫名,管理員)
庫存(倉庫名,物品名,數量)

這樣,之前的插入異常,修改異常與刪除異常的問題就被解決了。

以上就是關於 BCNF 的解釋。

最近身體不太舒服,寫不動了。有空再放幾個典型習題及其解答吧。
===============================
問題1:

李德竹 :老師您好,我看了您關於資料庫正規化的回答,有一點不太理解,就是關於碼的定義,如果除K之外的所有屬性都完全函式依賴於K時才能稱K為碼,那麼在判斷2NF時又怎麼會存在非主屬性對碼的部分函式依賴這種情況?希望老師有時間能指點一下,謝謝

我 :在“碼”的定義中,除 K 之外的所有屬性應該看成是一個集合 U(也就是一個整體),也就是說,只有 K 能夠完全函式決定 U 中的每一個屬性,那麼 K 才是碼。如果 K 只是能夠完全函式決定 U 中的一部分屬性,而不能完全函式決定另外一部分屬性,那麼 K 不是碼。

比如有關係模式 R (Sno, Sname, Cno, Cname, Sdept, Sloc, Grade),其中函式依賴集為 F= {
Sno → Sname, Sno → Sdept, Sdept → Sloc,Sno → Sloc, Cno → Cname, (Sno, Cno) → Grade }

那麼 R 中的碼只能是 (Sno, Cno),Sno 或 Cno 並不能完全函式決定除 Sno / Cno 之外的所有其他屬性(其實就是不能決定 Grade ),所以單獨的 Sno 與 Cno 並不能作為碼。

所以可得到主屬性:Sno, Cno
非主屬性:Sname, Cname, Sdept, Sloc, Grade

R 中存在非主屬性 Cname 對於碼 (Sno, Cno) 的部分函式依賴 (Cno → Cname) 。(還有很多別的例子就不一一列舉了)。所以 R 不符合 2NF 的要求。

========================================

花了好幾天斷斷續續寫了這個答案,累死我了。看有不少人對此有疑問,乾脆寫一個詳細點的,希望成為這個知識點的權威回答……如果有一些細節方面的問題,比如表達上,還會進行修改,大的方面,肯定是沒錯的。

相關推薦

[轉]資料庫正規化簡介

正規化的級別       設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。      目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規

資料庫正規化(NF)

目錄   基礎知識 函式依賴 1NF 第一正規化 2NF 第二正規化 3NF 第三正規化 BCNF 鮑依斯-科得正規化 四種範氏之間的關係 基礎知識 實體:現實世界中客觀存在並可以被區別的事物。比如“一個學生”、“一本書”、“一門課”等等。值得強

資料庫正規化理解(針對使用最多一、二、三正規化

1.第一正規化(確保每列保持原子性) 第一正規化是最基本的正規化。如果資料庫表中的所有欄位值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。 第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到“地址”這個屬性,本來直接將“地址”屬性設計成一個數據庫表

資料庫正規化各個定義

實體:現實世界中客觀存在並可以被區別的事物。比如“一個學生”、“一本書”、“一門課”等等。值得強調的是這裡所說的“事物”不僅僅是看得見摸得著的“東西”,它也可以是虛擬的,比如說“老師與學校的關係”。 屬性:教科書上解釋為:“實體所具有的某一特性”,由此可見,屬

資料庫基礎知識(1)--資料庫正規化

設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。 目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第三正規化(3NF)、巴斯-科德正規化(BCNF

資料庫正規化的理解

資料庫正規化是資料庫設計中必不可少的知識,沒有對正規化的理解,就無法設計出高效率、優雅的資料庫。甚至設計出錯誤的資料庫。而想要理解並掌握正規化卻並不是那麼容易。教科書中一般以關係代數的方法來解釋資料庫正規化。這樣做雖然能夠十分準確的表達資料庫正規化,但比較抽象,不太直觀,不便

資料庫原理學習筆記(二)資料庫正規化

正規化可以理解成在設計資料表時的規範級別,常見的正規化有 第一正規化(1NF) 第二正規化(2NF) 第三正規化(3NF) BC正規化(BCNF) 第一正規化 要滿足第一正規化,要求資料表的每個屬性無法再分,也就是需要滿足原子性。可以把“不可再

資料庫正規化簡析和舉例

簡介      資料庫正規化在資料庫設計中的地位一直很曖昧,教科書中對於資料庫正規化倒是都給出了學術性的定義,但實際應用中正規化的應用卻不甚樂觀,這篇文章會用簡單的語言和一個簡單的資料庫DEMO將一個不符合

資料庫正規化問題

國內絕大多數院校用的王珊的《資料庫系統概論》這本教材,某些方面並沒有給出很詳細很明確的解釋,與實際應用聯絡不那麼緊密,你有這樣的疑問也是挺正常的。我教《資料庫原理》這門課有幾年了,有很多學生提出了和你一樣的問題,試著給你解釋一下吧。(基本來自於我上課的內容,某些地方為了不過於囉嗦,放棄了一定的嚴謹,主要是在“

資料庫正規化解析(1NF 2NF 3NF BCNF)

資料庫設計正規化是關係型資料庫的設計準則。其目的在於通過規劃設計使得資料庫結構合理,儘量減少資料冗餘,消除儲存異常,方便資料的插入、更新和刪除操作。目前常用正規化包括1NF(第一正規化)、2NF(第二正規化)、3NF(第三正規化)和BCNF(鮑依斯-科得正規化)。 1N

資料庫正規化:1NF、2NF、3NF、BCNF

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

資料庫正規化(通俗易懂)

1. 原始單據與實體之間的關係  可以是一對一、一對多、多對多的關係。在一般情況下,它們是一對一的關係:即一張原始單據對應且只對應一個實體。在特殊情況下,它們可能是一對多或多對一的關係,即一張原始單證對應多個實體,或多張原始單證對應一個實體。這裡的實體可以理解為基本表。明確這種對應關係後,對我們設計錄入介面大

資料庫正規化1NF,2NF,3NF,BCNF詳解

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資

資料庫正規化詳解】1NF-BCNF

關係型資料庫,由於資料分別儲存在不同的表中,因此設計不當就會造成嚴重的資料冗餘。 而如果表的粒度設計得太小,又會放大關係型資料庫讀寫很慢的缺點,表的連線操作會帶來很大的開銷。 因此在設計庫表時,有1NF、2NF、3NF、BCNF、4NF、5NF這些正規化,從前到後要求依次提

資料庫"正規化"

1.為什麼要學習資料庫”正規化”? 當我們獨立去完成一個自己的小專案的時候,肯定要去設計”合適”的資料模型即邏輯架構,那麼,我們怎麼知道自己設計的資料模型是最”合適”的呢?肯定得有一個標準去衡量自己設計的資料模型,看到這裡,大家知道為什麼要學習正規化了.

關係資料庫建表規範(資料庫正規化)續

注:以下所有定義均來自於百度百科1NF:非主屬性函式依賴於碼2NF:非主屬性完全函式依賴於碼3NF:非主屬性既不部分依賴於碼也不傳遞依賴於碼BCNF:所有屬性都不部分依賴或傳遞依賴於碼,所有決定屬性集都包含於碼4NF:所欲非平凡的多值依賴都是函式依賴5NF:連線依賴均由候選碼

資料庫正規化1NF 2NF 3NF BCNF(例項)通俗易懂的講解

正規化應用     我們來逐步搞定一個論壇的資料庫,有如下資訊:     (1) 使用者:使用者名稱,email,主頁,電話,聯絡地址     (2) 帖子:發帖標題,發帖內容,回覆標題,回覆內容     第一次我們將資料庫設計為僅僅存在表:     使用者名稱 email 主頁 電話 聯絡地址 發

關係型資料庫正規化1NF,2NF,3NF

◆ 第一正規化(1NF):強調的是列的原子性,即列不能夠再分成其他幾列。 ◆ 第二正規化(2NF):首先是 1NF,另外包含兩部分內容,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。 ◆ 第三正規化(3NF):首先是 2NF,

(轉載)資料庫正規化及寬表窄表理解

1、資料庫設計的三大正規化,轉載地址:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規

資料庫正規化, 資料倉庫設計架構Kimball 和 Inmon 雜記

關係型資料庫的三大正規化:第一正規化(1NF)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。第二正規化(2NF)是資料庫規範化中所使用的一種正規形式。它的規則是在1NF的基礎上要求資料表裡的所有資料都要