MySQL 規範數據庫設計
1 爲什麼需要設計
糟糕的數據庫設計:
-
數據冗餘,浪費空間
-
數據插入和刪除都會麻煩,可能產生異常,儘量不要使用物理外鍵
-
程序的性能差
良好的數據庫設計:
- 節省內存空間
- 保證數據庫的完整性
- 方便我們開發系統
軟件開發中關於數據庫的設計:
- 分析需求:分析業務和需要處理的數據庫的需求
- 概要設計:設計關係圖 E-R 圖
設計數據庫的步驟:(個人博客)
-
收集信息,分析需求
- 用戶表(用戶登陸註銷,用戶的個人信息,寫博客,創建分類)
- 分類表(文章分類,誰創建的)
- 文章表(文章信息)
- 友情鏈接表(友鏈信息)
- 自定義表(系統信息,某個關鍵的字,或者一些主字段) key:value
-
標識實體(把需求落地到每個字段)
依照以上需求,設計的數據庫在以下圖片中展示!
-
標識實體之間的關係
- 寫博客:user -> blog
- 創建分類:user -> category
- 關注:user -> user
- 友鏈: links
- 評論: user -> user-blog
數據庫展示:
user表:
category表:
blog表:
links表:
comment表:
user_follow表:
2 三大範式
使用範式是爲了避免以下問題:
- 信息重複
- 更新異常
- 插入異常
- 無法正確顯示信息
- 刪除異常
- 丟失有效信息
三大範式
三大範式用來規範數據庫的設計。
- 第一範式(1NF)
原子性:保證每一列不可再分
- 第二範式(2NF)
前提:滿足第一範式
每張表只描述一件事情
- 第三範式(3NF)
前提:滿足第一和第二範式
確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。
規範性和性能的問題
阿里規範:關聯查詢的表不得超過三張表
- 考慮商業化的需求和目標(成本,用戶體驗!)數據庫的性能更加重要
- 在規範性能的問題時,需要適當的考慮規範性!
- 有時需要故意給某些表增加一些冗餘的字段。(從多表查詢變爲單表查詢)
- 故意增加一些計算列(從大數據量降低爲小數據量的查詢:索引)