資料庫——規範資料庫設計及三大正規化

2020-10-13 13:00:25

資料庫——規範資料庫設計

為什麼需要設計資料庫

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

糟糕的資料庫設計

  • 資料冗餘,浪費空間
  • 資料庫插入和刪除都會麻煩、異常(遮蔽使用物理外來鍵)
  • 程式效能差

良好的資料庫設計

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

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

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

三大正規化

正規化(資料庫設計正規化,資料庫的設計正規化)是符合某一種級別的關係模式的集合。構造資料庫必須遵循一定的規則。在關聯式資料庫中,這種規則就是正規化。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。

為什麼需要資料規範化

防止:

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

三大正規化

第一規格化(1NF)

原子性:保證每一列不可再分

說明:在任何一個關聯式資料庫中,第一規格化(1NF)是對關係模式的基本要求,不滿足第一規格化(1NF)的資料庫就不是關聯式資料庫。

第二正規化(2NF)

前提:滿足第一規格化

第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關

第三正規化(3NF)

前提:滿足第一規格化,第二正規化

第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關,第三正規化就是屬性不依賴於其它非主屬性

思考:規範性和效能的問題

  • 考慮商業化的需求和目標(成本,使用者需求),資料庫的效能更重要
  • 在規範效能問題的時候,需要適當考慮一下規範性
  • 故意給某些表增加冗餘的欄位(反正規化)
  • 故意增加一些計算列(從巨量資料量降低為小資料量的查詢)

反正規化化

反正規化化指的是通過增加冗餘或重複的資料來提高資料庫的讀效能。

反正規化化可以減少關聯查詢時,join表的次數。

關聯查詢的表不得超過三張 (參考阿里巴巴開發手冊)

阿里巴巴開發手冊