資料規範大緻分為 第一範式 、第二範式、第三範式三類,今天我們就來詳細探讨一下
第一範式:(1NF)無重複的列
首先第一範式,官方的定義是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義一個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關系。在第一範式1NF中表的每一行隻包含一個執行個體的資訊。簡而言之,第一範式就是無重複的列,語言比較多,但實際上總結出來,就是一點,資料不重複且不可分割
以一個學生類進行示例:
假如我們需要統計學生的個人資訊,正常的資料表設計方案是這樣的

這樣的一個表,結構上倒也能使用,但是如果後續的需求變為,讓你統計學生中來自湖北的學生有多少,那這個資料結構就顯得心有餘而力不足了,這個時候我們應該将表優化為如下格式
這樣子的話,省份|地市|區縣|街道都可以參與條件查詢與計算了,這個時候就滿足第一範式了。
這個時候我們來從函數依賴的角度來研究這幾個字段,這個表的候選碼是學号和姓名,學号可以推導出姓名,姓名可以推導出性别和年齡,這個時候可以看出該表存在傳遞函數依賴,必然不滿足第三範式,而學号、姓名無法推導出省份,地市等,說明這個表目前存在部分函數依賴,不滿足第二範式,接下來我們來看看第二範式的定義。
第二範式:(2NF)屬性完全依賴于主鍵
第二範式建立在第一範式的基礎上,即滿足第二範式一定滿足第一範式,第二範式要求資料表每一個執行個體或者行必須被唯一辨別。除滿足第一範式外還有兩個條件,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須完全依賴于主鍵,而不能隻依賴于主鍵的一部分。每一行的資料隻能與其中一列相關,即一行資料隻做一件事。隻要資料列中出現資料重複,就要把表拆分開來。
那如果需要将上面的表修改為第二範式,需要進行下述拆分,就可以滿足第二範式了;
表一:學号|姓名|性别|年齡|
表二:位址編号|省份|地市|區縣|詳細位址
第三範式:(3NF)屬性不依賴于其它非主屬性
第三範式若某一範式是第二範式,且每一個非主屬性都不傳遞依賴于該範式的候選鍵,則稱為第三範式,即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況。