一、為什么需要設計
當數(shù)據(jù)庫比較復雜,我們就需要設計
糟糕的數(shù)據(jù)庫設計:
- 數(shù)據(jù)冗余,浪費空間
- 數(shù)據(jù)庫插入和刪除都會麻煩
- 程序的性能差
良好的數(shù)據(jù)庫設計:
- 節(jié)省內(nèi)存空間
- 保證數(shù)據(jù)庫的完整性
- 方便我們開發(fā)系統(tǒng)
軟件開發(fā)中,關(guān)于數(shù)據(jù)庫的設計
- 分析需求:分析業(yè)務和需要處理的數(shù)據(jù)庫需求
- 概要設計:設計關(guān)系圖ER圖
設計數(shù)據(jù)庫的步驟:(個人博客)
- 收集信息,分析需求
(1)用戶表(用戶登錄注銷,用戶的個人信息,寫博客,創(chuàng)建分類)
(2)分類表(文章分類,誰創(chuàng)建的)
(3)文章表(文章信息)
(4)評論表
(5)友鏈表(友鏈信息)
(6)自定義表(系統(tǒng)信息,某個關(guān)鍵的字或者一些主題)
(7)說說表 - 標識實體類(把需求落地到每個字段)
- 標識實體間的關(guān)系
(1)寫博客:user-->blog
(2)創(chuàng)建分類:user-->categary
(3)關(guān)注:user-->user
(3)友鏈:links
(4)評論:user-user-blog
二、三大范式
為什么需要數(shù)據(jù)規(guī)范化
- 信息重復
- 更新異常
- 插入異常
- 刪除異常
三大范式
第一范式(1NF)
原子性:保證每一列不可再分
第二范式(2NF)
前提:滿足第一范式
每張表只描述一件事情
第三范式(3NF)
前提:滿足第一范式、第二范式
第三范式確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān)
規(guī)范和性能
關(guān)聯(lián)查詢不能超過三張表
- 考慮商業(yè)化的需求和目標(成本,用戶體驗)性能更重要
- 在規(guī)范性能問題的時候,需要適當?shù)目紤]規(guī)范性!
- 故意會某些表增加一些冗余字段(多表轉(zhuǎn)單表)
- 故意增加計算列(將大數(shù)據(jù)量降低為小數(shù)據(jù)量的查詢)