目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。通常說來,數據庫只需知足第三範式(3NF)就好了。下面用畫圖方式簡單介紹下前三範式mysql
1NF:字段不可分;
2NF:有主鍵,非主鍵字段依賴主鍵;
3NF:非主鍵字段不能相互依賴;sql
解釋:
1NF:原子性 字段不可再分,不然就不是關係數據庫;
2NF:惟一性 一個表只說明一個事物;
3NF:每列都與主鍵有直接關係,不存在傳遞依賴;數據庫
1NF:無重複的列,每一列都是不可分割的基本數據項,同一 列中不能有多個值,即實體中的某個屬性不能有多個值或者不 能有重複的屬性。除去同類型的字段,就是無重複的列
說明:第一範式(1NF)是對關係模式的基本要求,不知足第 一範式(1NF)的數據庫就不是關係數據庫
blog
2NF:屬性徹底依賴於主鍵,第二範式必須先知足第一範式, 要求表中的每一個行必須能夠被惟一地區分。一般爲表加上一個 列,以存儲各個實例的惟一標識PK,非PK的字段須要與整個 PK有直接相關性
基礎
3NF:屬性不依賴於其它非主屬性,知足第三範式必須先知足 第二範式。第三範式要求一個數據庫表中不包含已在其它表中 已包含的非主關鍵字信息,非PK的字段間不能有從屬關係
擴展
四、BCNF(BC範式)im
它構建在第三範式的基礎上,若是關係模型R是第一範式,且每一個屬性都不傳遞依賴於R的候選鍵,那麼稱R爲BCNF的模式。數據
假設倉庫管理關係表(倉庫號,存儲物品號,管理員號,數量),知足一個管理員只在一個倉庫工做;一個倉庫能夠存儲多種物品,則存在以下關係:異常
(倉庫號,存儲物品號)——>(管理員號,數量)img
(管理員號,存儲物品號)——>(倉庫號,數量)
因此,(倉庫號,存儲物品號)和(管理員號,存儲物品號)都是倉庫管理關係表的候選碼,表中惟一非關鍵字段爲數量,它是符合第三範式的。可是,因爲存在以下決定關係:
(倉庫號)——>(管理員號)
(管理員號)——>(倉庫號)
即存在關鍵字段決定關鍵字段的狀況,所以其不符合BCNF。把倉庫管理關係表分解爲兩個關係表倉庫管理表(倉庫號,管理員號)和倉庫表(倉庫號,存儲物品號,數量),這樣這個數據庫表是符合BCNF的,並消除了刪除異常、插入異常和更新異常。
五、4NF(第四範式)
設R是一個關係模型,D是R上的多值依賴集合。若是D中存在凡多值依賴X->Y時,X必是R的超鍵,那麼稱R是第四範式的模式。
例如,職工表(職工編號,職工孩子姓名,職工選修課程),在這個表中,同一個職工可能會有多個職工孩子姓名,一樣,同一個職工也可能會有多個職工選修課程,即這裏存在着多值事實,不符合第四範式。若是要符合第四範式,只須要將上表分爲兩個表,使它們只有一個多值事實,例如職工表一(職工編號,職工孩子姓名),職工表二(職工編號,職工選修課程),兩個表都只有一個多值事實,因此符合第四範式。
拓展:各範式的關係圖以下所示: