上一次我們介紹了數據庫中關系代數查詢,從選擇、投影到連接等操作符,探索了數據庫查詢
大家可以移步我的文章:數據庫系統概論期末經典大題講解(用關系代數進行查詢)-CSDN博客
今天,我們將繼續沿著數據庫系統的精髓探索之路,深入研究數據庫系統概論中的經典大題:范式、閉包和主碼。讓我們深入挖掘這些概念,并為期末考試做好充分準備
目錄
一.范式提升
1NF
2NF?
3NF
BCNF
綜合例子:?
二.求閉包
三.求主碼
一.范式提升
1NF
關系R中每個分量都是不可分割的數據項,則R屬于1NF
2NF?
定義 若R屬于1NF,且每個非主屬性完全函數依賴于碼,則稱R屬于2NF。?
?該關系模式屬于1NF,不屬于2NF。 因為有非主屬性部分函數依賴于碼:
- 非主屬性Sdept、 Sloc部分函數依賴于碼
方法:
非主屬性有兩種: 一種完全依賴于碼;
???????????????????????????一種部分依賴于碼 --- 將其分出?
就是完全依賴的單獨作為一個關系模式,部分依賴的將部分依賴費主碼和非主屬性作為一個關系模式
?可變為SC(SNO, CNO, G)? ? S-L(SNO, SDEPT, SLOC) ?此時便是2NF
3NF
定義:若R屬于2NF, 且它的任何一個非主屬性都不傳遞依賴于任何候選碼,則R屬于3NF
(不能有傳遞依賴)
上述例子存在? SNO->SDEPT? ?,? SDEPT->SLOC?(存在傳遞依賴了,不是3NF)
規范化過程中通過一組投影分解消除傳遞依賴,建議作如下分解(第二步分解):
已知關系R(A,B,C), A為主碼(A->B, A->C),且B->C, ?? ?
則將R分解成為兩個投影: ?? ??? ?R1(B,C), B為主碼 ?? ??? ?R2(A,B), A為主碼,B為外碼
?據此可分解為:SC(SNO, CNO, G)? ? S-L1(SNO, SDEPT,)? S-L2(SDEPT, SLOC)
BCNF
關系模式R中每一個決定因素都包含(或是)碼,則R屬于BCNF?
綜合例子:?
某書店購書情況匯總登記表 :
根據分析可以得到一組函數依賴: F={ NO→C#,C#→CN,C#→CA,B#→BN,B#→EU,B#→UP,(NO,B#) →QUA },表中(NO,B#)為關鍵字
?先升級為2NF
? ??
再分解為3NF
? ? ? ? ? ??
二.求閉包
在關系模式R<U, F>中為F所邏輯蘊含的函數依賴的全體叫做F的閉包,記為F+
?
設F為屬性集U上的一組函數依賴,X屬于U, X+F={A|X ->A能由Armstrong公理導出}, X+F稱為屬性集X關于函數依賴F的閉包
步驟:?
?eg:
?
三.求主碼
設關系模式R<U, F> (1) 將R的所有屬性分為 L、 R、N和 LR四類?
1.? ?
- L類: 僅出現在F的函數依賴左部的屬性; ? ?
- R類: ………………………...右…………; ? ?
- N類: 在F的函數依賴左右兩邊都不出現的屬性; ? ?
- LR類: …………………………都出現的屬性
2.
- 開始求L類中單個屬性的閉包 ,如果最后結果是全部屬性,那個那個屬性即為主碼
- 所有單個屬性都不能達到結果,那就開始找多個屬性結合的閉包(從2到n慢慢增加,直到結果是全部屬性)
- 如果L類中用完了都不行,那就加上N類屬性,先加一個,不行在增加。
- 如果L+N都不行,最后加上LR類吧(當然老師不會出那么復雜的,一般頂多加上N類就行了)
?
eg:
設關系模式R(A, B, C, D, E, P), 其函數依賴集: ? ??F={A→D, E→D, D→B, BC→D, DC→A} ? ?
求R的所有候選碼。
解: ?L類: C, E ? ? ? ? ?
R類: ? ? ? ? ?
N類: P ? ? ? ? ? ?
LR類: A, B, D
因為(CEP)F+=CEPDBA,所以CEP是R的唯一候選碼
那么今天就先到這里了,之前寫博客都是用富文本,今天發現好多符號都不能打出,影響大家的觀感,只能截圖進來,看來要去學習學習markdown了。希望下次能學會markdown來有更好的格式吧
?
?
?