個人重構版機房收費系統中需要自己重新設計資料庫,那麼如何設計資料庫呢?這也是咱們自考中一門重要的課程《資料庫原理》,對於考過這科的同學想必已經從中受益,直接就可以學以致用。我是今年10月份考這本書,所以就先實踐一把。
原先看過的耿建玲老師的視頻,裡面重點講解的是資料庫內部的具體操作,沒有怎麼涉及到資料庫設計中不可或缺的一個步驟即從概念性模型到邏輯模型的轉換。進入正題:
背景:資料系統生存期
我們把資料庫應用系統從開始規劃、設計、實現、維護到最後被新的系統取代而停止使用的整個期間,稱為資料庫系統生存期。這個生存期一般可以劃分成七個階段:規劃、需求分析、概念設計、邏輯設計、實體設計、實現、運行維護。今天的重點概念設計到邏輯設計的轉換。
關於E-R圖百科中有詳細介紹
以機房收費系統為基礎,畫出全域概念性模型
把E-R圖轉換成關聯式模式的步驟:
第一步:把三個實體類型轉換成三個模式:
student(studentNo,studentName,sex,academy,major,grade,class)
card(cardID,money)
user(userID,password,level)
第二步:對於1:1關係“使用”,可以在“card”模式中加入學號(學號為外鍵)。這樣第一步得到的三個模式如下:
student(studentNo,studentName,sex,academy,major,grade,class)
card(cardID,money,studntNo)
第三步:對於M:N的聯絡,形成新的關係
Registe(cardID,studentNO,userID,note,Date,Time)
CancelCard(cardID,studentNo,cancelCash,date,time,userID,status)
Charge(cardID,studentNo,addCash,date,time,userID)
Online(cardID,studentNo,OnlineDate,OnlineTime,computer)
Outline(cardID,studentNo,OutelineDate,OutlineTime,concumeTime,concume,)
最後形成的8個關係模式:
T_student(studentNo,studentName,sex,academy,major,grade,class)
T_card(cardID,money,studntNo)
T_user(userID,password,level)
T_Registe(cardID,studentNO,userID,note,Date,Time)
T_CancelCard(cardID,studentNo,cancelCash,date,time,userID)
T_Charge(cardID,studentNo,addCash,date,time,userID)
T_Online(cardID,studentNo,OnlineDate,OnlineTime,computer)
T_Outline(cardID,studentNo,OutelineDate,OutlineTime,concumeTime,concume,)
下面個關聯式模式是根據系統功能設計的:
T_Worklog(userID,OnlineDate,OnlineTime,OutelineDate,OutlineTime)
T_Basicdate(Rate,tmpRate,unitTime,leastTime,PrepareTime,limitCash,head,date,time)(關於報表的表有待更新)
這個過程讓我明白的是資料庫中的表不是憑空想象的,同時也不是根據系統功能需要什麼我就設計出什麼欄位,而是現根據資料庫設計的規劃階段和需求分析階段對使用者需求以及可行性分析得出實體,聯絡,屬性之後設計出表,應用到系統功能時再根據功能設計出視圖。根據上面的步驟設計出來的表,減少耦合的同時也符合三範式(第一範式:不可再分,第二範式:防止局部依賴,第三範式:消除傳遞依賴)
PS:初學者,如有錯誤往指正!