相關概念數據庫
候選關鍵字:函數
二維表中,可以唯一肯定記錄的一個字段或幾個字段的組合被稱爲「超關鍵字」。「超關鍵字」雖然能惟一肯定記錄,可是它所包含的字段多是有多餘的。 若是一個超關鍵字去掉其中任何一個字段後再也不能惟一地肯定記錄,則稱它爲 候選關鍵字。候選關鍵字既能惟一地肯定記錄,它包含的字段又是最精煉的。也就是說候選關鍵字是最簡單的超關鍵字。code
主關鍵字(primary key):基礎
是表中的一個或多個字段,它的值用於惟一地標識表中的某一條記錄。 好比在一張成績表中,有字段:學號,科目,成績,任課老師。 學號+科目+任何其餘字段就是超關鍵字,可是若是去掉學號或者科目中的一個就沒法肯定成績,因此學號和科目是兩個候選關鍵字。 只有知道了學號和科目你才能肯定一條記錄,因此學號和科目兩個字段組成了主關鍵字im
部分函數依賴數據
設X,Y是關係R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數依賴於X。關係型數據庫
舉個例子:學生基本信息表R中(學號,身份證號,姓名)固然學號屬性取值是惟一的,在R關係中,(學號,身份證號)->(姓名),(學號)->(姓名),(身份證號)->(姓名);因此姓名部分函數依賴與(學號,身份證號);異常
徹底函數依賴集合
設X,Y是關係R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每個X’都有X’!→Y,則稱Y徹底函數依賴於X。移動
例子:學生基本信息表R(學號,班級,姓名)假設不一樣的班級學號有相同的,班級內學號不能相同,在R關係中,(學號,班級)->(姓名),可是(學號)->(姓名)不成立,(班級)->(姓名)不成立,因此姓名徹底函數依賴與(學號,班級);
傳遞函數依賴
設X,Y,Z是關係R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數依賴於X。
舉例:在關係R(學號 ,宿舍, 費用)中,(學號)->(宿舍),宿舍!=學號,(宿舍)->(費用),費用!=宿舍,因此符合傳遞函數的要求;
第一範式是指數據庫中每一列都不可再次分割,某一屬性不能擁有幾個值,保證每一列的原子性。
例如:好比一個員工表,員工表有,姓名,地址,電話屬性(可能有座機號碼和移動電話號碼),這個時候就電話屬性就不符合第一範式,須要拆分爲座機號碼和移動號碼2個屬性。
第二範式是創建在第一範式的基礎上的,及知足第二範式必定知足第一範式。
第二範式要求:
例如: 若是數據庫是聯合主鍵,有的列只依賴聯合主鍵中的一部分,而不是所有,那麼只有分表才能符合第二範式。在選課關係表(學號,課程號,成績,學分),關鍵字爲組合關鍵字(學號,課程號),但因爲非主屬性學分僅依賴於課程號,對關鍵字(學號,課程號)只是部分依賴,而不是徹底依賴,所以此種方式會致使數據冗餘以及更新異常等問題
若某一範式是第二範式,且每個非主屬性都不傳遞依賴於該範式的候選鍵,則稱爲第三範式,即不能存在:非主鍵列 A 依賴於非主鍵列 B,非主鍵列 B 依賴於主鍵的狀況 。
例如: Employee(emp_id,emp_name,emp_age,dept_id,dept_name,dept_info),當員工表中emp_id可以惟一肯定員工員工信息,可是dept_name可由dept_id惟一肯定,此時,該表不符合第三範式,此時能夠刪除除了dept_id以外的其餘部門信息,把全部部門信息單獨創建一張部門表 。
BCNF是比第三範式更嚴格一個範式。它要求關係模型中全部的屬性(包括主屬性和非主屬性)都不傳遞依賴於任何候選關鍵字。也就是說,當關系型表中功能上互相依賴的那些列的每一列都是一個候選關鍵字時候,該知足BCNF。
BCNF其實是在第三範式的基礎上,進一步消除了主屬性的傳遞依賴。
舉例:有這樣一個配件管理表WPE(WNO,PNO,ENO,QNT),其中WNO表示倉庫號,PNO表示配件號,ENO表示職工號,QNT表示數量。
有如下約束要求:
一個倉庫有多名職工;
一個職工僅在一個倉庫工做;
每一個倉庫裏一種型號的配件由專人負責,但一我的能夠管理幾種配件;
同一種型號的配件能夠分放在幾個倉庫中。
分析表中的函數依賴關係,能夠獲得:
ENO->WNO;
(WNO,PNO)->QNT
(WNO,PNO)->ENO
(ENO,PNO)->QNT
能夠看到,候選鍵有:(ENO,PNO);(WNO,PNO)。因此,ENO,PNO,WNO均爲主屬性,QNT爲非主屬性。顯然,非主屬性是直接依賴於候選鍵的。因此此表知足第三範式。
而咱們觀察一下主屬性:(WNO,PNO)->ENO;ENO->WNO。顯然WNO對於候選鍵(WNO,PNO)存在傳遞依賴,因此不符合BCNF.
解決這個問題的辦法是分拆爲兩個表:管理表EP(ENO,PNO,QNT);工做表EW(ENO,WNO)。但這樣作會致使函數依賴(WNO,PNO)->ENO丟失。