日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

范式通俗理解:1NF、2NF、3NF和BNCF

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 范式通俗理解:1NF、2NF、3NF和BNCF 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

范式通俗理解:1NF、2NF、3NF和BNCF

  • 準備知識
    • 超鍵、候選鍵、主鍵
    • 函數依賴
    • 部分依賴
    • 傳遞依賴
  • 范式
    • 1NF
    • 2NF
    • 3NF
    • BCNF
  • 參考

準備知識

超鍵、候選鍵、主鍵

  • 超鍵
    超鍵(super key):在關系中能唯一標識元組的屬性集稱為關系模式的超鍵

  • 候選鍵
    候選鍵(candidate key):不含有多余屬性的超鍵稱為候選鍵。也就是關系中的一個屬性組,其值能唯一標識一個元組。若從屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選鍵。

    主屬性:任何一個候選鍵中的屬性稱作主屬性。(請記住這個概念)

  • 主鍵
    主鍵(primary key):用戶從一個關系的多個候選鍵中,選定一個作為主鍵。

結合具體的例子進行解釋,現有學生表如下:
學生(學號,姓名,性別,身份證號)

學號姓名性別身份證號
1小王344
2小吳354
3小麗364
4小張374
  • 超鍵
    由超鍵的定義可知,在學生表中含有學號或者身份證號的任意組合都可以唯一標識一個學生,那么它們就是此表的超鍵。如:(學號)、(身份證號)、(學號,姓名)、(身份證號,性別)等。

  • 候選鍵
    候選鍵屬于超鍵,它是最小的超鍵,就是說如果再去掉候選鍵中的任何一個屬性它就不再是超鍵了。對于(學號、姓名)來說,去掉姓名后仍是一個超鍵,那么它就不是候選鍵。其中,學生表中的候選鍵為:(學號)、(身份證號),主屬性就是學號、身份證號。

  • 主鍵
    主鍵就是候選鍵里面的一個,用戶可以選擇,那么在這里我們選擇(學號)作為學生表的主鍵。

  • 鍵 = 碼,英文key。

函數依賴

這里先給出數學描述,再進行通俗解釋。

  • 數學描述
  • 通俗理解
    函數依賴的英文定義是:

The value of one or a group attributes can decide the value of other
attributes.

很容易理解,也就是一個或者一組屬性的值可以決定其他屬性的值。候選鍵都可以做到。

部分依賴

  • 數學描述
  • 通俗理解
    部分依賴是什么情況呢?
    舉個例子,現有一關于學生的關系模式Student(學生編號 , 學生姓名, 班級編號, 院系, 課程編號 , 成績)
學生編號學生姓名班級編號院系課程編號成績
S01楊明D01思齊C0190
S02李婉D01思齊C0187
S01楊明D01思齊C0292
S03劉海D02述圣C0195
S04安然D02述圣C0278
S05樂天D03省身C0182

(學生編號#、課程編號#)作為主鍵,可以唯一標識每條元組,但是對于學生姓名、學生所屬的班級編號、院系,這三個屬性可以直接通過學生編號來確定,在這里課程編號#顯得很多余。于是稱,學生姓名、班級編號、院系對(學生編號#、課程編號#)部分函數依賴。

即,非主屬性對鍵有部分函數依賴。

主屬性:任何一個候選鍵中的屬性稱作主屬性。
鍵在這里理解成候選鍵

傳遞依賴

  • 數學描述
  • 通俗理解
    繼續以Student表為例,
學生編號學生姓名班級編號院系課程編號成績
S01楊明D01思齊C0190
S02李婉D01思齊C0187
S01楊明D01思齊C0292
S03劉海D02述圣C0195
S04安然D02述圣C0278
S05樂天D03省身C0182

學生編號可以唯一確定他所在的院系,但是注意到這中間存在傳遞過程,即學生編號唯一確定該學生所對應的班級編號,班級編號對應唯一的院系。我們稱,院系對學生編號傳遞函數依賴。

即,非主屬性對鍵有部分函數依賴。

主屬性:任何一個候選鍵中的屬性稱作主屬性。

范式

關系數據庫中的模式設計要滿足一定的規范,引入了范式這一概念。
不管做哪種范式的設計,最終要的思想是“one fact in one place”,也就是“一事一地”。

1NF

定義:關系中每一分量不可再分。即不能以集合、序列等作為屬性。(也就是不能表中套表,要保證數據的原子性。)

舉例

學生編號課程編號
S01{C1,C2,C3}
S02{C1,C4}

它就不滿足1NF,因為{C1,C2,C3}和{C1,C4}是集合。

修改為符合1NF:

學生編號課程編號
S01C1
S01C2
S01C3
S02C1
S02C4

2NF

定義:在1NF基礎上,消除非主屬性對鍵的部分依賴,則稱它符合2NF。
根據上面對部分依賴的分析,對于Student表:

學生編號學生姓名班級編號院系課程編號成績
S01楊明D01思齊C0190
S02李婉D01思齊C0187
S01楊明D01思齊C0292
S03劉海D02述圣C0195
S04安然D02述圣C0278
S05樂天D03省身C0182

對于學生姓名、學生所屬的班級編號、院系,這三個屬性可以直接通過學生編號來確定,在這里課程編號#顯得很多余。也就是,學生姓名、班級編號、院系對(學生編號#、課程編號#)部分函數依賴。把Student表進行拆分,可以消除部分依賴。

其中,學生表Student如下:

學生編號學生姓名班級編號院系
S01楊明D01思齊
S02李婉D01思齊
S01楊明D01思齊
S03劉海D02述圣
S04安然D02述圣
S05樂天D03省身

學生-課程表如下:

學生編號課程編號成績
S01C0190
S02C0187
S01C0292
S03C0195
S04C0278
S05C0182

符合2NF。

3NF

定義:在2NF基礎上,消除非主屬性對鍵的傳遞依賴,則稱它符合3NF。

根據上面對傳遞依賴的分析,對于Student表,學生編號可以唯一確定他所在的院系,但是注意到這中間存在傳遞過程,即學生編號唯一確定該學生所對應的班級編號,班級編號對應唯一的院系。我們稱,院系對學生編號傳遞函數依賴。

把Student表繼續進行拆分,可以消除傳遞依賴。

其中,學生表Student如下:

學生編號學生姓名班級編號
S01楊明D01
S02李婉D01
S01楊明D01
S03劉海D02
S04安然D02
S05樂天D03

班級-院系表如下:

班級編號院系
D01思齊
D02述圣
D03省身

符合2NF。

BCNF

我當時在看BCNF的時候,這塊是最懵的地方,網上找的例子五花八門……解釋和過程感覺沒有比較詳細的,最后反正得到了一個結果orz。我本來想把這個范式按照類似的定義來寫的……但是到BNCF發現不能直接寫成“在3NF基礎上,消除主屬性對鍵的部分依賴、傳遞依賴,則稱它符合BCNF。”

因為這樣不太好解釋,故而調整了方案。我認為,理解更重要。

先給個文縐縐的定義

換言之,對于關系模式R,如果每一個函數依賴的決定因素都包含鍵,則R屬于BCNF范式。

現在舉例,現有關系模式:通訊(城市名,街道名,郵政編碼)

函數依賴關系集為:
F={(城市名,街道名)-> 郵政編碼,郵政編碼 -> 城市名}
也就是一個城市名和一個街道名,對應一個郵政編碼;一個郵政編碼對應一個城市名。

此時,候選鍵(城市名,街道名)非主屬性郵政編碼完全依賴于候選鍵,且無傳遞依賴,屬于3NF。

那么它是否屬于BCNF呢?我們按照下面的定義來看一下,

換言之,對于關系模式R,如果每一個函數依賴的決定因素都包含鍵,則R屬于BCNF范式。

對于決定因素(城市名,街道名),它包含鍵(城市名,街道名),其實它本身就是鍵了,沒問題;
對于決定因素郵政編碼,它不包含鍵(城市名,街道名)

所以它不屬于BCNF。在關系模式R中,如果每一個決定因素都包含碼,則R屬于BCNF。

參考

[1] 超鍵、候選鍵、主鍵、外鍵介紹
[2] 數據庫設計與管理

總結

以上是生活随笔為你收集整理的范式通俗理解:1NF、2NF、3NF和BNCF的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。