1. 程式人生 > >資料庫課程設計(實驗報告管理系統)

資料庫課程設計(實驗報告管理系統)

資料庫系統原理

課程設計報告

設計題目  實驗報告管理系統資料庫設計  

專業班級     信管1402班              

學    號     311409030202             

姓    名     杜   新   新            

成    績

評    語:

二零一六年十二月

1系統開發概述

1.1 系統開發背景

隨著計算機技術的發展和網際網路技術的廣泛應用,教育資訊化成為21世紀教育改革和發展的主旋律之一。[2]實踐教學環節中一個重要組成部分是實驗教學,實驗報告的有效管理是能夠順利開展實驗教學的保證。在資訊化高速發展的今天,傳統的實驗報告管理形式已經跟不上新型教學模式的發展,在深入分析傳統紙質實驗報告諸多弊端的基礎上,提出並開發了基於高校現有的資訊化條件開發實驗報告管理系統的解決方案,從而方便了管理,提高了工作效率。

1.2 系統功能需求分析

在該系統中,不同角色的使用者擁有不同的許可權。總體可以分為兩大類使用者,一類為學生使用者,實驗前可以檢視實驗指導書、實驗完成後可以下載實驗報告並進行相應的填寫,完成後即可提交供老師批閱;一類為教師使用者,在上課前需要上傳實驗指導書和實驗報告表,在學生做完實驗之後,教師需要根據實驗報告提交情況核對缺勤情況以及缺勤人員名單,在課下教師還能夠通過學生提交的實驗報告來了解學生實驗情況,並完成實驗報告的批閱。系統的功能結構圖如圖1-1所示:


圖1-1功能結構圖

1.3 系統性能需求分析

為了保證系統能夠長期、安全、穩定、可靠的執行,實驗報告管理系統應該滿足以下效能需求:

⑴統的安全性:

①系統應設定訪問使用者的標識以鑑別是否是合法的使用者,並要求合法使用者設定其密碼,保證使用者身份不被盜用;

②系統應對不同的資料設定不同的訪問級別,限制訪問使用者可以查詢和處理資料;

③系統應對不同使用者設定不同的許可權,區分不同的使用者,如區分普通使用者(學生),管理員(教師)。

⑵系統的完整性:

①各種資訊記錄的完整性,資訊記錄不能為空;

②各種資料間相互作用的聯絡的正確性;

③相同的資料在不同記錄中的一致性[3]

⑶系統的可操作性:

本網站可以在火狐、IE、360等瀏覽器上進行訪問,不用安裝任何軟體,只需要一個瀏覽器即可進行使用,有很好的中文介面,操作簡便。

1.4 系統資料流程分析

學生使用者登入網站後,可以填寫相應的註冊資訊,提交後系統會將該使用者資訊插入到學生資訊表。教師使用者登入網站後,可先填寫註冊資訊,提交後將資訊插入教師資訊表,教師在實驗課前,可以登入該系統來建立實驗專案並上傳實驗指導書和實驗報告表。在實驗課期間,選修該門課程的學生可以進入該系統選擇實驗專案,根據實驗指導書完成本次試驗並填寫實驗報告,將完成的實驗報告表進行提交。在課後教師可以批閱提交的實驗報告,來核對學生本次試驗情況並對學生提出相應的意見或建議。系統的資料流程圖如圖1-2所示:


圖1-2 系統資料流程圖

2 資料庫概念結構設計

2.1識別實體及效應的屬性

通過以上分析,首先可以確定實驗報告管理系統有五個主要實體,分別為教師、學生、課程、實驗專案和實驗報告表。這五個實體及其主要屬性說明如下,其中實體的關鍵字用下劃線標識:

學生擁有屬性:學號,姓名,專業,班級。

教師擁有屬性:教師編號,姓名,所在部門。

課程擁有屬性:課程號,課程名,教師編號,實驗指導書。

實驗專案擁有屬性:實驗專案號,課程名,題目,性質,型別。

實驗報告表擁有屬性:實驗報告表號學號,實驗日期,學期,課程名,實驗名,實驗目的和要求,試驗過程,實驗分析,評語,指導教師姓名,批閱日期。

2.2確定實體之間的聯絡

其次,可以確定實體之間有如下幾個聯絡:學生和課程之間有聯絡選修,學生與實驗報告之間有聯絡填寫,教師和課程之間有聯絡講授,教師和實驗報告之間有聯絡批閱,課程與實驗專案之間有聯絡包含,實驗專案與實驗報告之間有聯絡包含。在這六個聯絡中,“包含”、“填寫”和“批閱”比較簡單,不再擁有其他屬性,而選修還擁有屬性成績,講授還擁有屬性時間和地點,詳細分析如下:

包含(課程號實驗專案號)該聯絡的類別為1:n

包含(實驗專案號實驗報告表號)該聯絡的類別為1:1

填寫(學號實驗報告表號)該聯絡的類別為1:n

批閱(教師號實驗報告表號)該聯絡的類別為1:n

選修(學號課程號,成績)該聯絡的類別為m:n

講授(教師編號課程號,時間,地點)該聯絡的類別為m:n

2.3區域性E-R圖


按照上述的分析,畫出區域性E-R圖如下:

圖2-1教師講授課程E-R圖


圖2-2學生選修課程E-R圖

圖2-3學生填寫實驗報告E-R圖


圖2-4教師批閱實驗報告E-R圖


圖2-5課程包含實驗專案E-R圖


圖2-6實驗專案包含實驗報告E-R圖

2.4綜合成全域性E-R圖

綜合各區域性概念結構就可以得到反映使用者需求的全域性概念結構:


圖2-7全域性E-R圖

3 資料庫邏輯結構設計

3.1實體與實體屬性的轉換

一個實體型轉換為一個關係模式,實體的屬性就是關係的屬性,實體的關鍵字就是關係的關鍵字,其中關鍵字用下劃線標識:

學生(學號,姓名,性別,專業,班級)

教師(教師編號,姓名,所在部門)

課程(課程號,課程名,教師編號,實驗指導書)

實驗專案(實驗專案號,課程名,題目,性質,型別)

實驗報告表(實驗報告表號學號,實驗日期,學期,課程名,實驗名,實驗目的和要求,試驗過程,實驗分析,評語,指導教師姓名,批閱日期)

3.2實體間聯絡的轉換

3.2.1 一對一聯絡的轉換

一個1:1的聯絡可以轉換為一個獨立的關係模式,也可以與任意一端對應的關係模式合併[1],在這裡我們採用的是後者,將實驗專案與實驗報告之間的聯絡與“實驗專案”關係模式合併:

實驗專案(實驗專案號,課程名,題目,性質,型別,實驗報告表號)

3.2.2 一對多聯絡的轉換

一個1:n的聯絡可以轉換為一個獨立的關係模式,也可以與n端對應的關係模式合併[1],而我們採用的是與n端對應的關係模式合併。

①實驗專案與課程之間的聯絡與“實驗專案”關係模式合併:

實驗專案(實驗專案號,課程名,題目,性質,型別,實驗報告表號,

課程號)

②將學生與實驗報告之間的聯絡與“實驗報告”關係模式合併:

實驗報告表(實驗報告表號學號,學年,學期,上機時間,課程名稱,實驗題目,實驗目的和要求,試驗過程,實驗結果,實驗分析,評語,指導教師姓名,批閱日期)

③將教師與實驗報告之間的聯絡與“實驗報告”關係模式合併:

實驗報告表(實驗報告表號學號,學年,學期,上機時間,課程名稱,實驗題目,實驗目的和要求,試驗過程,實驗結果,實驗分析,評語,指導教師姓名,批閱日期,教師編號)

3.2.3 多對多聯絡的轉換

一個m:n的聯絡必須轉換成一個獨立的關係模式,與該聯絡相連的各實體的鍵以及聯絡本身的屬性均轉換為關係模式的屬性,而關係模式的鍵為實體鍵的組合。[1]

①將教師與課程之間的聯絡講授轉換為一個獨立的關係模式:

講授(教師編號課程號,時間,地點)

②將學生與課程之間的聯絡選修轉換為一個獨立的關係模式:

選修(學號課程號,成績)

3.3關係分正規化分析

通過前面的分析,我們最終得到的關係模式有:

學生(學號,姓名,性別,專業,班級)

教師(教師編號,姓名,所在部門)

課程(課程號,課程名,教師編號,實驗指導書)

實驗專案(實驗專案號,課程名,題目,性質,型別,實驗報告表

          號,課程號)

實驗報告表(實驗報告表號學號,學年,學期,上機時間,課程名稱,實驗題目,實驗目的和要求,試驗過程,實驗結果,實驗分析,評語,指導教師姓名,批閱日期,教師編號)

講授(教師編號課程號,時間,地點)

選修(學號課程號,成績)

由於關係模式都是不可再分的資料項,很顯然為第一正規化;但”實驗報告表”中“指導教師姓名”依賴於“教師編號”,而“教師編號”依賴於主鍵(實驗報告表號和學號的組合),所以“指導教師姓名”傳遞依賴於主鍵(實驗報告表號和學號的組合),所以該關係模式中存在非主屬性對碼的傳遞函式依賴,所以最高滿足第二正規化。考慮各方面的因素,該模式滿足實際應用的需要,故不需要拆分,已經為最優的模式。

4 資料庫物理結構設計

4.1.1 資料庫建立

通過以下語句來建立實驗報告管理系統資料庫:

create database 實驗報告管理系統

on(

   name='laboratoryReport_dat',

   filename='D:\data\laboratoryReport_dat.mdf',

   size=3,

   maxsize=50,

   filegrowth=1%)

log on

(

       name= 'laboratoryReport_log',

       filename='D:\data\laboratoryReport_log.ldf',

       size=1,

       maxsize=12,

       filegrowth=10%)

SQL語句建立成功的截圖如圖4-1所示:


圖4-1實驗報告管理系統資料庫的建立

4.1.2 資料表的建立

①建立一個學生表,程式碼如下:

create table學生表

(

    學號 char(11)notnull,

    姓名nchar(5)notnull,

    性別nchar(1) notnull,

    專業nchar(12)notnull,

    班級 char(10)notnull

)

②建立一個教師表,程式碼如下:

create table 教師表

(

    教師編號 char(11)notnull,

    姓名nchar(5)notnull,

    所在部門nchar(50)notnull

)

③建立一個課程表,程式碼如下:

create table 課程表

(

    課程號 char(11)notnull,

    課程名nchar(10)notnull,

    教師編號 char(11)notnull,

    實驗指導書char(100)not null

)


④使用圖形工具建立實現專案表,其結構截圖如圖4-2所示:

圖4-2實驗專案表


⑤使用圖形工具建立實驗報告表,其結構截圖如圖4-3所示:

圖4-3實驗報告表

⑥使用SQL語句建立講授表,程式碼如下:

create table 講授表

(

    教師編號 char(11)notnull,

    課程號 char(11)notnull,

    時間 datenot null,

    地點nchar(20)notnull

)

⑦建立SQL語句建立選修表,程式碼如下:

create table 選修表

(

    學號 char(11)notnull,

    課程號 char(11)notnull,

    成績smallintnotnull

)

4.2資料完整性設計

4.2.1 主鍵約束的建立

主鍵是唯一地標識一個實體的最小的屬性組合,因此在設計表的時候,應該為每一個表都建立一個主鍵,下面是該系統中表中的主鍵的建立情況:

1)        學生表的主鍵是學號;

2)        教師表的主鍵是教師編號;

3)        課程表的主鍵是課程號

4)        實驗專案表的主鍵是試驗專案號

5)        實驗報告表的主鍵是實驗報告表號與學號的組合

6)        講授表的主鍵是教師編號與課程號的組合

7)        選修表的主鍵是學號與課程號的組合

下面,選擇四個例項來展示實現時的具體操作:

①通過下面的SQL語句為學生表的學號列建立主鍵:

alter table 學生表add  primary key(學號)

②通過下面的SQL語句為教師表的教師編號建立主鍵:

alter table 教師表 add primary key(教師編號)

③通過圖形工具為課程表的課程號列建立主鍵,建立成功的截圖如圖4-4所示:


圖4-4課程表的課程號列建立主鍵圖

④通過圖形工具為實驗報告表建立主鍵,主鍵為實驗報告表號與學號的組合,建立成功的截圖如圖4-5所示:


圖4-5實驗報告表建立主鍵圖

預設值約束是在不人工輸入的情況下,預設插入到資料庫的值,這隻預設值約束方便輸入,有較好的使用者體驗,並且有利於保證資料的完整性,根據實際應用的需要建立了下面四個預設值約束:

1)   學生表的“性別”列預設為“男”

2)   學生表的“專業”列預設為“信管”

3)   實驗專案表的“性質”列預設為“必做”

4)   實驗專案表的“型別”列預設為“設計”

選擇四個例項來展示實現時的具體操作:

①通過下列SQL語句為學生表的“性別”列建立預設值約束,預設值為“男”:

alter table 學生表 add default('男')  for 性別

②通過下列SQL語句為學生表的“專業”列建立預設值約束,預設值為“信管”:

alter table 學生表 add default('信管')for 專業

③通過圖形工具為實驗專案表的性質列建立預設值約束,預設值為“必做”,建立成功的截圖如圖4-6所示:


圖4-6實驗專案表的性質列建立預設值約束圖


④通過下列圖形工具為實驗專案表建立預設值約束,預設值為“設計”,如圖4-7所示:

圖4-7實驗專案表建立預設值約束圖

4.2.3外來鍵約束的建立

外來鍵是該表與另一個表之間聯接的欄位,是為了確保資料的完整性而設定的,在本資料庫系統中,根據應用的需要,一共設定了七個外來鍵,分別為:

1)       課程表中的“教師編號”列參照教師表的“教師編號”列

2)       實驗專案表中的“課程號”列參照於課程表中的“課程號”列

3)       實驗報告表中的“學號”列參照於學生表中的“學號”列

4)       講授表中的“教師編號”列參照於教師表中的“教師編號”列

5)       講授表中的“課程號”列參照於課程表中的“課程號”列

6)       選修表中的“學號”列參照於學生表中的“學號”列

7)       選修表中的“課程號”列參照於課程表中的“課程號”列

這裡,我們選擇兩個例項來展示實現時的具體操作:

①通過下列SQL語句為課程表的教師編號列設定外來鍵約束,參照教師表的教師編號:

alter table 課程表 add foreign key(教師編號) references 教師表(教師編號)


通過圖形工具為實驗專案表的“課程號”列建立外來鍵約束,參照課程表的“課程號”,成功建立的截圖如圖4-8所示:

圖4-8實驗專案表的“課程號”列建立外來鍵約束圖

③因此,在這個系統中表之間的關係圖如圖4-9所示:


圖4-9表之間的關係圖

唯一值約束是保證一個欄位中沒有重複值,根據實際的需要,在這個資料庫系統中我們總共建立了三個唯一值約束,分別為:

1)   實驗專案表的“實驗題目”列

2)   學生表的“姓名”列

3)   教師表的“姓名”列

下面是具體實現的操作:

①為實驗專案表的題目列建立唯一值約束,SQL語句如下:

alter table 實驗專案表 add unique(題目)

②為學生表的性別列建立唯一值約束,SQL語句如下:

alter table 學生表 add unique(姓名)


③使用圖形工具為教師表的姓名列建立唯一值約束,如圖4-10所示:

圖4-10教師表的姓名列建立唯一值約束圖

CHECK約束用來限制使用者輸入某一個列的資料,即在該列中只能輸入指定範圍的資料。根據實際的需要,在該資料庫系統中共建立了三個check約束,分別為:

1)   學生表的“性別”列,其值只能取“男”或“女”;

2)   實驗專案表的“性質”列,其值只能取“必做”或“選做”;

3)   實驗專案表的“型別”列,其值只能取“驗證”或“綜合”或“設計”。

具體的實現如下所示:

①為學生表的性別列建立check約束,其值為“男”或“女”,SQL語句如下:

altertable 學生表 add check(性別='男' or性別='女')

②為實驗專案表的性別列建立check約束,其值為“必做”或“選做”,SQL語句如下所示:

altertable 實驗專案表 add check(性質='必做'or 性質='選做')

③為實驗專案表的型別列建立check約束,其值為驗證或綜合或設計,如圖4-11所示:

圖4-11實驗專案表的型別列建立check約束圖

4.3 索引的建立

由於聚集索引中鍵值的邏輯順序決定了表中相應行的物理順序,因此,每個表中只能有一個聚集索引,在建立主鍵的時候,已經在主鍵列中建立了聚集索引,所以在該資料庫系統中不能夠建立聚集索引;唯一值索引在建立唯一值約束的時候也都建立成功,因此,在這裡我們只需要建立非聚集索引,一共建立了五個非聚集索引,分別為:

a)       學生表的“姓名”列

b)       教師表的“姓名”列

c)       課程表的“課程名”列

d)       實驗報告表的“教師編號”列

e)       選修表的“成績”列

具體的實現如下所示:

①為學生表的姓名列建立非聚集索引,索引名為Sname_index,SQL語句如下所示:


create nonclustered indexSname_index on 學生表(姓名 ASC)

建立成功的截圖如圖4-12所示:

圖4-12學生表索引建立圖

②為教師表的姓名列建立非聚集索引,索引名為Tname_index,SQL語句如下所示:

create nonclustered index Tname_index on 教師表(姓名ASC)


建立成功的截圖如圖4-13所示:

圖4-13教師表索引建立圖

③為課程表的課程名建立非聚集索引,索引名為Cname_index,SQL語句如下所示:

create nonclustered index Cname_index on 課程表(課程名ASC)

建立成功的截圖如圖4-14所示:


圖4-14課程表索引建立圖

④為實驗報告表的教師號建立非聚集索引,索引名為SYBG_Tnum,SQL語句如下所示:

create nonclustered index SYBG_Tnum on 實驗報告表(教師號ASC)

建立成功的截圖如圖4-15所示:


圖4-15實驗專案表索引建立圖

⑤為選修表的成績列建立非聚集索引,索引名字為xxb_grade,SQL語句如下圖所示:     

create nonclustered index xxb_grade on 選修表(成績 ASC)

建立成功的截圖如圖4-16所示:


圖4-16選修表索引建立圖

4.4 檢視的建立

由於該系統的主要功能就是為了學生做實驗服務的,所以通過學號檢索該學生所選的課程,以及該課程所對應的實驗指導書是經常需要進行的操作,因此,我們建立一個“個人課表”檢視,方便使用者查詢;學生在做實驗時,必不可少的操作就是檢視教室佈置的作業,因此通過課程名查詢該課程所對應的實驗題目也是經常進行的操作,為方便使用者操作,為使用者建立“作業”檢視。下面是建立這兩個檢視的具體操作:

①建立一個學生實驗課表的檢視,該檢視的名字為個人課表:

create view 個人課表

as

   select學號,課程名, 實驗指導書

   from課程表,選修表

   where課程表.課程號=選修表.課程號

   withcheck option 


執行該語句,成功建立該檢視,如下圖4-17所示:

圖4-17個人課表檢視

②建立一個學生的實驗任務檢視,該檢視的名字是作業:

create view 作業

as

   select課程名,實驗專案號,題目,性質,型別

   from課程表,實驗專案表

   where課程表.課程號=實驗專案表.課程號

執行該語句,成功建立該檢視,如下圖4-18所示:


圖4-18作業檢視

5 資料庫的操作

5.1資料操縱

5.1.1表結構的修改

①為學生表增加一個列,列名為學院,資料型別為nchar(n),並且要求非空。

SQL語句如下所示:

alter table 學生表add 學院 nchar(20)not null


通過執行該條SQL語句,可以為學生表增加一列,成功執行的結果如圖5-1所示:

圖5-1學生表增加學院列圖

②為教師表增加一個列,列名為性別,資料型別為nchar(1),並且要求非空,在增加列的同時為該列建立check約束,約束名稱為ck_Tsex,其值要麼為男要麼為女,SQL語句為:

alter table 教師表add 性別 nchar(1)constraint ck_Tsex check(性別='男'or 性別='女') not null


通過執行該條SQL語句,成功為教師表增加了一個姓名列,成功執行的結構如圖5-2所示:

圖5-2教師表增加性別列圖

5.1.2 資料插入

①給學生表插入一組資料,學號為14001,姓名為張三,專業為信管,班級為1402班,學院為計算機學院。

SQL語句如下所示:

insertinto 學生表values('14001', '張三','女', '信管', '1402班', '計算機學院')


通過執行該條語句,成功地為學生表插入一條紀律,其成功執行的結果如圖5-3所示:

圖5-3學生表插入一條記錄圖

②給教師表插入一條記錄,教師編號為95001,姓名為李四,所在部門為資訊系,性別為女,對應的SQL語句為:

insertinto 教師表values('95001', '李四',  '資訊系','女')

通過執行該條語句成功的為教師表插入一條記錄,其成功執行的結果如圖5-4所示:


圖5-4教師表插入一條記錄圖

5.1.3資料更新

①將學生表中學號為14001的學生姓名改成“杜新新”,其SQL語句為:

update 學生表set 姓名='杜新新'where 學號='14001'

執行成功的結果如圖5-5所示:

圖5-5修改學生表中學號為14001的姓名為杜新新圖

②將教師表中教師編號為95001的教師名改成“吳巖”,其SQL語句為:

update 教師表set 姓名='吳巖'where 教師編號='95001'

執行成功的結果如圖5-6所示:


圖5-6修改教師表教師編號為95001的姓名為吳巖圖

5.1.4資料刪除

①刪除學生表中專業為計算機系的學生的資訊

SQL語句如下所示:

delete from 選修表where 學號 in (select 學號from 學生表where 專業='計算機系')

執行成功的結果如圖5-7所示:


圖5-7刪除選修表中計算機專業的學生圖

②刪除學生表中學號為14007的學生記錄,其SQL語句如下所示:

delete from 學生表where 學號='14007'

成功執行的結果如圖5-8所示:

圖5-8刪除學生表中學號為14007的學生圖

5.2 資料查詢

5.2.1 單表查詢

①查詢學號為14001的學生的姓名,專業,班級,其對應的SQL語句如下所示:

select 姓名,專業,班級

from 學生表

where 學號='14001'


成功執行的結果如圖5-9所示:

圖5-9選擇學生表中學號為14001的學生的資訊圖

②查詢教師編號為95001的教師的姓名和所在部門,其SQL語句如下所示:

select 姓名

from 教師表

where 教師編號='95001'


執行成功的結果如圖5-10所示:

圖5-10選擇教師表中教師編號為95001的教師的姓名圖

③查詢實驗報告號為16001並且學號為14001的學生的實驗報告,其SQL語句如下所示:

select *

from 實驗報告表

where 實驗報告號=16001and 學號='14001'


成功地執行的結果如圖5-11所示:

圖5-11選擇實驗報告表中實驗報告號為16001學號為14001的實驗報告資訊圖

④檢視課程名為資料庫系統的實驗指導書,其SQL語句如下所示:

select 實驗指導書

from 課程表

where 課程名='資料庫系統'

成功執行的結果如圖5-12所示:


圖5-12檢視課程名為資料庫系統的實驗指導書圖

5.2.2多表查詢

①查詢學號為14001的學生所選的課程

對應的SQL語句為:

select 課程名

from 學生表, 選修表, 課程表

where 學生表.學號=選修表.學號

and 課程表.課程號=選修表.課程號

and 學生表.學號='14001'

執行成功的截圖如圖5-13所示:


圖5-13查詢學號為14001的學生選修的課程名圖

②查詢課程名為資料庫的實驗題目

SQL語句為:

select題目

from 課程表, 實驗專案表

where 課程表.課程號=實驗專案表.課程號 and 課程名='資料庫系統'


執行成功的結果如圖5-14所示:

圖5-14查詢課程名為資料庫的實驗題目圖

③檢視所有教師所開課程的課程表

SQL語句為:

select 教師表.姓名, 課程名, 時間, 地點

from 教師表, 課程表, 講授表

where 教師表.教師編號=講授表.教師編號

and 課程表.課程號=講授表.課程號


成功地執行結果如圖5-15所示:

圖5-15檢視所有教師所開課程的課程表圖

5.3 儲存過程的建立

①建立“我的學生”儲存過程

由於在進行批閱實驗報告的時候,教師需要將她所教的學生的資訊調出來,為了提高系統的效能,加快執行的速度,我們在“實驗報告管理系統資料庫”中建立使用者儲存過程“我的學生”,程式碼如下:

create procedure 我的學生

as begin

declare @學號 char(11), @姓名 nchar(5), @性別 nchar(1), @專業 nchar(12),@班級 char(10)

declareMS_cursorcursor for

    select 學生表.學號,學生表.姓名,學生表.性別,專業,班級

    from 學生表, 講授表, 教師表,選修表

where 講授表.課程號=選修表.課程號 and 選修表.學號=學生表.學號 and 講授表.教師編號=教師表.教師編號 and 教師表.姓名='吳巖'

openMS_cursor

fetch next fromMS_cursor into @學號,@姓名,@性別,@專業,@班級

[email protected]@FETCH_STATUS=0

begin

print @學號 + ' '+ @姓名+' '[email protected]性別+''[email protected]專業+' '[email protected]班級

fetch next fromMS_cursor into @學號,@姓名,@性別,@專業,@班級

end

closeMS_cursor

deallocateMS_cursor

end

建立儲存過程的程式碼成功執行的截圖如圖5-16所示:


圖5-16建立“我的學生”儲存過程圖

執行儲存過程“我的學生”的程式碼如下:

execute 我的學生


成功執行儲存過程“我的學生”的截圖如圖5-17所示:

圖5-17執行儲存過程“我的學生”圖

②建立“我的課程”儲存過程

由於學生在進行實驗的時候需要通過自己的學號查詢自己這一學期所選的課程名稱,為了提高系統的效率,可以為該功能建立一個儲存過程,具體的實現程式碼如下所示:

create procedure 我的課程

as begin

declare @課程名 nchar(10)

declareMC_cursorcursor for

    select 課程表.課程名

    from 課程表,選修表

    where 課程表.課程號=選修表.課程號 and 學號='14001'

openMC_cursor

fetch next fromMC_cursor into @課程名

[email protected]@FETCH_STATUS=0


begin

    print @課程名

    fetch next from MC_cursor into @課程名

end

closeMC_cursor

deallocateMC_cursor

end

執行成功的結果如圖5-18所示:

圖5-18建立“我的課程”儲存過程圖

執行儲存過程“我的課程”的程式碼如下所示:

execute 我的課程

執行成功的截圖如圖5-19所示:


圖5-19執行儲存過程“我的課程”圖

5.4 觸發器的建立

①建立觸發器“刪除_報告_專案”

如果實驗專案不存在,那麼實驗報告儲存在資料庫就沒有意義了,所以,要實現在刪除實驗專案的同時將它對應的實驗報告也同時刪除,因此建立下面觸發器,該觸發器的名字為刪除_報告_專案,實現程式碼如下所示:

create trigger 刪除_報告_專案

on 實驗專案表

for delete

as

begin

if exists(select 實驗專案號 from deleted)

    begin

       select * from deleted

       delete from 實驗報告表 where 實驗報告號=(select 實驗專案號 from deleted)

    end

end

執行成功的截圖如圖5-20所示:


圖5-20建立觸發器“刪除_報告_專案”圖

②建立觸發器“更新_報告_專案”

由於實驗報告號參照實驗專案號,他們之間是一一對應的關係,因此在對實驗專案號進行修改的同時要求實驗報告也隨之發生變化,所以建立一個更新觸發器,起名字為更新_ 報告_專案,具體的程式碼實現如下所示:

create trigger 更新_報告_專案

on 實驗專案表

for update

as

begin

if exists(select 實驗專案號 from deleted)

    begin

       update 實驗報告表

       set 實驗報告號=(select 實驗專案號 from inserted)

       where 實驗報告號=(select 實驗專案號 from deleted)

    end

end

建立成功的截圖如圖5-21所示:


圖5-21執行觸發器“刪除_報告_專案”圖

6 總結

在本次課程設計中,真實地接觸了資料庫系統的設計與實現。經過資料庫系統分析、概念結構設計、邏輯結構設計、物理結構設計,逐步地將實驗報告管理系統的資料庫建立了起來,這是我第一次完整地開發一個系統,感到無比的激動和興奮。在開始設計這個系統,瞭解這個系統的需求時,查閱了很多文獻,但還是不太瞭解,最後在老師的幫助下,經過了一星期的時間,才將前面的功能需求、效能需求分析和資料流程圖結束,在進行概念結構設計的時候,由於對E-R圖的理解不夠深入,將對資料的具體操作畫到了E-R圖中,在老師的指導下進行了糾正;在進行物理結構設計的時候,由於需要考慮表之間的關係,由於有些主鍵設定的不符合實際情況,從而導致沒有辦法建立外來鍵,在老師的幫助下進行了修改,完成了資料庫的物理結構設計。由於在概念結構設計的時候思路的不夠成熟,導致在物理設計的時候發現了錯誤,又返回到概念結構設計,重新進行了概念結構設計,浪費了大量的時間和精力。雖然在課程設計前,老師再三的強調,在需求分析和概念結構設計的時候一定要考慮全面再開始下手,但是最終還是犯下了同樣的錯誤,看來在進行物理結構設計之前將系統設計全面很難,只能做到儘量地考慮完全以避免在後期返工。

通過一學期的資料庫課程的學習,只是掌握了資料庫的理論知識,但是從理論到實踐又是一個很大的挑戰,在這兩星期的課程設計中,親身的感受了一下設計一個完整的資料庫系統的全過程。在完成實驗報告管理系統的資料庫設計之後,感覺自己對資料庫設計不再是侷限於資料庫的建立和表的建立,而是要從實際出發,結合使用者的需求來設計資料庫,並且對約束的選擇,主鍵、外來鍵的選擇也是一個繁瑣的過程。總之,通過此次課程設計,我感到獲益匪淺,但是唯一的不足之處就是不能將該系統實現出來,希望下次能夠做的更加完美。

參考文獻

[1]趙文濤. 資料庫系統與應用. 中國礦業大學出版社.2012

[2]http://www.cnki.net/KCMS/detail/detail.aspx?QueryID=0&CurRec=1&filename=1015006243.nh&dbname=CMFD201501&dbcode=CMFD&pr=&urlid=&yx=&uid=WEEvREcwSlJHSldRa1FhcTdWYVFpVWZZZno4cWpNSVJ1V2FHUysvNVd4cz0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4ggI8Fm4gTkoUKaID8j8gFw!!&v=MTM2NzF0RnkvbVZyL09WRjI2RzdPNEdOUElySkViUElSOGVYMUx1eFlTN0RoMVQzcVRyV00xRnJDVVJMeWVaZVI=

[3]http://wenku.baidu.com/link?url=Qk_bJTBHJmFJV8y9mZUmZoXBCfMF512291Cs1SKOi1lG7JHTYja20iZu9jwyGeg0RfvU6U2XNMDdYjBJyqhOkQmZtYY-NkSq412oU1KY3Qi

相關推薦

資料庫課程設計實驗報告管理系統

資料庫系統原理 課程設計報告 設計題目  實驗報告管理系統資料庫設計   專業班級     信管1402班               學    號     311409030202              姓    名     杜   新   新       

資料庫課程設計-NBA球隊資訊管理系統總結

    得知要做一個數據庫課程設計時,第一時間想到已經很有章法的資料庫--NBA資訊統計。2012年6月,現役最偉大的球星Lebron James(也是我最最尊敬和喜歡的巨星)首冠,黃袍加身,終於走上王位。為了懷念當初的感動,決定做一個2012年NBA季後賽資料庫。資料

資料庫課程設計-NBA球隊資訊管理系統

//匯入資料並創立資料庫 /*==============================================================*/ /* DBMS name: Microsoft SQL Server 2008 */ /*

資料結構課程設計【學生資訊管理系統煙大版

/* * Copyright (c) 2016, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:student.project * 作者:李瀟 * 完成日期:2016年12月28日 * 版本號:DEVC+

課程設計:學生檔案管理系統

 一、       程式設計的題目     ——學生檔案管理系統     二、         程

大一c語言課程設計原始碼——學生成績管理系統,鍵盤移動

部落格目錄 學生成績管理系統 ---------------------------->>>>>>>>>>>>>資源傳送門<<<<<<<<----

C語言課程設計之學生資訊管理系統

#include"stdio.h" //標準的輸入輸出函式檔案頭部說明 #include"math.h" // 數學函式頭部說明 #include"string.h" #include"stdlib.h" //通過該函式頭部裡的

C++課程設計:學生資訊管理系統

課程設計內容 1.)學生資訊的錄入:錄入新的學生的資訊; 2.)學生資訊的新增:新增新的學生的資訊; 3.) 學生資訊的刪除:刪除不需要的學生的資訊。 4.)學生資訊的查詢:查詢你需要的學生的資訊。 5.)學生資訊的修改:修改錯誤的學生的資訊。 6.)學生資訊的顯示:顯示所

水果售賣系統課程設計第一階段--需求分析

公司 快捷 驗證 業務邏輯 ora 用戶 根據 學生 對象 課程設計報告 學 號 201610411209 姓 名 何星林 學 號 201610411227 姓 名

一個Python編寫的小程式學生資訊管理系統

def printInfo(StudentData,StudentName): """ :param StudentData: :param StudentName: :return: """ student = StudentData[Stude

前端UI大全針對後臺管理系統

轉自http://blog.csdn.net/u011001084/article/details/52250270最近有個專案需要,維護優化以前一個外包的專案,由於專案比較早所以UI不太美觀,想做重構。想滿足的條件應該達到如下幾個:1、美觀、大方、簡潔2、相容IE8、不考慮

JAVA原始碼學生資訊管理系統

1. [程式碼][Java]程式碼      package student; import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.ev

簡單的.NET三層框架的實現學生作業管理系統

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyCourse.aspx.cs" Inherits="XGhms.Web.Teacher.CourseControls.MyCourse" %> <%@ Register T

黑馬程式設計師_7k面試題交通燈管理系統學習筆記

總共有12條路線,為了統一程式設計模型,可以假設每條路線都有一個紅綠燈對其進行控制,右轉彎的4條路線的控制燈可以假設稱為常綠狀態,另外,其他的8條線路是兩兩成對的,可以歸為4組,所以,程式只需考慮圖中標註了數字號的4條路線的控制燈的切換順序,這4條路線相反方向的路線的控制燈跟隨這4條路線切換,不必額外考慮

資料結構課程設計約瑟夫環

課程設計題三:約瑟夫(Joseph)環  設計目的:  1.掌握單向迴圈連結串列的建立。 2.掌握單向迴圈連結串列的操作。 設計內容:   編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人只有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個仍開

C語言小專案學生資訊管理系統

/* 執行環境:我是在linux裡面用gcc編譯的,在windows裡應該也能執行,用的一些檔案庫函式都是c標準庫,沒有用linux的系統呼叫(糾正一下:system("clear")這個系統呼叫是linux的,windows裡面用system("cls") )

黑馬程式設計師——面試題破解交通燈管理系統

------- android培訓、java培訓、期待與您交流! ---------- 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: -非同步隨機生成按照各個路線行駛的車輛。 例如:由南向而來去往北向的車輛 ---- 直行車輛由西向而來去往南向的車輛 ---- 右轉

資料庫課程設計-NBA球隊管理系統VC程式設計

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename ("EOF", "EndOfFile") #include <iostream> #include <iomanip

java課程設計學生信息管理系統

gen 圖片 false 出生日期 resizable cnblogs orm size gin 1.需求分析 功能要求: 1)需要管理的學生信息有:學號、姓名、性別、出生日期、政治面貌、家庭住址、電話、宿舍號。 2)實現查詢、增、刪、改等功能。 數據存儲:數據庫或文件。

管理信息系統 課程設計2018-6-16

dbms pycharm 最新新聞 用戶 CM jetbrains incr 2-2 pla 1. 引言 在這個信息技術發展飛快的時代,信息也不再是像從前那麽單一,具體的形式來存在的,所以我們對於信息也不能以以前的態度去面對,我們要有更好的方法去管理信息,利用Python