設計正規化是符合某一級別的關係模式的集合。構造資料庫必須遵循一定的規則,在關聯式資料庫中,這種規則就叫正規化。
目前關聯式資料庫有六種正規化,一般來說,資料庫滿足到第三種正規化就行了。
關係資料中幾種正規化介紹:
1. 第一方式(1nf)
在任何關聯式資料庫中,第一正規化(1nf)就是對關係模式的基本要求,不滿足1nf的資料庫就是不是關聯式資料庫。
定義:資料庫中的字段是單一屬性,不可再分。這個單一屬性由基本型別構成,包括:整型、實數、字元型、邏輯型、日期型等等、
例如:如下的資料庫是符合第一正規化的:
欄位1 欄位2 欄位3 欄位4
而這樣的資料庫是不符合第一正規化的:
欄位1 欄位2 欄位3 欄位4
欄位3.1 欄位3.2
很顯然,在當前的關聯式資料庫中不可能做出不符合第一正規化的資料庫。
2. 第二正規化(2nf)
定義:資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴(部分函式依賴是指存在組合關鍵字段中某些字段決定非關鍵字段的情況),即所有的非關鍵字段完全依賴任意一組候選關鍵字段。
假定選課關係表selectcourse(學號、姓名、年齡、課程名稱、成績、分數),關鍵字為組合關鍵字(學號、課程名稱),因此存在如下決定關係:
(學號、課程名稱)------>(姓名、年齡、成績、分數)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:
(課程名稱)->(學分)
(學號)->(姓名、年齡)
即存在組合關鍵字的字段決定非關鍵字的情況。
由於不符合第二正規化,這個選課關係表會存在如下問題:
(1).資料冗餘
同一課程由n個學生選修,「學分」就會重複n-1次;同一學生選修了n門課程,姓名和年齡就會重複n-1;
(2).更新異常
若要調整某門課程的學分,則資料庫表的所有行的「學分」都要更新,否則出現同一門課程「學分」不同的情況。
(3).插入異常
若新增一門新的課程,由於沒人選修,這樣,由於沒有「學號」關鍵字,課程名稱和學分也無法記錄入資料庫。
(4).刪除異常
假如一些學生已完成了選修課程,這時就應該從資料庫表中刪除。但是,如果真的刪除的話,課程名稱和學分資訊也會被刪除了。
把選課關係表selectcourse改為如下三張表:
學生:student(學號、姓名、年齡)
課程:course(課程名稱、學分)
選課關係:selectcourse(學號、課程名稱、成績)
這樣的資料庫表就符合第二正規化,消除了資料冗餘、更新異常、插入異常、刪除異常。
3. 第三正規化(3nf)
定義:資料表中非關鍵字段不存在對任一候選關鍵字段的傳遞依賴。
所謂的傳遞依賴是值,如果存在「a->b->c」的決定關係,則c傳遞依賴於a。因此,滿足第三正規化的資料表應該不存在如下的依賴關係:
關鍵字段->非關鍵字段x->非關鍵字段y
(學號)->(姓名、年齡、所在學院、學院位址、學院**)
這是符合第二正規化的,但是不符合第三正規化,因為存在如下決定關係:
(學號)->(所在學院)->(學院位址,學院**)
即存在非關鍵字段"學院地點"、"學院**"對關鍵字段"學號"的傳遞函式依賴。
它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況。
把學生關係表拆分如下:
學生:(學號、姓名、年齡、所在學院)
資料庫 資料庫正規化
關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...
資料庫正規化 三正規化
所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...
資料庫正規化
注 表在定義中被稱為關係,記作r 欄位在定義中被稱作屬性 模式 資料庫中有三種模式,外模式,內模式,模式 粗體是關鍵字的意思 斜體為外來鍵 以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了 真暈哦 http blog.csdn.net fantasylu archive 2004 0...