程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 機房重構--數據庫設計(二)

機房重構--數據庫設計(二)

編輯:DB2教程

機房重構--數據庫設計(二)


在完成了機房收費系統數據庫需求分析、ER圖、關系模型的階段之後,就該根據關系模型來設計數據庫了,下面是我對這個階段的一個總結。

這次的關系模型有用戶、學生、卡、基本數據、電腦、賬單、工作記錄、充值、退卡、上機共10個,要由這10個關系模型來設計數據庫表,其中對於電腦(電腦名 系統時間 系統日期)這個關系,沒有必要單獨拿出來設計,其他的幾個都需要轉換成數據表,在確定了哪些關系模型需要轉換為關系表之後,就需要分析的數據表字段的明確以及數據表三范式的規范的確定。

先來重溫下數據庫設計三大范式:

(一)數據表中的每個字段不能有多個值或者不能有重復的屬性,符合原子性。

(二)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性。

(三)在1NF基礎上,任何非主屬性不依賴於其它非主屬性[在2NF基礎上消除傳遞依賴]。

分析一張舊的數據表:

\

 

像這張表OnLine_Info,主鍵CardNo,其他字段有:cardtype,studentname,Department,sex等,而這些信息完全是和Student_Info中的內容重復,So,完全可以通過主外鍵將兩張表關聯起來,這樣這些重復的字段就不必要在不同的表裡重復出現了。

再看一張表Studetn_Info:

\

 

當時的表名是Student_Info,可認真分析之後發現這完全就是學生信息和卡的信息的疊加,道理上一卡對應一個人,但是當修改或刪除卡信息時,學生信息也有被修改的風險,同時由於這張表包含了太多的信息,導致查詢學生信息需要這張表、查詢卡信息需要這張表、結賬算錢需要這張表,查看是否結賬等也需要這張表,嚴重違背面向對象思想中“單一職責”原則,所以這次的設計必須改掉這些不足。

 

對數據類型的研究

昨天在把關系模型對應到數據表的時候由於各種數據對應的類型需要分別考慮,比如說字符型、數值型、時間日期型、金錢型……,用到最多的還是字符型,那就對char(n)、nchar(n)、varchar(n)和nvarchar(n)進行一個簡單的總結。

\

 

這是在查閱資料後在OneNote裡做的圖,總而言之,如果是Unicode數據類型(即含有中文或者中文英文結合)則選擇varchar或者nvarchar,如果需要變長,則選擇nchar或者nvarchar.比如當我們在登錄窗體的時候用戶名用char(10)定義之後,需要在代碼中用Trim(UserID)來傳入數據庫,為了是避免空格,當然這樣要求用戶名中不能含有空格,但是在密碼這個字段中,可能會涉及到空格,這裡就不建議使用nchar,最好使用char(n)。

其次,這次的所有涉及到金錢類型的字段全部用到了money類型來表示,只要在代碼中用decimal(m,n)的數據類型來對應就OK了。

數據表涉及展示

數據庫名稱:Restructurecharge

一共9張表:

(1)User_Info

\

 

(2)Card_Info

\

 

(3)Student_Info

\

 

(4)Recharge_Info

\

 

(5)Online_Info

\

 

(6)LogoffCard_Info

\

 

(7)Worklog_Info

\

 

(8)BasicDate_Info

\

 

(9)Bill_Info

\

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved