數據庫設計範式

關於三個範式我的總結:數據庫

  • 第一範式:屬性不可才分,好比:電話(手機和座機),最好分紅倆屬性
  • 第二範式:列裏面的一個項不能僅僅依賴於另外一個,或部分項,這時須要拆表
  • 第三範式:知足第二範式,拆表後,本表僅保留其餘相關表的主鍵便可,這樣消除傳遞依賴

基礎概念數據庫設計

  • 實體:現實世界中客觀存在並能夠被區別的事物
  • 屬性:教科書上解釋爲:「實體所具備的某一特性」
  • 元組:表中的一行就是一個元組
  • 份量:元組的某個屬性值
  • 碼:表中能夠惟一肯定一個元組的某個屬性(或者屬性組)
    • 若是這樣的碼有不止一個,那麼你們都叫候選碼,咱們從候選碼中挑一個出來作老大,它就叫主碼
  • 全碼:若是一個碼包含了全部的屬性,這個碼就是全碼。
  • 主屬性:一個屬性只要在任何一個候選碼中出現過,這個屬性就是主屬性。
  • 非主屬性:與上面相反,沒有在任何候選碼中出現過,這個屬性就是非主屬性。
  • 外碼:一個屬性(或屬性組),它不是碼,可是它表明別的表的碼,它就是外碼。

範式:函數

  • 範式包含關係:
    • 一個數據庫設計若是符合第二範式,必定也符合第一範式。若是符合第三範式,必定也符合第二範式……

第一範式(1NF):屬性不可分。設計

  • 不知足第一範式的數據庫,不是關係數據庫!
  • 舉兩個不知足例子:

第二範式(2NF):符合1NF,而且,非主屬性徹底依賴於碼。3d

  • 一個學生上一門課,必定是特定某個教材。因此有(學生,課程)->教材
    • 所以(學生,課程)是一個碼。
    • (學生,課程)是個碼,課程卻決定了教材,這就叫作不徹底依賴
      • 出現這樣的狀況,就不知足第二範式!
      • 因此表要作拆分,以下圖
        • 複合規範,課程卻決定了教材,是教材的徹底依賴

第三範式(3NF):符合2NF,而且,消除傳遞依賴blog

  • 若是存在"A → B → C"的決定關係,則C傳遞函數依賴於A
  • 「老師」和「老師職稱」有傳遞依賴
    • 老師升級了,變教授了,要改數據庫,表中有N條,改了N次……(修改異常)
    • 沒人選這個老師的課了,老師的職稱也沒了記錄……(刪除異常)
    • 新來一個老師,還沒分配教什麼課,他的職稱記到哪?……(插入異常)

BC範式(BCNF):符合3NF,而且,主屬性不依賴於主屬性基礎

  • 不存在任何字段對任一候選關鍵字段的傳遞函數依賴
  • 當只檢查非主屬性時,就成了第三範式。
相關文章
相關標籤/搜索