SqlServer—大話函數依賴與范式


說明:數據庫中的某些概念真的很讓人頭疼,概念的東西本來就是很枯燥的,再加上枯燥的學習,那就更加枯燥了。概念這東西,你不理解也能生產東西,經驗多了就行,但是為了更深入的學習,你還必須理解。這里,我拋開書本的概念,盡量以我簡單的理解,介紹一下這些概念:

  • 什么是函數依賴?
  • 什么是完全與部分函數依賴?
  • 什么是平凡和非平凡函數依賴?
  • 什么是屬性集的閉包?
  • 3范式的理解?

(1)什么是函數依賴?

解釋:從這個"函數依賴"短語來看,2個詞語,函數+依賴。

函數:學編程的都知道,但是這里並不僅僅指的指令的集合。讓我們回到第一次接觸"函數"這個詞語的初中或高中時代吧。函數,是一種映射關系,也就是常見的X—>Y的關系,在數學上有很多的函數(Y=X+3),知道了這個關系,我們會有X得出Y,這就是函數,表示2個事物之間的某種對應關系。

依賴:人生分為4階段,第一階段,我依賴於爸媽,第二階段,我依賴於老婆,第三階段,爸媽依賴與我,第四階段,我依賴於我的孩子。這個"依賴"是常用漢語的意思。但在專業術語里面,也就是這么個意思。

函數依賴:有這么個關系實體,學生(學號,姓名,年級,性別,年齡),我知道了一個學號,就可以知道有關這個學號的其他信息。就像,你們知道了我,就可以知道我爸媽是誰,我老婆是誰,以及我未來的孩子是誰(這個,只有到未來了)。

說白了:生活中的某個事物(人)具有一些特殊的屬性(指紋),我們可以通過這個特殊的屬性(指紋)知道它的一些其他的信息,這種關聯我把它看做函數依賴。

(2)什么是完全與部分函數依賴?

解釋:完全和部分,是針對於某個集體而言的。這個集體,指的是主鍵是多個屬性的組合,而不是單個屬性的主鍵。理解了上面的函數依賴,那么這里的完全與部分就不用過多的解釋了。

例如:常見的選課表([學號,課程號],成績)[]里面是主鍵。那么完全函數依賴就是:非主鍵的屬性(成績)必須,全部依賴於主鍵所有的屬性([學號,課程號]),少一個都不可以。說白了,學號+課程號—>成績,只知道其中(學號,課程號)的一個,就不可以。只知道學號,不知道課程號,是沒有辦法知道某人的某個課程的成績的。這,就是完全函數依賴。

而,部分函數依賴,非主鍵的屬性依賴於主鍵中部分的屬性就可以了。

(3)什么是平凡和非平凡函數依賴?

解釋:所謂的平凡,就是很普通的意思,那么非平凡就是不普通的意思。唉,你可別小看這個意思,它卻讓你容易理解概念的東西。那么怎么理解這個"平凡"呢。"平凡"的對立面可以說是特殊,特別,特別就是你平常不見的事物,就很特別,就不平凡。

例如:這個函數依賴(也就是關系):(學號,課程號)——>課程號,由學號和課程號推出課程號,這不是逗人玩兒嗎?誰會這么二呀。已知課程號,你推出課程號,有意思嗎?這就是我認為的重復性生產,太平凡的一件事兒了。所以,這就是平凡函數依賴。

而 (學號,課程號)——>所在系號,從沒有推出,這就是很特殊的一面,就是不平凡的。

說白了,對於一個函數依賴,由左邊——>右邊,如果右邊的屬性,在左邊出現過,那么就是平凡函數依賴。反之,右邊的屬性沒有在左邊出現過,那么就是非平凡函數依賴。

(4)什么是屬性集的閉包?

解釋:屬性集的閉包,首先是屬性集的擁有,其次是閉包,封閉包含。

舉個例子吧:有這個關系

SCSno, Sname, Sex, Birthday, Cno, Cname, Grade, Tno, Tname

滿足函數依賴集:

{Sno→Sname, Sno→Sex, Sno→Birthday, Cno→Cname, Sno, Cno→Grade, Tno→Tname}.

從這個函數依賴中,我們可以知道主鍵是Sno, Cno, Tno這三個屬性的組合。

那么我問:屬性集(Sno, Tno)的閉包是:?

從函數依賴集可知:Sno→Sname, Sno→Sex, Sno→BirthdayTno→Tname

所以,閉包應該是,2個集的並集{Sno, Sname, Sex, Birthday, Tno, Tname}

屬性集的閉包,說白了,就是有屬性集中的每個屬性,可以通過函數依賴推出的所有屬性的集合。

53范式的理解?

范式,我的理解就是制定二維表的標准。

我們常說的1NF是指:表中的每一個屬性都是原子屬性(不可分割的數據項)。第一范式很容易滿足。

2NF:在1NF的前提下,每一個非主屬性對於主鍵都是完全函數依賴的。換句話說,如果一個主鍵是單屬性的話,那么它肯定是完全函數依賴的。

3NF:在2NF的基礎上,每一個非主屬性對於主鍵不存在函數傳遞依賴。這個函數傳遞依賴很容易理解,所以我就沒有解釋。

備注:以上純屬個人的理解,有些文字語言沒有書本上概念的嚴謹,還需參考書本理解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM