數據庫相關知識整理(一)

數據庫範式

第一範式:屬性不可再分

即表中的列的具有原子性,不可再分解,即列的信息,不能分解, 只要數據庫是關係型數據庫(MySQL/oracle/db2 /SQL server),就自動的滿足 1NF。 數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。如果實體中的某個屬性有多個值時,必須拆分爲不同的屬性。通俗理解即一個字段只存儲一項信息。

第二範式:消除部分函數依賴

如果關係模型R爲第一範式,並且R中的每一個非主屬性完全函數依賴於R的某個候選鍵,則稱R爲第二範式模式(如果A是關係模式R的候選鍵的一個屬性,則稱A是R的主屬性,否則稱A是R的非主屬性)。
例如,在選課關係表(學號,課程號,成績,學分),關鍵字爲組合關鍵字(學號,課程號),但由於非主屬性學分僅依賴於課程號,對關鍵字(學號,課程號)只是部分依賴,而不是完全依賴,因此此種方式會導致數據冗餘以及更新異常等問題,解決辦法是將其分爲兩個關係模式:學生表(學號,課程號,分數)和課程表(課程號,學分),新關係通過學生表中的外關鍵字課程號聯繫,在需要時進行連接。

第三範式:消除傳遞依賴

如果關係模式R是2NF,且關係模式R(U,F)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則稱關係R是屬於第三範式。

第三範式(3NF);符合2NF,並且,消除傳遞依賴。

上圖中符合2NF ,但存在傳遞依賴(老師——>老師職稱。一個老師一定能確定一個老師職稱)。

解決辦法:分解。投影分解:

BC範式

BC範式(BCNF)是Boyce-Codd範式的縮寫,其定義是:在關係模式中每一個決定因素都包含候選鍵,也就是說,只要屬性或屬性組A能夠決定任何一個屬性B,則A的子集中必須有候選鍵。BCNF範式排除了任何屬性(不光是非主屬性,2NF和3NF所限制的都是非主屬性)對候選鍵的傳遞依賴與部分依賴。

比如我們有一個學生導師表,其中包含字段:學生ID,專業,導師,專業GPA,這其中學生ID和專業是聯合主鍵。

這個表的設計滿足三範式,有主鍵,不存在主鍵的部分依賴,不存在非主鍵的傳遞依賴。但是這裏存在另一個依賴關係,“專業”函數依賴於“導師”,也就是說每個導師只做一個專業方面的導師,只要知道了是哪個導師,我們自然就知道是哪個專業的了。

所以這個表的部分主鍵依賴於非主鍵部分,那麼我們可以進行以下的調整,拆分成2個表:

第四範式:消除多值依賴

 

參考資料:https://www.cnblogs.com/studyzy/p/5823224.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章