第一範式:確保每列的原子性. 如果每列(或者每個屬性)都是不可再分的最小數據單元(也稱為最小的原子單元),則滿足第一範式. 例如:顧客表(姓名、編號、地址、……)其中"地址"列還可以細分為國家、省、市、區等。第二範式:在第一範式的基礎上更進一層,目標是確保表中的每列都和主鍵相關. 如果一個關係滿足第 ...
第一範式:確保每列的原子性.
如果每列(或者每個屬性)都是不可再分的最小數據單元(也稱為最小的原子單元),則滿足第一範式.
例如:顧客表(姓名、編號、地址、……)其中"地址"列還可以細分為國家、省、市、區等。
第二範式:在第一範式的基礎上更進一層,目標是確保表中的每列都和主鍵相關.
如果一個關係滿足第一範式,並且除了主鍵以外的其它列,都依賴於該主鍵,則滿足第二範式.
例如:訂單表(訂單編號、產品編號、定購日期、價格、……),"訂單編號"為主鍵,"產品編號"和主鍵列沒有直接的關係,即"產品編號"列不依賴於主鍵列,應刪除該列。
第三範式:在第二範式的基礎上更進一層,目標是確保每列都和主鍵列直接相關,而不是間接相關.
如果一個關係滿足第二範式,並且除了主鍵以外的其它列都不依賴於主鍵列,則滿足第三範式.
為了理解第三範式,需要根據Armstrong公裡之一定義傳遞依賴。假設A、B和C是關係R的三個屬性,如果A-〉B且B-〉C,則從這些函數依賴中,可以得出A-〉C,如上所述,依賴A-〉C是傳遞依賴。
例如:訂單表(訂單編號,定購日期,顧客編號,顧客姓名,……),初看該表沒有問題,滿足第二範式,每列都和主鍵列"訂單編號"相關,再細看你會發現"顧客姓名"和"顧客編號"相關,"顧客編號"和"訂單編號"又相關,最後經過傳遞依賴,"顧客姓名"也和"訂單編號"相關。為了滿足第三範式,應去掉"顧客姓名"列,放入客戶表中。
作用
實際上設計任何一種資料庫應用系統,不論是基於何種數據模型的,都會遇到如何構造合適的數據模式即邏輯結構的問題。由於關係模型有嚴格的數學理論基礎,並且可以向別的數據模型轉換。所以要設計合適的關係模式,使其邏輯結構更加符合要求,出現了規範化理論。而三大範式即第一、第二和第三範式就是規範化理論重要部分,是為了在設計中更好的解決數據冗餘,數據有效性檢查,提高存儲效率。另外還有第四範式、第五範式等。第一範式的作用是要求每個關係的屬性為原子性的,不可再分。即表中不能還有表。滿足第二範式必須滿足第一範式。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被唯一地區分。滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。