資料庫結構優化的目的是為了
減少資料冗餘
盡量避免資料維護**現更新,插入和刪除異常.
節約資料儲存空間
提高查詢效率
資料庫設計正規化
第一正規化
資料庫表中的所有欄位都自由單一屬性
單一屬性的列是由基本的資料型別鎖構成的
設計出來的表都是簡單的二維表
綜上: 幾乎只要能在當今資料庫中建立起來的表都是第一正規化,但是很可能有很大的優化空間
我們有乙個學生選課表,
太過於冗餘,明顯可以拆成:student表+stu_course表+course表,但是這符合第一正規化.
第二正規化
要求乙個表中只具有乙個業務主鍵,也就是說符合第二正規化的表中不能存在非主鍵列對只對部分主鍵的依賴關係。
簡單說: 就是上述學生選課表中,明顯出現了可以拆分為以stu_id為主鍵的部分和以course_id為主鍵的部分,stu_id和course_id組成了復合主鍵,但是其他屬性中有很大一部分只依賴其中乙個就可以確定.
所以進行改進,將其改為第二正規化.
學生表
課程表
學生選課關係表
這樣滿足第一正規化的表就唄拆分成了滿足第二正規化的表
第三正規化
指每乙個非主屬性幾步部分依賴於也不傳遞依賴於業務主鍵,也就是說在第二正規化的基礎上消除了非主屬性對主鍵的傳遞依賴
對於上一次的表,我們可以明顯的看出沒有資料依賴已經滿足了第三正規化,但是為了講解,如果我們的學生表有系的資訊(系名,系主任,系樓),那麼其也滿足第二正規化,但是資料冗餘,我們將系拆分出來作為乙個表,學生中只包含乙個外來鍵(系名)即可.
反正規化化設計
反正規化化設計就是在正規化化設計的基礎上,因為在各式各樣的需求上,我們需要冗餘資料來加快查詢,或者不得不冗餘資料,否則沒辦法完成需求.
總結正規化化和反正規化化
正規化化:
優點可以盡量的減少資料冗餘,資料表更新快體積小
正規化化的更新操作比反正規化化更快(因為每乙個表的大小都更小了)
缺點:降低查詢效能,因為越高的正規化往往意味著更多的級聯,進行更多的查詢。
更難進行索引優化(因為表多了,所以索引更難建立了)
反正規化化
優點可以減少表的級聯
可以更好的進行索引優化
缺點存在資料冗餘及資料維護異常
對資料的修改需要更多的成本(cpu,記憶體等硬體裝置和人力資源)
資料庫結構優化
一 資料庫結構優化的目的 1.減少資料冗餘。2.勁量避免資料維護中出現更新,插入和刪除異常 插入異常 如果表中的某個實體隨著另乙個實體而存在 單獨插入某個字段失敗,因為有的字段不能為空 更新異常 如果更改表中的某個實體的單獨屬性時,需要對多行進行更新。刪除異常 如果刪除表中的某乙個實體則會導致其他實...
資料庫結構優化
資料庫結構優化 優化表結構 1 盡量將表字段定義為not null約束,因為mysql中含空值得列很難查詢優化 2 對於只包含特定型別的字段,可以使用enum,set等 3 數值型字段的比較比字串比較效率高很多,字段型別盡量使用最小,最簡單型別 4 盡量使用tinyint,smallint,medi...
資料庫的優化,結構 優化
避免 頁面出現訪問錯誤 1.由於資料庫練級timeout產生頁面5xx錯誤 2.由於慢查詢造成頁面無法載入 6.由於阻塞造成資料無法提交增加資料庫的穩定性 1.很多資料庫問題都是由於低效的查詢引起的優化使用者的體驗 1.流暢頁面的訪問速度 2.良好的 功能體驗mysql可以很好的支援大資料量的訪問,...