MySQL關系規范化
作者:就叫易易好了
時間:2020/10/21
指導老師:桃群老師
一、關系規范化
1、函式依賴
什么是函式依賴?比如學生管理系統資料庫,有學生姓名(Sname)、學生系名(Sdept)、學生學號(Sno)等等,一個學號只能唯一確定一個學生,一個學生只在一個系學習,所以,當“學號”確定后,學生姓名和該學生所在系也被唯一確定了,
這時我們可以說
Sno函式決定Sname和Sdept,或者說Sname,Sdept函式依賴于Sno
可記作:Sno->Sname,Sno->Sdept
1.1 完全函式依賴
在R(U)中,若X->Y,并且對于X的任意一個真子集X’,都有Y不依賴于X’,那么稱Y對X完全函式依賴
比如一個學生的學號和課程號才能共同決定一個學生該門課的成績,即(Sno,Cno)->Grade,但X的真子集為Sno或者Cno,他們無法單獨決定該門課的成績,所以學號和課程號完全函式依賴成績
2.2 部分函式依賴
在R(U)中,若X->Y,對于X的任意一個真子集X’,有Y依賴于X’ ,那么稱Y對X部分函式依賴,
比如(Sno,Cno)->Sname,X的真子集Sno和Cn都能單獨決定學生姓名,所以學號和課程號部分函式依賴學生姓名,
2.3 傳遞函式依賴
在R(U)中,如果Y依賴于X,X不依賴于Y,Z依賴于Y,則稱Z對X傳遞函式依賴;
比如:Sno->Sdept,Sdept不依賴于Sno,Sdept->Manager,則Sno傳遞函式依賴于Manager
2.4 直接函式依賴
在R(U)中,如果Y依賴于X,X依賴于Y,Z依賴于Y,則稱Z對X直接函式依賴
比如:Sno->Sdept,Sdept->Sno,Sdept->Manager,則Sno直接函式依賴于Manager
二、范式
范式是衡量關系的規范化程度,
- 滿足最低要求的是第一范式,簡稱1NF,在第一范式中滿足進一步要求為第二范式,簡稱2NF,以此類推,
- 1NF<2NF <3NF <BCNF <4NF <5NF
- 一個低一級的范式關系模式,通過模式分解可轉換為更高一級的范式關系模式集合,這個程序就叫規范化,
1、第一范式 (1NF)
若一個關系模式R的所有屬性都是不可再分項,則該關系屬于第一范式
| 學號 | 姓名 | 班級 | 正班長 | 副班長 | |
|---|---|---|---|---|---|
| 2018029 | 成小白 | 5班 | 龍龍 | 豫豫 | |
| 2018030 | 晨小美 | 5班 | 龍龍 | 豫豫 |
在上面這個表格中,所有屬性都是不可再分項,所以該關系為1NF,
2、第二范式(2NF)
1NF是關系資料庫中對關系最基本的要求,但不是理想的結構形式,仍然有大量的資料冗余和操作例外,所以為了解決這些問題,就要消除模式中屬性之間存在的部分函式依賴,將其轉化成更高一級的第二范式,
若關系模式R屬于1NF,且R中每個非主屬性都完全函式依賴于主關鍵字,則稱R是第二范式(2NF)
也就是說當1NF消除了非主屬性對關鍵字的部分函式依賴,則稱為2NF
案例:
學生關系S(Sno,Sname,Sdept,Manager,Cno,Grade)
·關系S屬于第一范式
·關系S不屬于第二范式,存在非主屬性對(Sno,Cno)的部分函式依賴
·如果將該學生關系S分解成以下兩個關系S1和S2,
-S1(Sno,Cno,Grade),這時Grade完全依賴于主碼
沒有部分函式依賴,所以屬于第二范式
-S2(Sno,Sname,Sdept,Manager)
主碼是Sno,其他非主關鍵字都是完全函式依賴于主碼
屬于第二范式
3、第三范式(3NF)
當第二范式消除了非主屬性對碼的傳遞函式依賴,則稱為第三范式
舉例:
-
關系S1(Sno,Cno,Grade),不存在非主屬性對主屬性的部分函式依賴個傳遞函式依賴,所以S1屬于第三范式,
-
關系S2(Sno,Sname,Sdept,Manager),存在非主屬性Manager對碼Sno的傳遞函式依賴,即Sno->Sdept,Sdept不依賴于Sno,Sdept->Manager,Sno傳遞函式依賴于Manager,所以S2不屬于第三范式,
-
若將S2分解成下述兩個關系S3和S4,即:
S3(Sno,Sname,Sdept),消除了非主屬性對主屬性的部分函式依賴和傳遞函式依賴,屬于第三范式,
S4(Sdept,Manager),消除了非主屬性對主屬性的部分函式依賴和傳遞函式依賴,屬于第三范式,
解決了洗掉例外、更新例外和冗余度大等問題
4、BC范式(BCNF)
當第三范式消除了主屬性對碼的部分和傳遞函式依賴,稱為BCNF
- 如果關系R是BCNF,那么R一定是3NF
- 如果R是第三范式,并且R只有一個候選碼,則R必屬于BCNF
- 二元關系模式R必定是BCNF
- 都是主屬性的關系并非一定屬于BCNF
從資料庫設計的角度看,在函式依賴的基礎上,分解最高范式BCNF的模式中仍然勛在資料冗余問題,這時就需要更高的范式來解決這個問題,本篇文章先到這里,后面再更新多值依賴,連接依賴和更高范式喔~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186513.html
標籤:其他
上一篇:在pycharm中webdriver.Chrome() 前幾天正常運行,今天運行時Chrome剛打開立刻關閉了。什么原因如何解決?
下一篇:登錄OEM錯誤 java.lang.Exception: Exception in sending Request :: null 解決方案
