翻轉電子書系列:資料庫系統概論(含邏輯設計)  

翻轉工作室:粘添壽

 

第十二章 專題研討 - 課務管理系統

12-1 系統需求

我們建構一套『教務開課/選課系統』,來探討建構一套資料庫系統的過程如何,也依照前面幾章所介紹方法分別實現之。

12-1-1 情境與系統需求

教務處希望建立一套可供老師開課,與讓學生選課系統。期望此系統可讓各系老師開課,學生也可依照自己的興趣到各系選課。真實情境如下:

12-1-2 資料收集

我們收集到的資料如下:

12-1-3 系統驗證範例

我們希望建構成功的系統可讓老師開課、學生選課。為了驗證系統功能,吾人選定下列查詢題目,如果能成功查詢的話,初步驗證系統符合需求:(輸入資料時,也依照題目需求輸入)

12-2 資料庫邏輯設計

我們利用由外往內拆解方法,來分析此系統的邏輯架構,分別說明如下:

12-2-1 第一層分析:系統基本需求

實際狀況:

12-1 系統基本需求

 

12-2-2 第二層分析:班別與系所組織

實際狀況:

12-2 班別與系所組織

12-2 是學生與班級之間的E-R 圖,每一位學生僅隸屬於某一個班級,但該班級可擁有多位學生,因此他們之間是多對一的關係。兩者之間連結係利用班級代碼,在學生資料中加入一個外來鍵『班級代碼』,連結到班級資料的主鍵『班級代碼』。教師與系所關係也是如此,我們在系所資料加入『系別代碼』當主鍵,也在老師資料內加入外來鍵『系別代碼』,以標示老師是隸屬哪一個系所的。

12-2-3 第三層分析:課程概況

實際狀況:

12-3課程概況

我們增加了『課程』實體來顯示各系所規劃的課程,它與系統之間的關係是多個系所都可以繳交所欲開設的課程,且每一系所可繳交多門課,同一門課也可以由多個系所開設,因此,課程與系所之間是多對多的關係。為了辨識各個課程,我們增加了『課程代碼』做為主鍵,再增加『系別代碼』為外來鍵,以聯繫它是屬於哪系所開設。

12-2-4 第四層分析:學期開課概況

實際狀況:

12-4 開課狀況

開設課程關係到老師、課程與班別,而且之間都是多對多的關係,我們還是另外增加『開課代碼』做為該實體的主鍵,在操作方面會比較容易。

12-2-5 第五層分析:學生選課概況

實際狀況:

12-5 選課狀況

學生可由開課表內選擇課程,每一課程也可讓多位學生選讀,因此它們之間是多對多的關係,我們只要增加『學號』與『開課代碼』等兩個外來鍵,當作複合主鍵,再加入一個『成績』的欄位即可。

 

12-2-6 第六層分析:加入所需屬性

分析到這裡幾乎完成了,接下來依照系統需求(驗證題目)加入個實體或關係的屬性,結果如下:(請參考附件)

12-6 課務管理系統的 E-R 關係圖

 

12-3 E-R 圖轉換成資料表

完成系統分析並繪製 E-R 關係圖完成之後,接下來必須將各個實體或關係轉換為資料表,在轉換過程中也順便分析它是否滿足 3NF 正規化。

12-3-1 學生資料表 - students

學生實體的 E-R 圖如下:

取名為『學生資料表』(students),並選擇學號為主鍵。各個欄位名稱與資料型態如下所示:

學生資料表

學號

姓名

班級代碼

性別

地址

電話

電子郵件

Student_ID

name

Class_ID

sex

address

tel

mailbox

CHAR(10)

CHAR(10)

CHAR(10)

CHAR(5)

CHAR(50)

CHAR(10)

CHAR(20)

正規化分析:

 

12-3-2 教師資料表 - teachers

教師實體的 E-R 圖如下:

取名為『教師資料表』(teachers),並選擇教師代碼為主鍵。各個欄位名稱與資料型態如下所示:

學生資料表

教師代碼

姓名

系別代碼

性別

職務

地址

電話

電子郵件

Teacher_ID

name

Dep_ID

sex

title

address

Tel

mailbox

CHAR(10)

CHAR(10)

CHAR(10)

CHAR(5)

CHAR(20)

CHAR(50)

CHAR(10)

CHAR(20)

 

正規化分析:

 

12-3-3 系所資料表 - department

系所實體的 E-R 圖如下:

取名為『系別資料表』(department),並選擇系所代碼為主鍵。各個欄位名稱與資料型態如下所示:

系別資料表

系所代碼

系別名稱

Dep_ID

Dep_name

CHAR(10)

CHAR(10)

正規化分析:

 

12-3-4 班級資料表 - classes

班級實體的 E-R 圖如下:

取名為『班級資料表』(classes),並選擇『班級代碼』(class_ID)為主鍵。各個欄位名稱與資料型態如下所示:

班級資料表

班級代碼

班級名稱

系別代碼

入學年度

Class_ID

Class_name

Dep_ID

year

CHAR(10)

CHAR(10)

CHAR(10)

int

正規化分析:

 

12-3-5 課程資料表all_course

課程實體的 E-R 圖如下:

取名為『課程資料表』(all_course),並選擇『課程代碼』(course_ID)為主鍵。各個欄位名稱與資料型態如下所示:

課程資料表

課程代碼

課程名稱

系別代碼

必選修

學分數

Course_ID

Course_name

Dep_ID

required

credit

CHAR(10)

CHAR(10)

CHAR(10)

CHAR(5)

int

正規化分析:

 

12-3-6 開課資料表open_course

開課實體的 E-R 圖如下:

取名為『開課總表』(open_course),並選擇『開課代碼』(open_course_ID)為主鍵。各個欄位名稱與資料型態如下所示:

開課總表

開課代碼

課程代碼

班級代碼

教師代碼

Open_course_ID

Course_ID

Class_ID

Teacher_ID

CHAR(10)

CHAR(10)

CHAR(10)

CHAR(10)

正規化分析:

 

12-3-7 選課資料表select_course

選課實體的 E-R 圖如下:

取名為『選課總表』(select_course),並選擇『學號』(student_ID)與『開課代碼』(open_course_ID)為複合主鍵。各個欄位名稱與資料型態如下所示:

選課總表

學號

開課代碼

分數

Student_ID

Open_course_ID

final

CHAR(10)

CHAR(10)

int

正規化分析:

12-3-8 所有表格關聯圖

完成各資料表設計之後,接下來繪出所有資料表之間的關聯圖,如下:

 

12-4 實體建置

完成各個資料表設計之後,接下來必須實體建置起來,目前我們係利用 AppServ套件實習,就將它建立在 AppServ上。

12-4-1 建立新資料庫

進入 AppServ 後建立資料庫,如下:

12-4-2建立新表格

(A) 建立表格:

(B) 建立表格欄位屬性: