1nf:字段不可分;
2nf:有主鍵,非主鍵字段依賴主鍵;
3nf:非主鍵字段不能相互依賴;
不符合第一正規化的例子(關聯式資料庫中create不出這樣的表):
表:欄位1, 欄位2(欄位2.1, 欄位2.2), 欄位3 ......
存在的問題: 因為設計不出這樣的表, 所以沒有問題;
不符合第二正規化的例子:
假定選課關係表為selectcourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關係
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的字段決定非關鍵字的情況。
由於不符合2nf,這個選課關係表會存在如下問題:
(1) 資料冗餘:
同一門課程由n個學生選修,"學分"就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。
(2) 更新異常:
若調整了某門課程的學分,資料表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
(3) 插入異常:
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。
(4) 刪除異常:
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
把選課關係表selectcourse改為如下三個表:
學生:student(學號, 姓名, 年齡);
課程:course(課程名稱, 學分);
選課關係:selectcourse(學號, 課程名稱, 成績)。 //關係型資料庫的關係型的意思估計也就是通過這張表把所有有關的表關聯起來的吧
這樣的資料庫表是符合第二正規化的, 消除了資料冗餘、更新異常、插入異常和刪除異常。
另外,所有單關鍵字的資料庫表都符合第二正規化,因為不可能存在組合關鍵字。
不符合第三正規化的例子:
假定學生關係表為student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**),關鍵字為單一關鍵字"學號",因為存在如下決定關係:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院**)
這個資料庫是符合2nf的,但是不符合3nf,因為存在如下決定關係:
(學號) → (所在學院) → (學院地點, 學院**)
即存在非關鍵字段"學院地點"、"學院**"對關鍵字段"學號"的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關係表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, **)。
這樣的資料庫表是符合第三正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。
資料庫三大正規化簡單理解
資料庫設計當中三正規化是經常遇到的,如果實際專案資料庫設計中能達到第三正規化基本也就滿足要求了,那麼如何快速有效的理解三個正規化,同時應用於實際專案中去呢?首先看看標準定義的三個正規化 第一正規化 1nf 所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即...
資料庫的三大正規化理解
1.第一正規化 要求所有字段值不可再分,保持每個欄位的原子性 2.第二正規化 表中的每個欄位都要和主鍵相關,而不能之和主鍵 聯合主鍵 的一部分相關,即不存在部分依賴 一張表中只儲存一種資料。比如要設計乙個學生課程資訊表 學號,課程號,姓名,學分 該錶包含了兩類資訊 學生資訊與課程。由於非主鍵必須依賴...
資料庫三大正規化通俗理解
資料庫三大正規化 正規化的簡介 正規化的英文名稱是normal form,它是英國人e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的。正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是...