1. 程式人生 > >Mysql範式

Mysql範式

rms 直接 ref 家裏 三範式 mysq blog mysql detail

什麽是範式? ”範式(NF)”是“符合某一種級別的關系模式的集合,表示一個關系內部各屬性之間的聯系的合理化程度”。很晦澀吧?實際上你可以把它粗略地理解為一張數據表的表結構所符合的某種設計標準的級別。就像家裏裝修買建材,最環保的是E0級,其次是E1級,還有E2級等等。數據庫範式也分為1NF,2NF,3NF,BCNF,4NF,5NF。一般在我們設計關系型數據庫的時候,最多考慮到BCNF就夠。符合高一級範式的設計,必定符合低一級範式,例如符合2NF的關系模式,必定符合1NF。

第一範式:確保每列的原子性.

如果每列(或者每個屬性)都是不可再分的最小數據單元(也稱為最小的原子單元),則滿足第一範式.

例如:顧客表(姓名、編號、地址、……)其中"地址"列還可以細分為國家、省、市、區等。

第二範式:在第一範式的基礎上更進一層,目標是確保表中的每列都和主鍵相關.

如果一個關系滿足第一範式,並且除了主鍵以外的其它列,都依賴於該主鍵,則滿足第二範式.

例如:訂單表(訂單編號、產品編號、定購日期、價格、……),"訂單編號"為主鍵,"產品編號"和主鍵列沒有任何的關系,即"產品編號"列不依賴於主鍵列,應刪除該列。

第三範式:在第二範式的基礎上更進一層,目標是確保每列都和主鍵列直接相關,而不是間接相關.

如果一個關系滿足第二範式,並且除了主鍵以外的其它列都不依賴於主鍵列,則滿足第三範式.

為了理解第三範式,需要根據Armstrong公裏之一定義傳遞依賴。假設A、B和C是關系R的三個屬性,如果A-〉B且B-〉C,則從這些函數依賴中,可以得出A-〉C,如上所述,依賴A-〉C是傳遞依賴。

例如:訂單表(訂單編號,定購日期,顧客編號,顧客姓名,……),初看該表沒有問題,滿足第二範式,每列都和主鍵列"訂單編號"相關,再細看你會發現"顧客姓名"和"顧客編號"相關,"顧客編號"和"訂單編號"又相關,最後經過傳遞依賴,"顧客姓名"也和"訂單編號"相關。為了滿足第三範式,應去掉"顧客姓名"列,放入客戶表中。

其他範式應用沒有那麽廣泛,所以在這裏就不細講了。

參考文獻:

MySQL (4) 第一範式 第二範式 第三範式 BC範式

Mysql範式