慕課網-數據庫設計那些事

慕課網視頻課程地址https://www.imooc.com/learn/117數據庫

第一章-需求分析

數據庫設計的概念

數據庫的設計,就是根據業務系統的具體需求,結合咱們所選用的DBMS,爲這個業務系統構造出最有的數據存儲模型。並創建好數據庫中的表結構及表與表之間的關聯關係的過程。使之能有效的對應系統中的數據進行存儲,並能夠高效的對已經存儲的數據進行訪問。編程

數據庫設計的步驟

需求分析----->邏輯設計----->物理設計----->維護優化併發

數據庫需求分析的做用點:數據庫設計

  1. 數據是什麼
  2. 數據有哪些屬性
  3. 數據和屬性各自的特色有哪些

使用ER圖對數據庫進行邏輯建模編程語言

數據管理系統的選擇,根據數據庫自身的特色把邏輯設計轉換爲物理設計函數

後期維護高併發

  1. 新的需求進行建表,建新表以前也要作好前三步,防止後期出現的問題
  2. 索引優化
  3. 大表拆分

需求分析

爲何要進行需求分析?工具

爲了設計最優化的數據庫,便於後期的擴展和維護,數據愈來愈多,愈來愈大會浪費空間,愈來愈雜亂,是很難處理和維護的優化

  1. 瞭解系統中索要存儲的數據
  2. 瞭解數據的存儲特色,好比有的數據有時效性,有的沒有,有時效性的能夠採起按期清理
  3. 瞭解數據的生命週期,

要搞清楚的一些問題spa

  1. 實體及實體之間的關係(1對1,1對多,多對多)
  2. 實體所包含的屬性有什麼?屬性有不少,哪些屬性是能夠標識出這個實體的
  3. 那些屬性或屬性的組合能夠惟一標識一個實體
  4. 存儲上有什麼特性,增加量是什麼樣?

實例分析

 

第二章-邏輯設計

 

邏輯設計要作什麼?ER圖就是數據庫模型關係的展現圖

  1. 將需求轉化爲數據庫的邏輯模型
  2. 經過ER圖的形式對邏輯模型進行展現
  3. 同所選用的具體的DBMS無關

名詞解釋

 

注:有的屬性下面有下劃線,就表示主鍵

 

設計範式概要

什麼是數據庫設計範式?

也就是提供了一種準則,幫助咱們創建簡介高效且結構清晰的數據庫設計,避免數據庫插入,跟新,刪除,修改中的異常,而且爲最大限度的避免數據庫的冗餘。

常見的數據庫範式包括:第一範式、第二範式、第三範式及BC範式

固然還有第四及第五範式,不過這裏咱們會把重點放到前三個範式上,

這也是目前咱們大多數數據庫設計索要遵循的範式

 

數據庫異常以及數據冗餘

第一範式

二維表就是由行和列組成的表,圖中的第二種表通常是沒法建立出來的也是不符合第一範式的,因此,通常狀況下,咱們建立的表都是符合第一範式的

第二範式

供應商電話和組合關鍵字存在着部分函數依賴,因此上邊的表時不符合第二範式

存在的問題:

  1. 插入異常---若是飲料一廠不提供任何信息,咱們是找不到飲料一廠的其餘信息的,
  2. 刪除異常---若是把可樂刪除掉,同時,電話和飲料一廠也消失了
  3. 更新異常---若是有多種商品,那麼,跟新一個信息,同時要跟新不少條數據
  4. 數據冗餘---和上面同樣,數據冗餘了

如何解決

第三範式

因此這是不符合第三範式要求的

修改以下

這樣,就不會有傳遞性的依賴關係了

BC範式

拆分以下

第三章-物理設計

物理設計要作什麼?

  1. 選擇合適的數據庫管理系統(應用特色和成本)
  2. 定義數據庫、表以及字段的命名規範(不一樣數據庫對命名的規範是有差別的)
  3. 根據所選的DBMS系統選擇合適的字段類型
  4. 反範式化設計(爲了效率的提高而作的,多是數據冗餘)

如何選擇數據庫系統

考慮功能上的因素

操做系統上的因素

編程語言

應用場景

MySQL經常使用的存儲引擎

  • MyISAM :5.5以前的版本,不支持事務,可是存儲的效率相對來講比較高,高併發的可能會致使鎖堵塞,因此,讀寫操做頻繁不要使用
  • MRG_MYISAM:基於MyISAM將多個結構相同的MyISAM表合併成一個表,
  • Innodb:5.5以後,主要的存儲引擎。
  • Archive:須要的容量相對小,
  • Ndb cluster:MySQL集羣下使用

表及字段的命令規則

爲了方便,打眼一看就知道是什麼,而不用去查詢文檔字典手冊。浪費時間和精力

錯誤的

正確的

數據庫字段類型選擇原則

具體字段類型的選取

只是存儲,不多用來查詢,就使用int類型吧,由於不用轉換了(好比生日不多使用,訂單的時間類型常用,就可使用datetime)

粒度能夠根據須要來選擇,好比可能只須要年,只須要年月

 

 

使用觸發器後,若是業務變動會變的複雜和麻煩,影響業務邏輯

 

 反範式化設計

 

咱們的數據庫在使用中讀寫比例大概在3:1。讀是遠遠高於寫的。雖然在寫的時候增長了冗餘,可是在讀的時候咱們大大的提升了效率

第四章-維護優化

一、要記錄清楚數據庫的每個列是什麼意思

二、索引可能會應爲數據量的增大和業務的改變而變得不適用

三、致使查詢緩慢等問題

如何維護數據字典

 

如何維護索引

 

表結構的維護

使用自定義函數致使列中的索引失效

數據庫中適合的操做

不要使用全文索引,可使用搜素引擎工具

數據庫表的垂直拆分和水平拆分

相關文章
相關標籤/搜索