今天看了看《數據結構系統原理》(黃靖 主編)這本書(備考自考,不然以我的品味,直接豆瓣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 的大小:傳送門
綜上,個人淺薄理解,若有錯誤請指出,核證後立即改正