MySQL04:規範資料庫設計
阿新 • • 發佈:2022-04-01
為什麼需要設計
當資料庫比較複雜的時候,就需要設計了
糟糕的資料庫設計
- 資料冗餘,浪費空間
- 資料庫的插入和刪除很麻煩
- 程式的效能差
- 使用物理外來鍵
良好的資料庫設計
- 節省記憶體空間
- 保證資料庫的完整性
- 方便系統的開發
設計資料庫的步驟(個人部落格):
-
收集資訊,分析需求
- 使用者表(使用者登入登出,個人資訊,寫部落格,建立分類)
- 分類表(文章分類,建立者)
- 文章表(文章資訊)
- 評論表(評論)
- 關注數(關注數,粉絲數)
- 友情連結(其他連結)
-
標識實體(把需求落實到每個表和欄位)
- 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:非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列
利弊
好處:
- 避免資訊重複、更新異常、插入異常、刪除異常、丟失有效的資訊
缺點:
- 規範越高,效能越差,考慮商業化的需求和目標,資料庫的效能更加重要
- 關聯查詢不得超過三張表,故意新增一些冗餘欄位,將多表查詢變為單表查詢
- 需要平衡規範性和效能