設計關系資料庫時,遵從不同的規範要求,設計出合理的關系型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫備援越小。
關系資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式(2NF),其餘範式以次類推。一般來說,資料庫隻需滿足第三範式(3NF)就行了。
1、第一範式(1NF):
所謂第一範式(1NF)是指在關系模型中,對于添加的一個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,數組,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一範式(1NF)表中的每個域值隻能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重複的域。
2、第二範式(2NF)
在1NF的基礎上,非碼屬性必須完全依賴于候選碼(在1NF基礎上消除非主屬性對主碼的部分函數依賴)
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個執行個體或記錄必須可以被唯一地區分。選取一個能區分每個實體的屬性或屬性組,作為實體的唯一辨別。例如在員工表中的身份證号碼即可實作每個一員工的區分,該身份證号碼即為候選鍵,任何一個候選鍵都可以被選作主鍵。在找不到候選鍵時,可額外增加屬性以實作區分,如果在員工關系中,沒有對其身份證号進行存儲,而姓名可能會在資料庫運作的某個時間重複,無法區分出實體時,設計辟如ID等不重複的編号以實作區分,被添加的編号或ID選作主鍵。(該主鍵的添加是在ER設計時添加,不是建庫時随意添加),第二範式(2NF)要求實體的屬性完全依賴于主關鍵字。
3、第三範式(3NF)
在2NF基礎上,任何非主屬性不依賴于其它非主屬性(在2NF基礎上消除傳遞依賴)
第三範式(3NF)是第二範式(2NF)的一個子集,即滿足第三範式(3NF)必須滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個關系中不包含已在其它關系已包含的非主關鍵字資訊。例如,存在一個部門資訊表,其中每個部門有部門編号(dept_id)、部門名稱、部門簡介等資訊。那麼在員工資訊表中列出部門編号後就不能再将部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三範式(3NF)也應該建構它,否則就會有大量的資料備援。簡而言之,第三範式就是屬性不依賴于其它非主屬性,也就是在滿足2NF的基礎上,任何非主屬性不得傳遞依賴于主屬性。
4、巴斯-科德範式(BCNF)
Boyce-Codd Normal Form(巴斯-科德範式)
在3NF基礎上,任何非主屬性不能對主鍵子集依賴(在3NF基礎上消除對主碼子集的依賴)
巴斯-科德範式(BCNF)是第三範式(3NF)的一個子集,即滿足巴斯-科德範式(BCNF)必須滿足第三範式(3NF)。通常情況下,巴斯-科德範式被認為沒有新的設計規範加入,隻是對第二範式與第三範式中設計規範要求更強,因而被認為是修正第三範式,也就是說,它事實上是對第三範式的修正,使資料庫備援度更小。這也是BCNF不被稱為第四範式的原因。某些書上,根據範式要求的遞增性将其稱之為第四範式是不規範,也是更讓人不容易了解的地方。而真正的第四範式,則是在設計規範中添加了對多值及依賴的要求。
總結:
可以這麼簡單的了解:
第一範式:資料庫表的每一列都是不可再分割。
第二範式:滿足第一範式,且要求資料庫表中的每個執行個體或行必須可以被唯一的區分。
第三範式:滿足第二範式,且要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。