深入浅出数据库设计三范式
生活随笔
收集整理的這篇文章主要介紹了
深入浅出数据库设计三范式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
設計良好結構的數據庫,可以有效減小數據冗余,減少增刪改中出現的問題。深入理解數據庫設計的三范式,對于設計“健壯的數據庫“十分有必要。數據庫三范式是設計數據庫 時參考的準則,接下來我們一一進行介紹: 一、數據庫第一范式: 數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。(保持數據的原子性) 數據原子性很好理解,就是表中的字段不可再分。符合數據庫第一范式的表,每個字段表意明確,看個例子: 這是一張簡單的員工信息表,其中有工號、姓名、電話三個字段。通過電話這個字段獲得的信息有可能是家庭電話,或是工作地點的電話,或是手機,因此表達的信息并不明確,我們可以改成這樣: 那這樣改完以后,表中所表達的信息就非常明確了。 二、數據庫第二范式: 在滿足第一范式的基礎上,實體的每個非主鍵屬性完全函數依賴于主鍵屬性(消除部分依賴) 主鍵:凡是接觸過數據庫的人,肯定都會知道主鍵,主鍵明確標識了每條記錄,一般是一個字段,也可以由兩個或兩個字段組成。 依賴:對于X的每個值,Y都有一個值與之對應,反過來則不一定不成立,這叫做X函數決定Y,Y函數依賴X(X往往是主鍵)。
? 還拿上面的那張表舉來說,對于每個工號,都有一個姓名與之對應,即工號決定姓名,姓名依賴工號;但由于員工之間可能有重名,一個姓名可能對應多個工號,所以姓名不能決定工號。 部分依賴:當主鍵由兩個或兩個以上字段構成,而表中的某些信息通過主鍵的一個字段就能唯一確定,我們稱這樣的依賴關系為部分依賴,比如這個例子:
? 學生選課(學號,姓名,專業,課程號,課程名,成績),該表中一個學生可以選多門課,一門課有多個學生。學號和課程號可以唯一確定一條記錄,因此用學號和課程號做主鍵。 表中的姓名、專業通過主鍵中的學號就能唯一確定,而課程名通過課程號唯一確定,這就是部分依賴,這樣的設計不符合第二范式。 不符合第二范式會帶來哪些問題呢? 1、數據信息冗余,可見上表 2、增刪改會出現問題,比如有一門《微機原理》沒有人選,那么由于缺少學號(主鍵之一)那么這門課就不能出現在表里。 如何解決呢,我們可以用關系分解的方法消除部分依賴,將上表改成如下三張表:
? ? ? ? ? ?
???
數據庫第三范式: 在滿足第二范式的基礎上,在實體中不存在非主鍵屬性傳遞函數依賴于主鍵屬性。(表中字段[非主鍵]不存在對主鍵的傳遞依賴) 傳遞依賴:A依賴于B,B依賴于C,就可以說A依賴C。看這樣一張表:
?這張表中有如下決定關系: 學號-->姓名,性別,系號-->決定系名,宿舍號-->決定宿舍電話,也有 學號-->系名,學號-->宿舍電話。
? 在這樣一張表中則存在著傳遞依賴。也就是系名依賴系號,系號依賴學號,那么間接的系名依賴學號,宿舍號、宿舍電話和學號之間也有同樣的關系。這樣設計表的同樣會帶來數據冗余,操作異常等問題。那么我們同樣可以用關系分解的分解的方法來消除傳遞依賴,將這張表分成三張表:
? ????
? 這就是數據可設計的三范式了,在設計數據表的過程中注意三范式的應用,多多實踐,有助于對三范式有更深入的理解。
? 還拿上面的那張表舉來說,對于每個工號,都有一個姓名與之對應,即工號決定姓名,姓名依賴工號;但由于員工之間可能有重名,一個姓名可能對應多個工號,所以姓名不能決定工號。 部分依賴:當主鍵由兩個或兩個以上字段構成,而表中的某些信息通過主鍵的一個字段就能唯一確定,我們稱這樣的依賴關系為部分依賴,比如這個例子:
? 學生選課(學號,姓名,專業,課程號,課程名,成績),該表中一個學生可以選多門課,一門課有多個學生。學號和課程號可以唯一確定一條記錄,因此用學號和課程號做主鍵。 表中的姓名、專業通過主鍵中的學號就能唯一確定,而課程名通過課程號唯一確定,這就是部分依賴,這樣的設計不符合第二范式。 不符合第二范式會帶來哪些問題呢? 1、數據信息冗余,可見上表 2、增刪改會出現問題,比如有一門《微機原理》沒有人選,那么由于缺少學號(主鍵之一)那么這門課就不能出現在表里。 如何解決呢,我們可以用關系分解的方法消除部分依賴,將上表改成如下三張表:
? ? ? ? ? ?
???
數據庫第三范式: 在滿足第二范式的基礎上,在實體中不存在非主鍵屬性傳遞函數依賴于主鍵屬性。(表中字段[非主鍵]不存在對主鍵的傳遞依賴) 傳遞依賴:A依賴于B,B依賴于C,就可以說A依賴C。看這樣一張表:
?這張表中有如下決定關系: 學號-->姓名,性別,系號-->決定系名,宿舍號-->決定宿舍電話,也有 學號-->系名,學號-->宿舍電話。
? 在這樣一張表中則存在著傳遞依賴。也就是系名依賴系號,系號依賴學號,那么間接的系名依賴學號,宿舍號、宿舍電話和學號之間也有同樣的關系。這樣設計表的同樣會帶來數據冗余,操作異常等問題。那么我們同樣可以用關系分解的分解的方法來消除傳遞依賴,將這張表分成三張表:
? ????
? 這就是數據可設計的三范式了,在設計數據表的過程中注意三范式的應用,多多實踐,有助于對三范式有更深入的理解。
轉載于:https://www.cnblogs.com/gjhjoy/p/3527370.html
總結
以上是生活随笔為你收集整理的深入浅出数据库设计三范式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 把URL中的中文转换成utf-
- 下一篇: 20131127-正则表达式