八、规范数据库设计
8.1、為什么需要設(shè)計(jì)
2021年12月24日
18:26
當(dāng)數(shù)據(jù)庫比較復(fù)雜的時(shí)候,我們就需要設(shè)計(jì)了
糟糕的數(shù)據(jù)庫設(shè)計(jì):
- 數(shù)據(jù)冗余,浪費(fèi)空間
- 數(shù)據(jù)庫插入和刪除都會(huì)麻煩、異常【屏蔽使用物理外鍵】
- 程序的性能差
良好的數(shù)據(jù)庫設(shè)計(jì):
- 節(jié)省內(nèi)存空間
- 保證數(shù)據(jù)庫的完整性
- 方便我們開發(fā)系統(tǒng)
軟件開發(fā)中,關(guān)于數(shù)據(jù)庫的設(shè)計(jì)
- 分析需求:分析業(yè)務(wù)和需要處理的數(shù)據(jù)庫的需求
- 概要設(shè)計(jì):設(shè)計(jì)關(guān)系圖 E-R圖
設(shè)計(jì)數(shù)據(jù)庫的步驟:
- 收集信息,分析需求 - 用戶表(用戶登錄注銷,用戶的個(gè)人信息,寫博客,創(chuàng)建分類)
- 分類表(文章分類,誰創(chuàng)建的)
- 文章表(文章的信息)
- 友鏈表(友鏈信息)
- 自定義表(系統(tǒng)信息,某個(gè)關(guān)鍵的字,或者一些主字段)key:value
- 說說表(發(fā)表心情…? id… content… create_time)
 
- 標(biāo)識(shí)實(shí)體(把需求落地到每個(gè)字段)
- 標(biāo)識(shí)實(shí)體 之間的關(guān)系 - 寫博客:user -->blog
- 創(chuàng)建分類:user -->category
- 關(guān)注:user -->user
- 友鏈:links
- 評(píng)論:user -user -blog
 
8.2、三大范式
2021年12月24日
18:27
為什么需要數(shù)據(jù)庫范式?
- 信息重復(fù)
- 更新異常
- 插入異常 - 無法正常顯示信息
 
- 刪除 異常 - 丟失有效的信息
 
三大范式
第一范式(1NF)
原子性:保證每一列不可再分
第二范式(2NF)
前提:滿足第一范式
每張表只描述一件事情
第三范式(3NF)
前提:滿足第一范式 和 第二范式
第三范式需要確保數(shù)據(jù)庫表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。
(規(guī)范數(shù)據(jù)庫的設(shè)計(jì))
規(guī)范性 和 性能的問題
關(guān)聯(lián)查詢的表不得超過三張表
- 考慮商業(yè)化的需求的目標(biāo),(成本,用戶體驗(yàn)!)s數(shù)據(jù)庫的性能更加重要
- 在規(guī)范性能的問題的時(shí)候,需要適當(dāng)?shù)目紤]一下 規(guī)范性!
- 故意給某些表增加一些冗余的字段。(從多表查詢中變?yōu)閱伪聿樵?#xff09;
- 故意增加一些計(jì)算列(從大數(shù)據(jù)量降低為小數(shù)據(jù)量的查詢:索引)
總結(jié)
 
                            
                        - 上一篇: 如何设计一个项目的数据库
- 下一篇: 爱奇艺埋点投递治理实践
