談談我對數據庫三範式的字面理解

今天看了看《數據結構系統原理》(黃靖 主編)這本書(備考自考,不然以我的品味,直接豆瓣9.0以上,哈哈哈)
首先看下書上給出的定義:

  • 第一範式(1NF):設 R 爲任一給定關係,若 R 中的每個列與行的交點處的取值都是不可再分的基本元素,則 R 爲第一範式
  • 第二範式(2NF):設 R 爲任一給定關係,若 R 爲 1NF,且其所有非主屬性都完全函數依賴於候選關鍵字,則 R 爲第二範式
  • 第三範式(3NF):設 R 爲任一給定關係,若 R 爲 2NF,且每一個非主屬性都不傳遞函數依賴關係於候選關鍵字,則 R 爲第三範式

個人理解:

  • 第一範式(1NF):確保一張表的所有column(或字段)都是不可再分的,這一點我認同書上的說法,比較好理解(針對字段)
  • 第二範式(2NF):首先一張表至少定義一個主鍵或聯合主鍵,其次確保非主鍵的字段只能根據主鍵(如果是聯合主鍵,也只能是聯合主鍵,不能是聯合主鍵的子集)查詢的到(針對主鍵)
  • 第三範式(3NF):確保每一個非主鍵,不能具有主鍵的特性(主鍵的特性:能夠根據它查詢到唯一一條數據)(針對表)
    • 舉個反例:學生表有學號(主鍵),姓名,年齡, 系號,系名,系主任
    • 首先存在傳遞依賴關係:學號->學生->系號->系名->系主任
    • 根據我的定義,該表存在非主鍵<系號>擁有主鍵特性,因爲可以根據系號查詢唯一的<系名>和<系主任>
    • 所以應當將<系名>和<系主任>移至系表,學生表可保留<系號>來索引系表
  • 第三範式(3NF):第一次應該理解錯了。應該是非主鍵關鍵字,都必須直接依賴主鍵,不能通過傳遞依賴的方式依賴主鍵。

關於什麼叫候選關鍵字,可以參考我的另一篇博客:傳送門
函數依賴:學生的姓名可以由學號決定,即姓名依賴學號。就像 y = f(x), 可以看出 y 的取值大小依賴於 x 的大小:傳送門

綜上,個人淺薄理解,若有錯誤請指出,核證後立即改正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章