mysql的三大範式

網上找的,原創不知:諒解
更詳細的是知乎劉慰老師:https://www.zhihu.com/question/24696366/answer/29189700 後面還有王紅波用戶的解釋能夠借鑑
第一範式:確保每列的原子性.
若是每列(或者每一個屬性)都是不可再分的最小數據單元(也稱爲最小的原子單元),則知足第一範式.
例如:顧客表(姓名、編號、地址、……)其中"地址"列還能夠細分爲國家、省、市、區等。

第二範式:在第一範式的基礎上更進一層,目標是確保表中的每列都和主鍵相關.
若是一個關係知足第一範式,而且除了主鍵之外的其它列,都依賴於該主鍵,則知足第二範式.
例如:訂單表(訂單編號、產品編號、定購日期、價格、……),"訂單編號"爲主鍵,"產品編號"和主鍵列沒有直接的關係,即"產品編號"列不依賴於主鍵列,應刪除該列。

第三範式:在第二範式的基礎上更進一層,目標是確保每列都和主鍵列直接相關,而不是間接相關.
若是一個關係知足第二範式,而且除了主鍵之外的其它列都不依賴於主鍵列,則知足第三範式.
爲了理解第三範式,須要根據Armstrong千米之必定義傳遞依賴。假設A、B和C是關係R的三個屬性,若是A-〉B且B-〉C,則從這些函數依賴中,能夠得出A-〉C,如上所述,依賴A-〉C是傳遞依賴。
例如:訂單表(訂單編號,定購日期,顧客編號,顧客姓名,……),初看該表沒有問題,知足第二範式,每列都和主鍵列"訂單編號"相關,再細看你會發現"顧客姓名"和"顧客編號"相關,"顧客編號"和"訂單編號"又相關,最後通過傳遞依賴,"顧客姓名"也和"訂單編號"相關。爲了知足第三範式,應去掉"顧客姓名"列,放入客戶表中。

做用
實際上設計任何一種數據庫應用系統,不管是基於何種數據模型的,都會遇到如何構造合適的數據模式即邏輯結構的問題。因爲關係模型有嚴格的數學理論基礎,而且能夠向別的數據模型轉換。因此要設計合適的關係模式,使其邏輯結構更加符合要求,出現了規範化理論。而三大範式即第1、第二和第三範式就是規範化理論重要部分,是爲了在設計中更好的解決數據冗餘,數據有效性檢查,提升存儲效率。另外還有第四範式、第五範式等。第一範式的做用是要求每一個關係的屬性爲原子性的,不可再分。即表中不能還有表。知足第二範式必須知足第一範式。第二範式(2NF)要求數據庫表中的每一個實例或行必須能夠被惟一地區分。知足第三範式(3NF)必須先知足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。
相關文章
相關標籤/搜索