所謂正規化就是規範化的關係模式,本質上是一個關係模式。如果你要做一個學生資訊表,這裡面有好多資訊:SNO(學號)、CNO(選修的課程號)、SNAME(姓名)、SAGE(年齡)、GRADE(某門課的成績)、SDEPT(學生屬於哪個系)、DEAN(系主任)、CONTACT(聯絡方式包括手機號和郵箱)我們先來看一下這幾個屬性的關係,如果一個學生的SNO確定下來了,那麼他的SNAME、SAGE、SDEPT和DEAN就確定下來了,我們稱SNAME以及後面的幾項依賴於SNO,或者SNO決定SNAME等項。但是GRADE無法確定,我們就稱GRADE不依賴於SNO,因為還要知道CNO才能確定。最後的CONTACT我們先不管他,等講到第一正規化的時候再說。所以你只要SNO和CNO那麼所有其他的資訊就可以被確定下來了。這個SNO和CNO我們就把它們合起來成為主鍵(或主碼)。但是有的時候SNO和CNO沒必要同時給出來。比如想知道SNAME的時候只要知道SNO就行了,CNO知不知道無所謂的,但是如果想要知道GRADE就必須同時給出SNO和CNO。於是我們稱GRADE完全依賴於SNO和CNO,因為只有給出的主鍵資訊完整了才能查到,只給出SNO或CNO是不行的。我們稱SNAME部分依賴於SNO和CNO,因為只要給出主鍵裡的一部分資訊就可以查詢到,CNO是多餘的資訊。先來看第一正規化。剛剛我們提到了一個CONTACT屬性,這個屬性包括了郵箱和手機號。所以我們就稱這個屬性不是基本資料項,因為它還可以再分。當我們把它分為EMAIL和PHONE時就不能再分了。現在我們得到了一個新的關係模式,每個屬性都是基本資料項,這個新的關係模式就是第一正規化。有一次你往這個關係模式裡存新資料,內容是新增一個學生的某一門課成績,你把SNO、CNO、GRADE都填了上去。後面空了好多,所以你把SNAMESAGE之類的又填了一遍,儘管你知道這根本沒有必要。於是你想改進這個關係模式。你發現除了GRADE完全依賴於主鍵以外,其他都是部分依賴於主鍵。於是你把原來的表拆成了兩個,第一個在原來的表基礎上去掉了GRADE和CNO屬性,第二個則是隻保留了SNO、CNO和GRADE以外全部去掉了。這樣一來就再沒有部分依賴了,每一個屬性的主鍵都是乾乾淨淨的,完全不多餘。雖然關係模式被一分為二,但是他們還是有SNAME做媒介。你得到的這兩個關係模式是不存在部分依賴的,這兩個新的關係模式就叫做第二正規化。你對自己的成果很滿意,但是還沒結束。有一次你在記錄的時候發現好幾個學生是同一個系的,所以他們的系主任也是一樣的。系主任出現的次數太多了,直覺告訴你,反覆出現的東西一般都可以進行簡化。你發現SNO一旦確定SDEPT就能確定,而SDEPT確定DEAN就能確定。DEAN依賴於SDEPT,而SDEPT依賴於SNO,所以DEAN依賴於SNO。我們稱這種依賴為傳遞依賴,也就是說DEAN傳遞依賴於SNO。於是你又開始拆關係模式。第一個關係模式只有SDEPT和DEAN,這樣就把系和系主任聯絡起來了,第二個關係模式只有SNO、SNAME、SAGE和SDEPT,去掉了DEAN。如果你想知道一個學生的系主任,只要先找到系,再透過第一個關係模式找到DEAN就好,因為這兩個關係模式是透過SDEPT聯絡起來的。最後一個關係模式不變。這樣一來你的關係模式就變成了三個互相關聯的小關係模式。而這些小關係模式裡每個屬性只依賴於自己的主鍵,不存在傳遞依賴。我們稱得到的這樣三個小關係模式為第三正規化。總結一下:第一正規化消除非基本資料項。第二正規化消除部分依賴。第三正規化消除傳遞依賴。
所謂正規化就是規範化的關係模式,本質上是一個關係模式。如果你要做一個學生資訊表,這裡面有好多資訊:SNO(學號)、CNO(選修的課程號)、SNAME(姓名)、SAGE(年齡)、GRADE(某門課的成績)、SDEPT(學生屬於哪個系)、DEAN(系主任)、CONTACT(聯絡方式包括手機號和郵箱)我們先來看一下這幾個屬性的關係,如果一個學生的SNO確定下來了,那麼他的SNAME、SAGE、SDEPT和DEAN就確定下來了,我們稱SNAME以及後面的幾項依賴於SNO,或者SNO決定SNAME等項。但是GRADE無法確定,我們就稱GRADE不依賴於SNO,因為還要知道CNO才能確定。最後的CONTACT我們先不管他,等講到第一正規化的時候再說。所以你只要SNO和CNO那麼所有其他的資訊就可以被確定下來了。這個SNO和CNO我們就把它們合起來成為主鍵(或主碼)。但是有的時候SNO和CNO沒必要同時給出來。比如想知道SNAME的時候只要知道SNO就行了,CNO知不知道無所謂的,但是如果想要知道GRADE就必須同時給出SNO和CNO。於是我們稱GRADE完全依賴於SNO和CNO,因為只有給出的主鍵資訊完整了才能查到,只給出SNO或CNO是不行的。我們稱SNAME部分依賴於SNO和CNO,因為只要給出主鍵裡的一部分資訊就可以查詢到,CNO是多餘的資訊。先來看第一正規化。剛剛我們提到了一個CONTACT屬性,這個屬性包括了郵箱和手機號。所以我們就稱這個屬性不是基本資料項,因為它還可以再分。當我們把它分為EMAIL和PHONE時就不能再分了。現在我們得到了一個新的關係模式,每個屬性都是基本資料項,這個新的關係模式就是第一正規化。有一次你往這個關係模式裡存新資料,內容是新增一個學生的某一門課成績,你把SNO、CNO、GRADE都填了上去。後面空了好多,所以你把SNAMESAGE之類的又填了一遍,儘管你知道這根本沒有必要。於是你想改進這個關係模式。你發現除了GRADE完全依賴於主鍵以外,其他都是部分依賴於主鍵。於是你把原來的表拆成了兩個,第一個在原來的表基礎上去掉了GRADE和CNO屬性,第二個則是隻保留了SNO、CNO和GRADE以外全部去掉了。這樣一來就再沒有部分依賴了,每一個屬性的主鍵都是乾乾淨淨的,完全不多餘。雖然關係模式被一分為二,但是他們還是有SNAME做媒介。你得到的這兩個關係模式是不存在部分依賴的,這兩個新的關係模式就叫做第二正規化。你對自己的成果很滿意,但是還沒結束。有一次你在記錄的時候發現好幾個學生是同一個系的,所以他們的系主任也是一樣的。系主任出現的次數太多了,直覺告訴你,反覆出現的東西一般都可以進行簡化。你發現SNO一旦確定SDEPT就能確定,而SDEPT確定DEAN就能確定。DEAN依賴於SDEPT,而SDEPT依賴於SNO,所以DEAN依賴於SNO。我們稱這種依賴為傳遞依賴,也就是說DEAN傳遞依賴於SNO。於是你又開始拆關係模式。第一個關係模式只有SDEPT和DEAN,這樣就把系和系主任聯絡起來了,第二個關係模式只有SNO、SNAME、SAGE和SDEPT,去掉了DEAN。如果你想知道一個學生的系主任,只要先找到系,再透過第一個關係模式找到DEAN就好,因為這兩個關係模式是透過SDEPT聯絡起來的。最後一個關係模式不變。這樣一來你的關係模式就變成了三個互相關聯的小關係模式。而這些小關係模式裡每個屬性只依賴於自己的主鍵,不存在傳遞依賴。我們稱得到的這樣三個小關係模式為第三正規化。總結一下:第一正規化消除非基本資料項。第二正規化消除部分依賴。第三正規化消除傳遞依賴。