1. 程式人生 > 其它 >MySQL筆記9:資料庫規約,三大正規化

MySQL筆記9:資料庫規約,三大正規化

9. 資料庫的規約,三大正規化

9.1 設計原因

當資料庫比較複雜時,是需要進行設計

糟糕的設計:

  • 資料冗餘,浪費空間
  • 資料庫插入和刪除都麻煩,可能出現異常【遮蔽使用物理外來鍵】
  • 程式效能差

良好的設計

  • 節省記憶體空間
  • 保證資料庫完整性
  • 便於系統開發

軟體開發中,資料庫的設計要點

  • 分析需求:分析業務和需要處理的資料的需求
  • 概要設計:設計關係圖 E-R圖

設計資料庫的步驟:(個人部落格為例)其他如bbs,crm

  • 收集資訊,分析需求
    • 使用者表(使用者登入登出,使用者的個人資訊,寫部落格,建立分類)
    • 分類表(文章分類,誰建立的)
    • 文章表(文章的資訊)
    • 友連結串列(友情連結)
    • 自定義表(系統資訊,某個關鍵的字,或一些主題)key:value
  • 標識實體(把需求落地到每個欄位)
  • 標識實體間的關係
    • 寫部落格:user - blog
    • 建立分類:user - category
    • 關注:user - user
    • 友鏈:links
    • 評論:user - user - blog

9.2 三大正規化

規範資料庫的資料;

為什麼需要資料規範化

  • 資訊重複
  • 更新異常
  • 插入異常
    • 無法正常顯示資訊
  • 刪除異常
    • 丟失有效資訊

三大正規化

  • 第一正規化(1NF)
    • 原子性,要求資料庫表的每一列都是不可分割的原子資料項
  • 第二正規化(2NF):
    • 前提:滿足第一正規化
    • 每張表只描述一件事情,表裡的每一列都和主鍵相關(聯合主鍵)
  • 第三正規化(3NF)
    • 前提:滿足第二正規化
    • 表中的每一列資料都和主鍵直接相關,而不能間接相關

規範性和效能的問題

阿里:關聯查詢的表不得超過三張表

  • 考慮商業化的需求和目標(成本,使用者體驗),資料庫的效能優先
  • 在規範效能問題時,需要適當考慮規範性
  • 有事故意給某些表增加一些冗餘欄位(從多表查詢變為單表查詢)
  • 故意增加一些計算列(從大資料量降為小資料量查詢:索引)