數據庫設計

前面的話

  本文將詳細介紹數據庫設計的相關知識數據庫

 

設計範式

  數據庫設計共有三大範式:數據庫設計

  第一範式:無重複的列優化

  第二範式:屬性徹底依賴於主鍵設計

  第三範式:屬性不能依賴於主屬性3d

  下面將分別對這三個範式進行詳細介紹blog

 

第一範式

  數據庫表中的每一列都是不可分割的基本數據項,同一列中不能有多個值。具體而言,有如下兩條要求密碼

  一、每一列屬性都是不可再分的,確保每一列的原子性im

  二、兩列的屬性相近或類似或同樣,儘可能合併屬性同樣的列, 確保不產生冗餘數據數據

  以考勤表設計爲例,考勤表用來記錄天天學生的考勤狀況db

  最簡單的狀況是,每一天都創建一張表。字段是每一個學生的姓名,列值表示是否簽到。這樣,能夠很方便的存儲當天的考勤狀況。可是,這也致使了天天都須要在數據庫裏新建一張考勤表。並且,這種作法違反了第一範式,這張考勤表的字段的屬性含義都是同樣的,都是記錄學員的考勤狀況。所以,這些字段是須要合併的

  更優化的設計是,第一字段是學生姓名,第二字段是0101表示`1月1日,第三字段是0102表示1月2日,以此類推。這種作法,再也不須要設計那麼多表,將學生的姓名列合併成了一個姓名列。可是,一樣它沒有遵循第一範式,1年365天, 代碼除了學生姓名列外,還須要設置365個字段。並且,這些列的含義都是同樣的,記錄當天的考勤。所以,這些字段也是須要合併的

  下面是優化的狀況,把全部的日期合併成一個日期字段,新增一個考勤狀態字段,以下所示,徹底遵循了第一範式,沒有重複的列,且每一列都是可拆分的。

  總而言之,用第一範式設計數據庫時,就是分解數據,並將屬性類似的列合併

 

第二範式

  第二範式須要遵循如下要求:

  一、一個表表必須有一個主鍵

  二、沒有包含在主鍵中的列必須徹底依賴於主鍵,而不能只 依賴於主鍵的一部分

  如下面購物車表爲例,用戶ID和商品ID構成了商品的主鍵,數量列依賴於用戶購買商品的數量,單價和商品名稱只依賴於商品ID。所以,這張表不知足第二範式

  優化後,修改以下

 

第三範式

  非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。第三範式,相較於第二範式而言,強調的是直接依賴,而不能是傳遞依賴

  關於傳遞依賴,如下面的中獎信息表爲例,中獎金額依賴於中獎等級,而中將等級及依賴於用戶ID,這就是傳遞依賴

  要遵循第三範式,就要消除傳遞依賴

  

新聞系統

  下面嘗試利用三個範式,來設計新聞系統數據庫。包括如下要點:

  一、用戶名、密碼、是不是管理員

  二、新聞標題、新聞內容、做者、新聞時間、是否上線

  三、評論人、評論內容、評論時間、評論源

  分別對應用戶表、新聞表和評論表

  通常來講,用戶名長度不超過20個字符,密碼長度不超過20個字符,新聞標題長度不超過30個字符,新聞內容長度不超過5000個字符,評論內容長度不超過300個字符

  用戶表詳細以下

  新聞表詳細以下

  評論表詳細以下

 

最後

  在設計數據庫時,只需知足以上三個範式,就能夠設計既合理又知足需求的數據庫

相關文章
相關標籤/搜索