二、数据库原理-设计理论
第一章 關系數(shù)據庫設計理論
?
第一節(jié) ?完整性
?
關系完整性是為保證數(shù)據庫中數(shù)據的正確性和相容性,對關系模型提出的某種約束條件或規(guī)則。完整性通常包括實體完整性,參照完整性和用戶定義完整性。
?
一、實體完整性
實體完整性是指關系的主關鍵字不能取空值。例如:學生表(學號,姓名,姓別,年齡)其中“學號”屬性不以為空。
二、參照完整性
參照完整性定義是建立關系之間聯(lián)系的主關鍵字與外部關鍵字引用的約束條件。例如:
專業(yè)表(專業(yè)號,專業(yè)名)
學生表(學號,專業(yè)號,姓別,年齡)
學生表中的“學號”設為主鍵,“專業(yè)號”設為外鍵,也就是說學生表中的“專業(yè)號”取值要參照專業(yè)表的“專業(yè)號”值。
三、用戶自定義完整性
實體完整性和參照完整性適用于任何關系型數(shù)據庫系統(tǒng),它主要是針對關系的主關鍵字和外部關鍵字取值必須有效而做出的約束。用戶定義完整性則是根據應用環(huán)境的要求和實際的需要,對某一具體應用所涉及的數(shù)據提出約束性條件。例如:學生表(學號,姓名,姓別,年齡)中的“學號”取值必須為數(shù)字且為8位數(shù),這就是用戶定義完整性。
?
第二節(jié) ?范? 式
?
關系數(shù)據庫是利用關系描述現(xiàn)實世界。關系必須遵循一定的規(guī)則,這種規(guī)則就是范式。規(guī)范化目的是使結構更合理,消除存儲異常,使數(shù)據冗余盡量小,便于插入、刪除和更新。
?
一、第一范式(1NF)
在任何一個關系數(shù)據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數(shù)據庫就不是關系數(shù)據庫。
所謂第一范式(1NF)是指數(shù)據庫表的每一列都是不可分割的基本數(shù)據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。(即字段不可再分)
例如:職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話 和一個家里電話號碼)規(guī)范成為1NF有三種方法:
1.重復存儲職工號和姓名。這樣,關鍵字只能是電話號碼。
2.二是職工號為關鍵字,電話號碼分為單位電話和住宅電話兩個屬性
3.三是職工號為關鍵字,但強制每條記錄只能有一個電話號碼。
以上三個方法,第一種方法最不可取,按實際情況選取后兩種情況
?
二、第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據庫表中的非主屬性完全依賴主屬性(即非主鍵字段依賴主鍵)
例如:選課關系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學號, CNO為課程號,GRADEGE 為成績,CREDIT 為學分。 由以上條件,關鍵字為組合關鍵字(SNO,CNO)
?
在應用中使用以上關系模式有以下問題:
1.數(shù)據冗余:假設同一門課由40個學生選修,學分就重復40次。
2.更新異常:若調整了某課程的學分,相應的元組CREDIT值都要更新,有可能會出現(xiàn)同一門課學分不同。
3.插入異常:如計劃開新課,由于沒人選修,沒有學號關鍵字,只能等有人選修才能把課程和學分存入。
4.刪除異常:若學生已經結業(yè),從當前數(shù)據庫刪除選修記錄。某些門課程新生尚未選修,則此門課程及學分記錄無法保存。
?
原因:非主鍵字段CREDIT依賴于CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。
解決方法:分成兩個關系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關系包括兩個關系模式,它們之間通過SC1中的外關鍵字CNO相聯(lián)系,需要時再進行自然聯(lián)接,恢復了原來的關系。
?
三、第三范式(3NF)
滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求非主屬性之間不存在傳遞信賴(非主鍵字段不能相互依賴)。
例如:S1(SNO,SNAME,DNAME,LOCATION) 各屬性分別代表學號,姓名,所在系,系地址。
關鍵字SNO決定各個屬性。由于是單個關鍵字,沒有部分依賴的問題,肯定是2NF。但這關系肯定有大量的冗余,有關學生所在的幾個屬性DNAME,LOCATION將重復存儲,插入,刪除和修改時也將產生類似以上例的情況。
原因:關系中存在傳遞依賴造成的。即SNO -> DNAME,DNAME -> LOCATION, 因此關鍵字DNAME對 LOCATION 函數(shù)決定是通過傳遞依賴 DNAME -> LOCATION 實現(xiàn)的。也就是說,DNAME不直接決定非主屬性LOCATION。
解決方法:分為兩個關系 S(SNO,SNAME,DNO);D(DNO,DNAME,LOCATION)
?
小 結
?目地:規(guī)范化目的是使結構更合理,消除存儲異常,使數(shù)據冗余盡量小,便于插入、刪除和更新
原則:遵從概念單一化 "一事一地"原則,即一個關系模式描述一個實體或實體間的一種聯(lián)系。規(guī)范的實質就是概念的單一化。
方法:將關系模式投影分解成兩個或兩個以上的關系模式。
要求:分解后的關系模式集合應當與原關系模式"等價",即經過自然聯(lián)接可以恢復原關系而不丟失信息,并保持屬性間合理的聯(lián)系。
注意:一個關系模式結這分解可以得到不同關系模式集合,也就是說分解方法不是唯一的。最小冗余的要求必須以分解后的數(shù)據庫能夠表達原來數(shù)據庫所有信息為前提來實現(xiàn)。其根本目標是節(jié)省存儲空間,避免數(shù)據不一致性,提高對關系的操作效率,同時滿足應用需求。實際上,并不一定要求全部模式都達到BCNF不可。有時故意保留部分冗余可能更方便數(shù)據查詢。尤其對于那些更新頻度不高,查詢頻度極高的數(shù)據庫系統(tǒng)更是如此。
以上是基礎理論的東西,請大家想想,你在做數(shù)據庫設計的時候有沒有考慮過遵過以上幾個范式呢,有沒有在數(shù)據庫設計做得不好之時,想一想,對比以上所講,到底是違反了第幾個范式呢?我見過的數(shù)據庫設計,很少有人做到很符合以上幾個范式的,一般說來,第一范式大家都可以遵守,完全遵守第二第三范式的人很少了,遵守的人一定就是設計數(shù)據庫的高手了,BCNF的范式出現(xiàn)機會較少,而且會破壞完整性,你可以在做設計之時不考慮它。
參考資料:http://baike.baidu.com/view/2131801.htm
????????? http://zhidao.baidu.com/question/278790.html
轉載于:https://www.cnblogs.com/Ewin/archive/2010/04/18/1714811.html
總結
以上是生活随笔為你收集整理的二、数据库原理-设计理论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PL/SQL Developer 工具连
- 下一篇: Apple 的CEO 吹响了战斗的号角啦