貫穿全文的乙個例子。
第一正規化(1nf)
幾個重要的概念。
第二正規化(2nf)
第三正規化(3nf)
bc正規化(bcnf)
第四正規化(4nf)
插入異常:如果目前開設了計算機系,但是尚未招生,那麼計算機系是無法插入到表的系名中的,(學號,課名)是主屬性,不能為空。
刪除異常:如果經濟系的學生全部畢業了,在刪除所有學生的時候,會將經濟系一併刪除
完全函式依賴:在函式依賴的基礎上,我們的a屬性是乙個屬性組,只有這個屬性組中的全部屬性才能確定唯一的b屬性,a的任何乙個子集都不可以。比如(學號,課名)->成績,而單獨的學號或者課名都不能確定成績,這就叫完全函式依賴。
部分函式依賴:和完全函式依賴相比,a屬性組中的部分屬性就能確定b屬性,其它屬性可有可無,比如(學號,課名)->姓名,其實只要學號就可以了,這樣的依賴就叫部分函式依賴。
傳遞函式依賴:如果a->b,b->c,並且b不能->a(防止直接a->c),那麼我們可以得出結論a->c,叫做c傳遞函式依賴a。比如學號->系名,系名->系主任,並且(系名不能決定學號),所以系主任傳遞函式依賴學號。
碼:乙個屬性或者屬性組,使得整個關係中除過此屬性或者屬性組之外的其餘屬性都完全函式依賴
於它,那它就是碼。例如(學號,成績),它們兩個的組合可以將其他所有的屬性都決定了,(學號,課名)->分數,學號->姓名,學號->系名,學號->系名->系主任,所以(學號,課名)就是這個關係中的乙個碼,那這個關係中還有別的碼嗎? 誰知道呢,但我們的分析過程應該是這樣的:從乙個屬性一直到n個屬性全部來一遍。
乙個屬性:學號,姓名,系名,系主任,課名,分數。找反例即可:學號不能決定分數,(必須要課名),姓名什麼也決定不了,系名只能決定系主任,課名也決定不了什麼,分數一樣。所以乙個屬性中肯定是沒有碼的。
兩個屬性:(學號,姓名),(學號,系名),(學號,系主任),(學號,課名),(學號,分數),(姓名,系名),(姓名,系主任),(姓名,課名),(姓名,分數),(系名,系主任),(系名,課名),(系名,分數),(系主任,課名),(系主任,分數),(課名,分數)。呼~終於完了,我們再進行分析,發現只有(學號,課名),這個組合與其他的關係來說是完全函式依賴。也就是它們是乙個碼。
三個屬性:……
四個屬性:……
五個屬性:……
六個屬性:……
好吧,只能這樣嗎?對,只能這樣碼
,那麼在以後的分析中,如果包含(學號,課名)的那就一定不是碼,因為要完全函式依賴。比如(學號,課名,系名)就不用分析了。其他的方法大家自己總結吧。
呼呼~,返過頭再看一遍,我們要向第二正規化出發了。
插入異常問題:現在新開設乙個系,尚未招生還是無法將系名插入到學生表中,因為學號是主屬性,不能為空。沒有改善。
刪除異常問題:乙個系畢業,刪除這個系的所有學生資訊,那還是會連帶刪除掉系的資訊。沒有改善。
刪除異常問題:乙個系畢業,刪除這個系的所有學生資訊,現在不會連帶刪除掉系的資訊,因為我們有繫這個表。問題得到改善。
二個屬性:(管理員,物品),(倉庫,物品)
三個屬性:包含兩個屬性中的了,pass
四個屬性:包含兩個屬性中的了,pass
插入問題:如果新建倉庫,尚未存入物品,那麼也不能為倉庫分配管理員。
修改異常:如果某個倉庫更換了管理員,修改的時候需要逐條記錄一起修改。
插入問題:現在直接再倉庫表中新建倉庫,與管理員沒有關係。得到改善。
修改異常:修改了某個倉庫的管理員,直接修改倉庫表就可以了。得到改善。
插入問題:當某個課程增加了乙個任課老師,那麼需要插入多個元組。
刪除問題:如果刪除一本書,需要刪除很多條記錄,非常麻煩。
比如:在teaching中,c、b、t是teaching的子集,t=teaching-c-b。給定(c,b),比如(資料庫原理與應用,sql server 2000),能確定一組t值(鄧宇,孫澤)。但是這組t值只與c(資料庫原理與應用)有關,與b(sql server 2000)沒有關係,我們就說c->->t。叫做t多值依賴於c。
平凡多值依賴:如果y為空集。x->->z就是平凡多值依賴
非平凡多值依賴:y不為空。
插入問題:某個課程增加老師,只要在tc表中新增一條記錄就好了。改善
刪除問題:刪除一本書,也只要在bc表中刪除一條記錄即可。改善
資料庫三大正規化詳解(通俗易懂)
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...
資料庫三大正規化詳解(通俗易懂)
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...
資料庫三大正規化詳解(通俗易懂)
第二正規化 2nf 和第三正規化 3nf 的概念很容易混淆,區分它們的關鍵點在於 2nf,非主鍵列是否完全依賴於主鍵,還是依賴於主鍵的一部分 3nf,非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列。什麼是正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗...