數據庫三範式

數據庫三範式

  • 第一範式(1NF):字段不可分,原子性,字段不可再分,否則就不是關係數據庫;
    
  • 第二範式(2NF):有主鍵,非主鍵字段依賴主鍵,唯一性 ,一個表只說明一個事物;
    
  • 第三範式(3NF):非主鍵字段不能相互依賴,每列都與主鍵有直接關係,不存在傳遞依賴
    
  • 一般來說的數據庫三範式都是指的關係型數據庫,範式指的就是規範的意思,三範式指的就是利用關係型數據庫進行建表時候普遍需要遵循的三個規範(即1NF,2NF,3NF)
    

    注意:三大範式只是一般設計數據庫的基本理念,可以建立冗餘較小、結構合理的數據庫。如果有特殊情況,當然要特殊對待,數據庫設計最重要的是看需求跟性能,需求>性能>表結構。所以不能一味的去追求範式建立數據庫。

    1、第一範式:建表時要保證列的原子性(即不可分割性)打個比方
    在這裏插入圖片描述
    userphone(電話)這個字段有可能是座機,也可能是手機,具有可分割性,所以不符合1NF;應該改成
    在這裏插入圖片描述
    2、第二範式:每一行的數據只能與其中一列相關,即一行數據只做一件事。只要數據列中出現數據重複,就要把表拆分開來
    第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求數據庫表中的每個實例或記錄必須可以被唯一地區分。選取一個能區分每個實體的屬性或屬性組,作爲實體的唯一標識。
    在這裏插入圖片描述
    如果一個用戶定了多個房間,那麼那麼相當於聯繫人、聯繫人電話、身份證號這三個字段就會重複出現在每一行數據中,造成數據的冗餘,不符合第二範式(2NF);
    所以第二範式要符合所有字段要和主鍵有直接的依賴關係,不然會造成數據的冗餘;應該改成一對多的形式,這樣就能解決冗餘的問題:
    訂單表
    在這裏插入圖片描述
    客戶表:
    在這裏插入圖片描述
    3、第三範式: 數據不能存在傳遞關係,即每個屬性都跟主鍵有直接關係而不是間接關係
    第三範式(3NF)是第二範式(2NF)的一個子集,即滿足第三範式(3NF)必須滿足第二範式(2NF)。第三範式(3NF)要求一個關係中不包含已在其它關係已包含的非主關鍵字信息。
    例如:
    在這裏插入圖片描述
    比如說現在有個Student表,如果把表設計成這個樣子的話,那麼所在院校、學院、班級這三個字段的信息就會有大量的重複,不符合第三範式(3NF);應該改成這個樣子:
    在這裏插入圖片描述
    院校表:
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章