1. 程式人生 > 其它 >MySQL04:規範資料庫設計

MySQL04:規範資料庫設計

為什麼需要設計

當資料庫比較複雜的時候,就需要設計了

糟糕的資料庫設計

  • 資料冗餘,浪費空間
  • 資料庫的插入和刪除很麻煩
  • 程式的效能差
  • 使用物理外來鍵

良好的資料庫設計

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

設計資料庫的步驟(個人部落格):

  • 收集資訊,分析需求

    • 使用者表(使用者登入登出,個人資訊,寫部落格,建立分類)
    • 分類表(文章分類,建立者)
    • 文章表(文章資訊)
    • 評論表(評論)
    • 關注數(關注數,粉絲數)
    • 友情連結(其他連結)
  • 標識實體(把需求落實到每個表和欄位)

    • user(id、username、password、gender、age)
    • category(id、category_name、creator_id)
    • article(id、title、author_id、category_id、content、create_time、update_time)
    • comment(id、blog_id、user-id、content、create_time、user_id_parent)
    • user_follow(id、user_id、follow_id)
    • links(id、links、href)
  • 標識實體之間的關係

    • 寫部落格(user --> blog)
    • 建立分類(user --> category)
    • 關注(user --> user)
    • 評論(user --> user --> blog)
    • 友情連結(links)

三大正規化

第一正規化(1NF)

要求資料表的每一列都是不可分割的原子資料項

具有原子性

第二正規化(2NF)

確保資料表的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵)

主鍵列與非主鍵列遵循完全函式依賴關係

第三正規化(3NF)

確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關

非主鍵列之間沒有傳遞函式依賴關係

注:區分第二正規化和第三正規化

  • 2NF:非主鍵列是否完全依賴於主鍵,還是依賴於主鍵的一部分
  • 3NF:非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列

利弊

好處:

  • 避免資訊重複、更新異常、插入異常、刪除異常、丟失有效的資訊

缺點:

  • 規範越高,效能越差,考慮商業化的需求和目標,資料庫的效能更加重要
  • 關聯查詢不得超過三張表,故意新增一些冗餘欄位,將多表查詢變為單表查詢
  • 需要平衡規範性和效能