9、规范数据库设计
9.1 為什么需要設(shè)計(jì)
當(dāng)數(shù)據(jù)庫(kù)比較復(fù)雜的時(shí)候,我們就需要設(shè)計(jì)了
糟糕的數(shù)據(jù)庫(kù)設(shè)計(jì):
-
數(shù)據(jù)冗余,浪費(fèi)空間
-
數(shù)據(jù)庫(kù)插入和刪除都會(huì)麻煩,異常【屏蔽使用物理外鍵】
-
程序的性能差
良好的數(shù)據(jù)庫(kù)設(shè)計(jì):
-
節(jié)省內(nèi)存空間
-
保證數(shù)據(jù)庫(kù)的完整性
-
方便我們開發(fā)系統(tǒng)
軟件開發(fā)中,關(guān)于數(shù)據(jù)庫(kù)的設(shè)計(jì):
- 分析需求:分析業(yè)務(wù)和需要處理的數(shù)據(jù)庫(kù)的需求
- 概要設(shè)計(jì):設(shè)計(jì)關(guān)系圖 E-R圖
設(shè)計(jì)數(shù)據(jù)庫(kù)的步驟(個(gè)人博客)
-
收集信息,分析需求
- 用戶表(用戶登錄注銷,用戶的個(gè)人信息,寫博客,創(chuàng)建分類)
- 分類表(文章分類,誰(shuí)創(chuàng)建的)
- 文章表(文章的信息)
- 友鏈表(友鏈信息)
- 自定義表(系統(tǒng)信息,某個(gè)關(guān)鍵的字,或者某些主字段)
- 說說表(發(fā)表心情…id ,content ,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
9.2 三大范式
為什么需要數(shù)據(jù)規(guī)范化?
- 信息重復(fù)
- 更新異常
- 插入異常
- 刪除異常
- 無法正常顯示異常
- 刪除異常
- 丟失有效的信息
三大范式:https://www.cnblogs.com/wsg25/p/9615100.html
-
第一范式(1NF)
原子性:保證每一列不可再分
-
第二范式(2NF)
前提:滿足第一范式
每張表只描述一件事情
-
第三范式(3NF)
前提:滿足第一范式和第二范式
第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。
9.3 規(guī)范數(shù)據(jù)庫(kù)的設(shè)計(jì)
規(guī)范性 和 性能的問題
關(guān)聯(lián)查詢的表,不得超過三張表
- 考慮商業(yè)化的需求和目標(biāo)(成本和用戶體驗(yàn)) 數(shù)據(jù)庫(kù)的性能更加重要
- 再規(guī)范性能的問題的時(shí)候,需要適當(dāng)?shù)目紤]一下,規(guī)范性
- 故意給某些表加一些冗余的字段(從多表,變成單表)
- 故意增加一些計(jì)算列(從大數(shù)據(jù)量降低為小數(shù)據(jù)量的查詢:索引)
總結(jié)
- 上一篇: Kernel space lock co
- 下一篇: Mysql保存emoji表情