MySQL筆記9:資料庫規約,三大正規化
阿新 • • 發佈:2022-05-18
9. 資料庫的規約,三大正規化
9.1 設計原因
當資料庫比較複雜時,是需要進行設計
糟糕的設計:
- 資料冗餘,浪費空間
- 資料庫插入和刪除都麻煩,可能出現異常【遮蔽使用物理外來鍵】
- 程式效能差
良好的設計:
- 節省記憶體空間
- 保證資料庫完整性
- 便於系統開發
軟體開發中,資料庫的設計要點:
- 分析需求:分析業務和需要處理的資料的需求
- 概要設計:設計關係圖 E-R圖
設計資料庫的步驟:(個人部落格為例)其他如bbs,crm
- 收集資訊,分析需求
- 使用者表(使用者登入登出,使用者的個人資訊,寫部落格,建立分類)
- 分類表(文章分類,誰建立的)
- 文章表(文章的資訊)
- 友連結串列(友情連結)
- 自定義表(系統資訊,某個關鍵的字,或一些主題)key:value
- 標識實體(把需求落地到每個欄位)
- 標識實體間的關係
- 寫部落格:user - blog
- 建立分類:user - category
- 關注:user - user
- 友鏈:links
- 評論:user - user - blog
9.2 三大正規化
規範資料庫的資料;
為什麼需要資料規範化
- 資訊重複
- 更新異常
- 插入異常
- 無法正常顯示資訊
- 刪除異常
- 丟失有效資訊
三大正規化
-
第一正規化(1NF):
- 原子性,要求資料庫表的每一列都是不可分割的原子資料項
-
第二正規化(2NF):
- 前提:滿足第一正規化
- 每張表只描述一件事情,表裡的每一列都和主鍵相關(聯合主鍵)
-
第三正規化(3NF)
- 前提:滿足第二正規化
- 表中的每一列資料都和主鍵直接相關,而不能間接相關
規範性和效能的問題
阿里:關聯查詢的表不得超過三張表
- 考慮商業化的需求和目標(成本,使用者體驗),資料庫的效能優先
- 在規範效能問題時,需要適當考慮規範性
- 有事故意給某些表增加一些冗餘欄位(從多表查詢變為單表查詢)
- 故意增加一些計算列(從大資料量降為小資料量查詢:索引)