資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。
反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。
1.若將所有的資訊放在乙個表中,存在的問題:
現在建立乙個描述學校教務的資料庫,該資料庫涉及的物件包括學生的學號(sno),所在系(sdept),
系主任姓名(mname),課程號(cno)和成績(grade)。假設用乙個單一的關係模式student來表示,
則該關係模式的屬性集合為:
u=存在的問題:
資料冗餘過大。造成大量的儲存空間。(比如在相同的系的各個學號均包含相同的系主任名稱)
更新複雜。(比如修改系主任名稱,需要修改多行)
插入異常:如果乙個系剛成立,尚無學生,就無法將這個系及其系主任存入資料庫。
刪除異常:如果某個系的學生全部畢業了,刪除該系學生資訊的同時,把這個系及其系主任的資訊也去掉了。
概念:關係:指包含具體資料的一張具體 表。
關係模式:指表的定義,包含哪些列,及列之間的相互依賴關係等等。是屬於一種場景的語義描述。
r(u),r是指的關係模式,u是關係模式上列的集合,x,y是u的子集。即x,y是一些列的集合。
函式依賴:如果知道x的值,就一定知道y的值。記作x->y。如知道學生的學號,就一定知道學生的姓名。這屬於函式依賴。
完全函式依賴:如果x->y,且對於x的任何乙個子集x',都有x'不能推導出y,則稱y對x完全函式依賴。
比如知道學號及學號對應的系,可以知道學生姓名,這屬於部分函式依賴,因為知道學號,就可以知道學生姓名。
部分函式依賴:如果x->y,但y不完全函式依賴於x,則y對於x部分函式依賴。
傳遞函式依賴:
x->y,y不是x的子集,y不能推導出x,y->z,則稱z是x的傳遞函式依賴。
非平凡的函式依賴:x->y,但y不屬於x的子集,是非平凡的函式依賴。
平凡的函式依賴:x->y,且y屬於x,則稱x->y是平凡的函式依賴。碼:r
u為列的集合,f為函式依賴x
設k為r中的屬性或者屬性集合(即k是乙個列或幾個列的組合),若k能完全推導出u,
且k的每個子集均不能推導出u,則k為r的候選碼(candidate key),簡稱為碼。若候選碼多於乙個,
則選定其中乙個為主碼。(primary key)。
包含在任何乙個候選碼中的屬性,稱為主屬性,不包含在任何碼中的屬性稱為非主屬性,
或非碼屬性。最簡單個情況,單個屬性是碼,極端的情況,整個屬性是碼.
第一正規化(1nf):
列是同質的(即每乙個列是同一型別的資料)
不同的列可以出自於同乙個域(域即資料型別),不同的屬性要給與不同的屬性名。
列的順序無所謂,即列的次序可以任意交換。
任意的兩個元組不能相同(即不能存在重複行)
行的順序無所謂,即行的次序可以任意交換。
分量必須取原子值,即每乙個分量都必須是不可分的資料項。
第二正規化:
首選滿足於第一正規化。
且每乙個非主屬性完全函式依賴於碼,即屬於第二正規化。
第三正規化
每乙個非主屬性不傳遞依賴於碼。
來自於百科介紹:
第一正規化:
資料庫表的每一列都是不可分割的基本資料項,同一列不能有多個值。
第二正規化:
表中每一行必須被唯一的區分,這個唯一屬性列被稱為主關鍵字,或者主鍵,主碼。
第二正規化要求實體的屬性完全依賴於主屬性。所謂完全依賴就是指不能存在僅依賴主關鍵字一部分的屬性。
第三正規化:
屬性不依賴於其他非主屬性。
或者說要求乙個資料庫表中不包含已在其他表中已包含的非主關鍵字資訊。
1.4 鮑依斯-科得正規化(bcnf是3nf的改進形式)
若關係模式r是第一正規化,且每個屬性都不傳遞依賴於r的候選鍵。這種關係模式就是bcnf模式。即在第三正規化的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵字段的傳遞函式依賴則符合鮑依斯-科得正規化。
假設倉庫管理關係表為storehousemanage(倉庫id, 儲存物品id, 管理員id, 數量),且有乙個管理員只在乙個倉庫工作;乙個倉庫可以儲存多種物品。這個資料庫表中存在如下決定關係:
(倉庫id, 儲存物品id) →(管理員id, 數量)
(管理員id, 儲存物品id) → (倉庫id, 數量)
所以,(倉庫id, 儲存物品id)和(管理員id, 儲存物品id)都是storehousemanage的候選關鍵字,表中的唯一非關鍵字段為數量,它是符合第三正規化的。但是,由於存在如下決定關係:
(倉庫id) → (管理員id)
(管理員id) → (倉庫id)
即存在關鍵字段決定關鍵字段的情況,所以其不符合bcnf正規化。它會出現如下異常情況:
(1) 刪除異常:
當倉庫被清空後,所有"儲存物品id"和"數量"資訊被刪除的同時,"倉庫id"和"管理員id"資訊也被刪除了。
(2) 插入異常:
當倉庫沒有儲存任何物品時,無法給倉庫分配管理員。
(3) 更新異常:
如果倉庫換了管理員,則表中所有行的管理員id都要修改。
把倉庫管理關係表分解為二個關係表:
倉庫管理:storehousemanage(倉庫id, 管理員id);
倉庫:storehouse(倉庫id, 儲存物品id, 數量)。
這樣的資料庫表是符合bcnf正規化的,消除了刪除異常、插入異常和更新異常。
四種正規化之間存在如下關係:
資料庫 資料庫正規化
關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...
資料庫正規化 三正規化
所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...
資料庫正規化
注 表在定義中被稱為關係,記作r 欄位在定義中被稱作屬性 模式 資料庫中有三種模式,外模式,內模式,模式 粗體是關鍵字的意思 斜體為外來鍵 以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了 真暈哦 http blog.csdn.net fantasylu archive 2004 0...