1. 程式人生 > >資料庫開發(六)資料庫設計

資料庫開發(六)資料庫設計

資料庫設計(資料庫開發前期重要部分)

  • 邏輯模型-->物理模型-->轉換成SQL,建立表等物件
  • Power Design等軟體都可以繪製ER圖
  • 物理模型可以直接轉換成SQL語句
  • 實體關係:
    • 區域
    • 部門
    • 員工
    • 客戶
    • >各個實體之間的關係??
    • 所有內容不能寫在一個表中,如下表可以拆出一個區域表和其他表
    • 名字 入職時間 薪資 部門名 區域名
      aa ... 5000 java工程師 1
      bb   8000 java工程師 1
      cc   8000 測試 2
    • 區域表:

      id 區域名
      1 華東區
      2 華中區
      3 華北區

資料庫設計正規化:用來規範資料庫的設計

目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第三正規化(3NF)、巴斯-科德正規化(BCNF)第四正規化(4NF)、第五正規化(5NF,又稱為完美正規化)

後一個是基於前一個的,比前一個更嚴格

通常只需遵循到第三正規化

  • 1NF:列應該是不可拆分的,原子的,不應該包含多個欄位值
  • 2NF:要求資料庫表中的每個例項或記錄必須可以被唯一區分
    • 要求每個表都有一個主鍵列,能唯一的代表這個表,其它的列完全依賴於這個列
    • 我們通常會選擇一個與業務無關的列id
  • 3NF:簡而言之,第三正規化要求一個關係中不包含也在其它關係也包含的非關鍵字訊息,消除冗餘
    • 實際中,有時為了查詢方便,反而會適當加一個冗餘欄位
    • 如:
      • 員工表:id,first_name,last_name,start_date,dept_id,name
      • 部門表:id,name,region_id    name完全依賴於id
      • 每個員工都有員工部門編號
        • dept_id依賴於id
        • name依賴dept_id
        • name依賴id

實體:表

實體的關係:表的關係

  • 一對一:
    • 丈夫和妻子
      • 一個丈夫最多隻能有一個妻子,一個妻子最多隻能有一個丈夫
        • 外來鍵:兩側都可以
    • 人和護照
      • 一個人最多隻能有一個護照,一個護照最多隻能有一個人
        • 外來鍵:護照一側合理(ps:人可能沒有護照,護照一定有對應的人)
  • 一對多
    • 父親和孩子
      • 一個父親可以有多個孩子,一個孩子只能有一個父親
        • 外來鍵:在多的一側加外來鍵
    • 部門和員工
      • 員工部門可以有多個員工,一個員工屬於一個部門
        • 外來鍵:在多的一側加外來鍵
  • 多對多
    • 學生和老師
      • 一個學生可以有多個老師,一個老師可以有多個學生
        • 外來鍵:
          • 一般會建立一箇中間表
            id stu_id tea_id
            1 1 1
            2 1 2
            3 1 3
            4 2 1
          • 學生<-->選課<-->老師

          • 老師和選課:一對多

          • 學生和選課:一對多