第一篇:教務(wù)管理系統(tǒng) 數(shù)據(jù)庫實(shí)例設(shè)計(jì)
第17章 數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)實(shí)例
本章以一個(gè)考務(wù)管理系統(tǒng)的設(shè)計(jì)過程為例,介紹在VB 6.0+SQL Server 2000環(huán)境中開發(fā)數(shù)據(jù)庫系統(tǒng)的一般方法。
17.1 系統(tǒng)概述
17.1.1 系統(tǒng)功能
本系統(tǒng)用于從考生報(bào)名、產(chǎn)生準(zhǔn)考證到錄取考生和打印成績單即對(duì)考生考試和錄取全過程進(jìn)行管理的考務(wù)系統(tǒng),包含主要功能如下:
? ? ? ? ? ? 考生報(bào)名,按報(bào)名順序產(chǎn)生報(bào)名號(hào)
產(chǎn)生準(zhǔn)考生號(hào)和以緊湊方式打印準(zhǔn)考證 輸入考生考試成績和輸入錄取合格標(biāo)準(zhǔn) 根據(jù)合格標(biāo)準(zhǔn)錄取上線考生 打印考生成績單和考生錄取通知書 設(shè)置系統(tǒng)用戶和系統(tǒng)初始化
17.1.2 設(shè)計(jì)技巧
本系統(tǒng)設(shè)計(jì)中的一些技巧如下: ? ? ? ? 公共模塊設(shè)計(jì)(參見17.4節(jié)的Module1.Bas模塊)SQL Server數(shù)據(jù)庫設(shè)計(jì)(參見17.3節(jié))VB菜單設(shè)計(jì)方法(包括菜單項(xiàng)的有效性設(shè)計(jì),對(duì)于“一般操作員”,使若干菜單項(xiàng)無效。參見menu多文檔窗體設(shè)計(jì)過程)統(tǒng)一的數(shù)據(jù)編輯設(shè)計(jì)方法:以ksb表為例進(jìn)行說明:為了編輯其記錄,設(shè)計(jì)了edks窗體,在其中的DataGrid數(shù)據(jù)網(wǎng)格控件中顯示所有已輸入的考生記錄。用戶可以先通過“設(shè)置條件”框架查找到滿足指定條件的考生記錄,然后選擇“修改”或“刪除”命令按鈕進(jìn)行考生記錄的修改或刪除,或者選擇“添加”命令按鈕輸入新的考生記錄。? ? ? VB報(bào)表設(shè)計(jì)方法(包括使用Data Report設(shè)計(jì)器和PrintForm方法)圖像數(shù)據(jù)的存取方法(參見edks窗體設(shè)計(jì)過程)事件編程技術(shù):一些數(shù)據(jù)編輯窗體(如edks等窗體)上有兩個(gè)事件過程即Load和Activate,它們的執(zhí)行過程是:在啟動(dòng)本窗體時(shí)先執(zhí)行Load(僅執(zhí)行一次)事件過程,
第二篇:數(shù)據(jù)庫程序設(shè)計(jì)---教務(wù)輔助管理系統(tǒng)
數(shù)據(jù)庫設(shè)計(jì)實(shí)例 教務(wù)管理系統(tǒng)
數(shù)據(jù)庫實(shí)驗(yàn)七 數(shù)據(jù)庫設(shè)計(jì)
題目要求:
設(shè)計(jì)一個(gè)教務(wù)管理系統(tǒng)。要求管理包括:學(xué)生的檔案,學(xué)生選課的情況,學(xué)生每學(xué)期的綜合測評(píng),教師檔案,教師工作量等等。具體考核方法根據(jù)自己了解的實(shí)際情況處理。
假設(shè)此次設(shè)計(jì)的教務(wù)系統(tǒng)是整個(gè)學(xué)生管理系統(tǒng)數(shù)據(jù)庫中的一部分,整個(gè)系統(tǒng)至少還包括學(xué)籍管理等其他子系統(tǒng)。
在初期設(shè)計(jì)時(shí),先關(guān)注與教務(wù)系統(tǒng)有關(guān)的數(shù)據(jù)。在完成對(duì)教務(wù)管理系統(tǒng)的建模后再對(duì)整個(gè)系統(tǒng)進(jìn)行合并,總終得到整個(gè)系統(tǒng)的設(shè)計(jì)方案。
一、需求分析
1、根據(jù)分析可以畫出該教務(wù)管理系統(tǒng)的數(shù)據(jù)流圖:
學(xué)生 選課 上課 考試 測評(píng) 選課單 允許考試 成績單 老師檔案 課程簡介 教室安排 試卷 考場安排 測評(píng)報(bào)告單 學(xué)生名單 教師 選定教材 申報(bào) 課表
2、數(shù)據(jù)字典
數(shù)據(jù)結(jié)構(gòu):學(xué)生
含義說明:是教務(wù)管理系統(tǒng)的一個(gè)核心數(shù)據(jù)結(jié)構(gòu),定義了學(xué)生的有關(guān)信息
組成:學(xué)號(hào)、姓名
數(shù)據(jù)項(xiàng):學(xué)號(hào)
含義說明:唯一標(biāo)識(shí)每一個(gè)學(xué)生
別名:學(xué)生編號(hào) 類型:字符型 長度:9位
取值范圍:190000000 – 999999999
取值含義:前四位表明學(xué)生所在年級(jí),后五位安順序編號(hào)
數(shù)據(jù)項(xiàng):姓名
含義說明:表示學(xué)生的姓名 類型:字符型 長度:10位
取值范圍:任意字符
數(shù)據(jù)結(jié)構(gòu):教師
含義說明:教務(wù)管理系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)之一,定義了教師的有關(guān)信息 組成:教師號(hào),教師姓名
數(shù)據(jù)項(xiàng):教師號(hào)
含義說明:教師的編號(hào) 類型:字符型 長度:5位
取值范圍:10000 – 99999
數(shù)據(jù)項(xiàng):教師姓名
含義說明:教師的姓名 類型:字符型 長度:10位
取值范圍:任意合法的字符
數(shù)據(jù)結(jié)構(gòu):課程
含義說明:教務(wù)管理系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)之一,定義了課程的有關(guān)信息 組成:課程號(hào),課程名,課程描述,教師,教室,教科書,學(xué)分
數(shù)據(jù)項(xiàng):課程號(hào)
含義說明:課程的編號(hào) 類型:字符型 長度:4
取值范圍:0001 – 9999
數(shù)據(jù)項(xiàng):課序號(hào)
含義說明:對(duì)于同一課程,由不同老師教授,用課序號(hào)來區(qū)分 類型:字符型 長度:2
取值范圍:01 – 99
數(shù)據(jù)項(xiàng):課程名
含義說明:課程的名稱 類型:字符型 長度:10
取值范圍:任意合法的字符
數(shù)據(jù)項(xiàng):課程描述
含義說明:課程內(nèi)容的基本描述 類型:字符型 長度:200
取值范圍:任意合法字符
數(shù)據(jù)項(xiàng):教科書
含義說明:課程所用的教科書 類型:字符型 長度:20
取值范圍:任意合法字符
數(shù)據(jù)項(xiàng):學(xué)分
含義說明:課程的學(xué)分 類型:整型 長度:1
取值范圍:1-9
數(shù)據(jù)結(jié)構(gòu):教室
含義說明:上課所用的教室
組成:教室編號(hào),教室地址,教室容量
數(shù)據(jù)項(xiàng):教室編號(hào)
含義說明:教室的編號(hào) 類型:字符 長度:5
取值范圍:00001-99999
數(shù)據(jù)項(xiàng):教室地址
含義說明:標(biāo)明教室的地址 類型:字符 長度:30
取值范圍:任意合法的字符
數(shù)據(jù)項(xiàng):教室容量
含義說明:教室的容納學(xué)生的數(shù)量 類型:整型
取值范圍:正整數(shù)
數(shù)據(jù)結(jié)構(gòu):選課記錄
含義說明:紀(jì)錄學(xué)生選課的紀(jì)錄 組成:學(xué)生,課程,成績
數(shù)據(jù)項(xiàng):成績
含義說明:選課學(xué)生本學(xué)期的成績
類型:浮點(diǎn)數(shù)
范圍:0.0 – 100.0
處理過程:分配教室
說明:為所有課程分配上課教室 輸入:課程,教室 輸出:教室安排
處理:學(xué)期課程決定后,要為每個(gè)課程安排上課地點(diǎn),要求上課的地點(diǎn)不能沖突且上課人數(shù)不能超過教室容量。
處理過程:分配考場
說明:在考試日期,為所有課程分配考場
輸入:課程,教室
輸出:考場安排
處理:為每個(gè)課程安排考場,考試時(shí)間和地點(diǎn)不能沖突且考試人數(shù)不能超過考場容量。
數(shù)據(jù)存儲(chǔ):成績單
說明:記錄學(xué)生本學(xué)期所有課程成績 流入數(shù)據(jù)流:學(xué)生所有的選課記錄 流出數(shù)據(jù)流:學(xué)生的成績單 數(shù)據(jù)量:由學(xué)生的人數(shù)決定 存取方式:隨機(jī)存取
二、概念結(jié)構(gòu)設(shè)計(jì)
1、根據(jù)需求分析畫出E-R圖:
選修 學(xué)生 教師 課程 m n 講授 1 n 教科書 n
成績 教室 開設(shè) 1 n
2、根據(jù)E-R圖寫出各個(gè)實(shí)體的屬性描述
學(xué)生:{學(xué)號(hào),姓名}
課程:{課程號(hào),課程名,課程描述,學(xué)分} 教師:{教師號(hào),教師名,課程數(shù)} 教室:{教室編號(hào),地址,容量}
3、視圖的集成
假設(shè)在學(xué)生管理系統(tǒng)的學(xué)籍管理系統(tǒng)中存在另一個(gè)學(xué)生實(shí)體,其中還包括以下信息:性別,所屬專業(yè),所屬班級(jí)。為了使兩個(gè)實(shí)體保持一致,對(duì)兩個(gè)實(shí)體取并集得到新的學(xué)生實(shí)體: 學(xué)生:{學(xué)號(hào),姓名,性別,專業(yè),班級(jí)}
三、邏輯結(jié)構(gòu)設(shè)計(jì)
1、由E-R圖向數(shù)據(jù)模型的轉(zhuǎn)換
一個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性。實(shí)體的碼就是關(guān)系的碼。所以,E-R圖中的屬性描述可直接轉(zhuǎn)換為相應(yīng)的關(guān)系模式。
2、對(duì)于剩余的一對(duì)多和多對(duì)多聯(lián)系可以如下表示
學(xué)生-課程:{學(xué)號(hào),課程號(hào),課序號(hào),成績} 課程-教師:{課程號(hào),課序號(hào),教師號(hào)} 課程-教科書:{課程號(hào),課序號(hào),教科書}
教室-課程:{教室號(hào),時(shí)間,課程號(hào),課序號(hào)}
其中 課程-教師 與 課程-教科書 具有相同的主碼,可以合并成一個(gè)關(guān)系 教學(xué):{課程號(hào),課序號(hào),教師號(hào),教科書}
最后得到的關(guān)系模式為
學(xué)生:{學(xué)號(hào),姓名,性別,專業(yè),班級(jí)} 課程:{課程號(hào),課程名,課程描述,學(xué)分} 教師:{教師號(hào),教師名,課程數(shù)} 教室:{教室號(hào),地址,容量}
學(xué)生-課程:{學(xué)號(hào),課程號(hào),課序號(hào),成績} 教學(xué):{課程號(hào),課序號(hào),教師號(hào),教科書} 教室-課程:{教室號(hào),時(shí)間,課程號(hào),課序號(hào)}
3、用戶外模式
根據(jù)需求,為計(jì)算綜合測評(píng)增加一個(gè)外模式,因?yàn)榫C合測評(píng)只在學(xué)期末進(jìn)行,查詢次數(shù)不多,所以沒有必要用冗余的方法來提高查詢效率,只需要建立一個(gè)外模式視圖即可。
測評(píng){學(xué)號(hào),學(xué)生姓名,平均成績}
4、根據(jù)設(shè)計(jì)寫出相應(yīng)的SQL語句:
CREATE TABLE student(Sno
VARCHAR(9)
CONSTRAINT pk_student PRIMARY KEY,Sname
VARCHAR(10)NOT NULL,Sex
VARCHAR(1)
NOT NULL,Major
VARCHAR(10)
NOT NULL,Class
VARCHAR(10)
NOT NULL,CHECK
(Sex = 'f' OR Sex = 'm'))
CREATE TABLE course(Cno
VARCHAR(4)
CONSTRAINT pk_course PRIMARY KEY,Cname
VARCHAR(10)
NOT NULL,Describe
VARCHAR(200),Mark
INTEGER)
CREATE TABLE teacher(Tno
VARCHAR(5)
CONSTRAINT teacher_pk PRIMARY KEY,Tname
VARCHAR(10)
NOT NULL,Ccnt
INTEGER
NOT NULL DEFAULT 0)
CREATE TABLE classroom(Rno
VARCHAR(5)CONSTRAINT pk_classroom PRIMARY KEY,Locate
VARCHAR(30)NOT NULL,Cap
INTEGER CHECK
(Cap > 0))
CREATE TABLE tech(Cno
VARCHAR(4)NOT NULL CONSTRAINT fk_course_cno FOREIGN KEY REFERENCES course(Cno)ON UPDATE CASCADE
--級(jí)聯(lián)更新
ON DELETE CASCADE,--級(jí)聯(lián)刪除
SCno
VARCHAR(2)NOT NULL,Tno
VARCHAR(5)CONSTRAINT fk_teacher_tno FOREIGN KEY REFERENCES teacher(Tno)
ON UPDATE CASCADE
ON DELETE CASCADE,Book
VARCHAR(20)
CONSTRAINT pk_tech PRIMARY KEY(Cno,SCno))
CREATE TABLE SC(Sno
VARCHAR(9)NOT NULL CONSTRAINT fk_student_sno FOREIGN KEY REFERENCES student(Sno)
ON UPDATE CASCADE
ON DELETE CASCADE,Cno
VARCHAR(4)NOT NULL CONSTRAINT fk_sc_course_cno FOREIGN KEY REFERENCES course(Cno)
ON UPDATE CASCADE
ON DELETE CASCADE,SCno
VARCHAR(2)NOT NULL,Score FLOAT
CONSTRAINT pk_sc PRIMARY KEY(Sno,Cno,SCno))
CREATE TABLE RC(Rno
VARCHAR(5)CONSTRAINT fk_classroom_rno FOREIGN KEY REFERENCES classroom(Rno)
ON UPDATE CASCADE
ON DELETE CASCADE,Time
DATETIME,Cno
VARCHAR(4)NOT NULL CONSTRAINT fk_rc_course_cno FOREIGN KEY REFERENCES course(Cno)
ON UPDATE CASCADE
ON DELETE CASCADE,SCno
VARCHAR(2)NOT NULL
CONSTRAINT pk_rc PRIMARY KEY(Rno,Time))
為進(jìn)行綜合測評(píng)增加一個(gè)外模式 CREATE VIEW assess AS
SELECT SC.sno, sname, AVG(score)as average FROM SC,Student where SC.sno = student.sno
GROUP BY SC.sno,sname
為了符合數(shù)據(jù)的參照完整性約束,避免學(xué)生選課的時(shí)候選擇一個(gè)不存在的課程號(hào)-課序號(hào)組,增加一個(gè)外鍵約束。ALTER TABLE sc
ADD CONSTRAINT fk_sc_tech FOREIGN KEY(Cno,SCno)REFERENCES tech(Cno,SCno)
ON UPDATE CASCADE
ON DELETE CASCADE
為了在插入一個(gè)新課程時(shí)能級(jí)聯(lián)更新教師的工作量,增加一個(gè)觸發(fā)器。此任務(wù)也可以通過建立一個(gè)外模式視圖來動(dòng)態(tài)統(tǒng)計(jì),為了練習(xí)的目的這里采用了觸發(fā)器
CREATE TRIGGER workcnter On tech AFTER INSERT ,UPDATE, DELETE AS BEGIN
DECLARE @T VARCHAR(5)
IF EXISTS
(SELECT TOP 1 Tno FROM INSERTED)
BEGIN
SET @T =(SELECT TOP 1 Tno FROM INSERTED)
UPDATE teacher SET Ccnt = Ccnt + 1 WHERE Tno = @T
END
IF EXISTS
(SELECT TOP 1 Tno FROM DELETED)
BEGIN
SET @T =(SELECT TOP 1 Tno FROM DELETED)
UPDATE teacher SET Ccnt = Ccnt1 WHERE Tno = @T END END 關(guān)于課程容量:如何保證選課的學(xué)生數(shù)量不超過教室的容量?
初步解決辦法是:在學(xué)生選課時(shí)建立暫時(shí)不考慮容量問題,都加滲透一個(gè)臨時(shí)的SC表中。然后,在選課結(jié)束后將未超額的記錄直接加滲透SC表,超額的課程進(jìn)行抽簽,將命中部分學(xué)生的選課記錄插入SC表,直到人數(shù)符合課程容量的要求為止。
抽簽的功能較適合用頂層的高級(jí)語言來實(shí)現(xiàn)。在選課結(jié)束后,選超額課程的學(xué)生需登陸選課系統(tǒng)進(jìn)行抽簽,抽簽的過程可以使用概率算法,如果抽中,系統(tǒng)再將選課記錄插入SC表,否則就從臨時(shí)表中刪除。所以,在數(shù)據(jù)庫系統(tǒng)中,沒有對(duì)SC表的插滲入滲出操作進(jìn)行約束。
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處: http://blog.csdn.net/lesky/archive/2006/12/25/1460 966.aspx
數(shù)據(jù)庫設(shè)計(jì)---教務(wù)管理系統(tǒng)
2009年12月03日 星期四 11:04 P.M.題目要求:
設(shè)計(jì)一個(gè)教務(wù)管理系統(tǒng)。要求管理包括:學(xué)生的檔案,學(xué)生選課的情況,學(xué)生每學(xué)期的綜合測評(píng),教師檔案,教師工作量等等。具體考核方法根據(jù)自己了解的實(shí)際情況處理。
假設(shè)此次設(shè)計(jì)的教務(wù)系統(tǒng)是整個(gè)學(xué)生管理系統(tǒng)數(shù)據(jù)庫中的一部分,整個(gè)系統(tǒng)至少還包括學(xué)籍管理等其他子系統(tǒng)。
在初期設(shè)計(jì)時(shí),先關(guān)注與教務(wù)系統(tǒng)有關(guān)的數(shù)據(jù)。在完成對(duì)教務(wù)管理系統(tǒng)的建模后再對(duì)整個(gè)系統(tǒng)進(jìn)行合并,總終得到整個(gè)系統(tǒng)的設(shè)計(jì)方案。
一、需求分析
1、根據(jù)分析可以畫出該教務(wù)管理系統(tǒng)的數(shù)據(jù)流圖: 學(xué)生
選課
上課
考試
測評(píng)
選課單
允許考試
成績單
老師檔案
課程簡介
教室安排
試卷
考場安排
測評(píng)報(bào)告單 學(xué)生名單
教師
選定教材
申報(bào)
課表
2、數(shù)據(jù)字典 數(shù)據(jù)結(jié)構(gòu):學(xué)生
含義說明:是教務(wù)管理系統(tǒng)的一個(gè)核心數(shù)據(jù)結(jié)構(gòu),定義了學(xué)生的有關(guān)信息 組成:學(xué)號(hào)、姓名 數(shù)據(jù)項(xiàng):學(xué)號(hào)
含義說明:唯一標(biāo)識(shí)每一個(gè)學(xué)生 別名:學(xué)生編號(hào) 類型:字符型 長度:9位
取值范圍:190000000 – 999999999
取值含義:前四位表明學(xué)生所在年級(jí),后五位安順序編號(hào) 數(shù)據(jù)項(xiàng):姓名
含義說明:表示學(xué)生的姓名 類型:字符型 長度:10位 取值范圍:任意字符
數(shù)據(jù)結(jié)構(gòu):教師 含義說明:教務(wù)管理系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)之一,定義了教師的有關(guān)信息
組成:教師號(hào),教師姓名
數(shù)據(jù)項(xiàng):教師號(hào)
含義說明:教師的編號(hào)
類型:字符型
長度:5位
取值范圍:10000 – 99999
數(shù)據(jù)項(xiàng):教師姓名
含義說明:教師的姓名
類型:字符型
長度:10位
取值范圍:任意合法的字符
數(shù)據(jù)結(jié)構(gòu):課程
含義說明:教務(wù)管理系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)之一,定義了課程的有關(guān)信息 組成:課程號(hào),課程名,課程描述,教師,教室,教科書,學(xué)分
數(shù)據(jù)項(xiàng):課程號(hào) 含義說明:課程的編號(hào) 類型:字符型 長度:4 取值范圍:0001 – 9999 數(shù)據(jù)項(xiàng):課序號(hào)
含義說明:對(duì)于同一課程,由不同老師教授,用課序號(hào)來區(qū)分 類型:字符型 長度:2
取值范圍:01 – 99 數(shù)據(jù)項(xiàng):課程名 含義說明:課程的名稱 類型:字符型 長度:10
取值范圍:任意合法的字符 數(shù)據(jù)項(xiàng):課程描述
含義說明:課程內(nèi)容的基本描述 類型:字符型 長度:200
取值范圍:任意合法字符 數(shù)據(jù)項(xiàng):教科書
含義說明:課程所用的教科書 類型:字符型 長度:20
取值范圍:任意合法字符 數(shù)據(jù)項(xiàng):學(xué)分 含義說明:課程的學(xué)分 類型:整型 長度:1 取值范圍:1-9 數(shù)據(jù)結(jié)構(gòu):教室
含義說明:上課所用的教室
組成:教室編號(hào),教室地址,教室容量 數(shù)據(jù)項(xiàng):教室編號(hào) 含義說明:教室的編號(hào) 類型:字符 長度:5
取值范圍:00001-99999 數(shù)據(jù)項(xiàng):教室地址 含義說明:標(biāo)明教室的地址 類型:字符 長度:30
取值范圍:任意合法的字符 數(shù)據(jù)項(xiàng):教室容量
含義說明:教室的容納學(xué)生的數(shù)量 類型:整型 取值范圍:正整數(shù) 數(shù)據(jù)結(jié)構(gòu):選課記錄
含義說明:紀(jì)錄學(xué)生選課的紀(jì)錄 組成:學(xué)生,課程,成績
數(shù)據(jù)項(xiàng):成績
含義說明:選課學(xué)生本學(xué)期的成績
類型:浮點(diǎn)數(shù) 范圍:0.0 – 100.0 處理過程:分配教室
說明:為所有課程分配上課教室 輸入:課程,教室 輸出:教室安排
處理:學(xué)期課程決定后,要為每個(gè)課程安排上課地點(diǎn),要求上課的地點(diǎn)不能沖突且上課人數(shù)不能超過教室容量。
處理過程:分配考場
說明:在考試日期,為所有課程分配考場
輸入:課程,教室
輸出:考場安排
處理:為每個(gè)課程安排考場,考試時(shí)間和地點(diǎn)不能沖突且考試人數(shù)不能超過考場容量。
數(shù)據(jù)存儲(chǔ):成績單
說明:記錄學(xué)生本學(xué)期所有課程成績 流入數(shù)據(jù)流:學(xué)生所有的選課記錄 流出數(shù)據(jù)流:學(xué)生的成績單 數(shù)據(jù)量:由學(xué)生的人數(shù)決定 存取方式:隨機(jī)存取
二、概念結(jié)構(gòu)設(shè)計(jì)
1、根據(jù)需求分析畫出E-R圖:
選修
學(xué)生
教師
課程
m n 講授 n 教科書
n 成績
教室
開設(shè) n
2、根據(jù)E-R圖寫出各個(gè)實(shí)體的屬性描述 學(xué)生:{學(xué)號(hào),姓名}
課程:{課程號(hào),課程名,課程描述,學(xué)分} 教師:{教師號(hào),教師名,課程數(shù)} 教室:{教室編號(hào),地址,容量}
3、視圖的集成
假設(shè)在學(xué)生管理系統(tǒng)的學(xué)籍管理系統(tǒng)中存在另一個(gè)學(xué)生實(shí)體,其中還包括以下信息:性別,所屬專業(yè),所屬班級(jí)。為了使兩個(gè)實(shí)體保持一致,對(duì)兩個(gè)實(shí)體取并集得到新的學(xué)生實(shí)體: 學(xué)生:{學(xué)號(hào),姓名,性別,專業(yè),班級(jí)}
三、邏輯結(jié)構(gòu)設(shè)計(jì)
1、由E-R圖向數(shù)據(jù)模型的轉(zhuǎn)換
一個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性。實(shí)體的碼就是關(guān)系的碼。所以,E-R圖中的屬性描述可直接轉(zhuǎn)換為相應(yīng)的關(guān)系模式。
2、對(duì)于剩余的一對(duì)多和多對(duì)多聯(lián)系可以如下表示 學(xué)生-課程:{學(xué)號(hào),課程號(hào),課序號(hào),成績} 課程-教師:{課程號(hào),課序號(hào),教師號(hào)} 課程-教科書:{課程號(hào),課序號(hào),教科書} 教室-課程:{教室號(hào),時(shí)間,課程號(hào),課序號(hào)}
其中 課程-教師 與 課程-教科書 具有相同的主碼,可以合并成一個(gè)關(guān)系 教學(xué):{課程號(hào),課序號(hào),教師號(hào),教科書} 最后得到的關(guān)系模式為
學(xué)生:{學(xué)號(hào),姓名,性別,專業(yè),班級(jí)} 課程:{課程號(hào),課程名,課程描述,學(xué)分} 教師:{教師號(hào),教師名,課程數(shù)} 教室:{教室號(hào),地址,容量}
學(xué)生-課程:{學(xué)號(hào),課程號(hào),課序號(hào),成績} 教學(xué):{課程號(hào),課序號(hào),教師號(hào),教科書} 教室-課程:{教室號(hào),時(shí)間,課程號(hào),課序號(hào)}
3、用戶外模式
根據(jù)需求,為計(jì)算綜合測評(píng)增加一個(gè)外模式,因?yàn)榫C合測評(píng)只在學(xué)期末進(jìn)行,查詢次數(shù)不多,所以沒有必要用冗余的方法來提高查詢效率,只需要建立一個(gè)外模式視圖即可。測評(píng){學(xué)號(hào),學(xué)生姓名,平均成績}
4、根據(jù)設(shè)計(jì)寫出相應(yīng)的SQL語句: CREATE TABLE student(Sno VARCHAR(9)CONSTRAINT pk_student PRIMARY KEY, Sname VARCHAR(10)NOT NULL, Sex VARCHAR(1)NOT NULL, Major VARCHAR(10)NOT NULL, Class VARCHAR(10)NOT NULL, CHECK(Sex = 'f' OR Sex = 'm'))
CREATE TABLE course(Cno VARCHAR(4)CONSTRAINT pk_course PRIMARY KEY, Cname VARCHAR(10)NOT NULL, Describe VARCHAR(200), Mark INTEGER)
CREATE TABLE teacher(Tno VARCHAR(5)CONSTRAINT teacher_pk PRIMARY KEY, Tname VARCHAR(10)NOT NULL,Ccnt INTEGER NOT NULL DEFAULT 0)
CREATE TABLE classroom(Rno VARCHAR(5)CONSTRAINT pk_classroom PRIMARY KEY, Locate VARCHAR(30)NOT NULL, Cap INTEGER CHECK(Cap > 0))
CREATE TABLE tech(Cno VARCHAR(4)NOT NULL CONSTRAINT fk_course_cno FOREIGN KEY REFERENCES course(Cno)ON UPDATE CASCADE--級(jí)聯(lián)更新 ON DELETE CASCADE,--級(jí)聯(lián)刪除 SCno VARCHAR(2)NOT NULL,Tno VARCHAR(5)CONSTRAINT fk_teacher_tno FOREIGN KEY REFERENCES teacher(Tno)ON UPDATE CASCADE ON DELETE CASCADE, Book VARCHAR(20)
CONSTRAINT pk_tech PRIMARY KEY(Cno,SCno))
CREATE TABLE SC(Sno VARCHAR(9)NOT NULL CONSTRAINT fk_student_sno FOREIGN KEY REFERENCES student(Sno)ON UPDATE CASCADE ON DELETE CASCADE,Cno VARCHAR(4)NOT NULL CONSTRAINT fk_sc_course_cno FOREIGN KEY REFERENCES course(Cno)ON UPDATE CASCADE ON DELETE CASCADE, SCno VARCHAR(2)NOT NULL, Score FLOAT
CONSTRAINT pk_sc PRIMARY KEY(Sno,Cno,SCno))
CREATE TABLE RC(Rno VARCHAR(5)CONSTRAINT fk_classroom_rno FOREIGN KEY REFERENCES classroom(Rno)ON UPDATE CASCADE ON DELETE CASCADE, Time DATETIME,Cno VARCHAR(4)NOT NULL CONSTRAINT fk_rc_course_cno FOREIGN KEY REFERENCES course(Cno)ON UPDATE CASCADE ON DELETE CASCADE, SCno VARCHAR(2)NOT NULL
CONSTRAINT pk_rc PRIMARY KEY(Rno,Time))
為進(jìn)行綜合測評(píng)增加一個(gè)外模式 CREATE VIEW assess AS
SELECT SC.sno, sname, AVG(score)as average FROM SC,Student where SC.sno = student.sno GROUP BY SC.sno,sname
為了符合數(shù)據(jù)的參照完整性約束,避免學(xué)生選課的時(shí)候選擇一個(gè)不存在的課程號(hào)-課序號(hào)組,增加一個(gè)外鍵約束。ALTER TABLE sc
ADD CONSTRAINT fk_sc_tech FOREIGN KEY(Cno,SCno)REFERENCES tech(Cno,SCno)ON UPDATE CASCADE ON DELETE CASCADE
為了在插入一個(gè)新課程時(shí)能級(jí)聯(lián)更新教師的工作量,增加一個(gè)觸發(fā)器。此任務(wù)也可以通過建立一個(gè)外模式視圖來動(dòng)態(tài)統(tǒng)計(jì),為了練習(xí)的目的這里采用了觸發(fā)器 CREATE TRIGGER workcnter On tech AFTER INSERT ,UPDATE, DELETE AS BEGIN
DECLARE @T VARCHAR(5)IF EXISTS(SELECT TOP 1 Tno FROM INSERTED)BEGIN
SET @T =(SELECT TOP 1 Tno FROM INSERTED)UPDATE teacher SET Ccnt = Ccnt + 1 WHERE Tno = @T END
IF EXISTS(SELECT TOP 1 Tno FROM DELETED)BEGIN
SET @T =(SELECT TOP 1 Tno FROM DELETED)UPDATE teacher SET Ccnt = Ccnt-1 WHERE Tno = @T END END 關(guān)于課程容量:如何保證選課的學(xué)生數(shù)量不超過教室的容量?
初步解決辦法是:在學(xué)生選課時(shí)建立暫時(shí)不考慮容量問題,都加入一個(gè)臨時(shí)的SC表中。然后,在選課結(jié)束后將未超額的記錄直接加入SC表,超額的課程進(jìn)行抽簽,將命中部分學(xué)生的選課記錄插入SC表,直到人數(shù)符合課程容量的要求為止。
抽簽的功能較適合用頂層的高級(jí)語言來實(shí)現(xiàn)。在選課結(jié)束后,選超額課程的學(xué)生需登陸選課系統(tǒng)進(jìn)行抽簽,抽簽的過程可以使用概率算法,如果抽中,系統(tǒng)再將選課記錄插入SC表,否則就從臨時(shí)表中刪除。
所以,在數(shù)據(jù)庫系統(tǒng)中,沒有對(duì)SC表的插入操作進(jìn)行約束。
第三篇:數(shù)據(jù)庫實(shí)習(xí)報(bào)告-教務(wù)管理系統(tǒng).
數(shù)據(jù)庫系統(tǒng)課程設(shè)計(jì) 學(xué)生姓名: 班 學(xué) 號(hào): 指導(dǎo)教師:
教務(wù)管理系統(tǒng)
1、需求分析 1.1 信息要求: 教務(wù)管理系統(tǒng)涉及的實(shí)體有: ●教師——工作證號(hào)、姓名、職稱、電話等;●學(xué)生——學(xué)號(hào)、姓名、性別、出生年月等;●班級(jí)——班號(hào)、最低總學(xué)分等;
●系——系代號(hào)、系名和系辦公室電話等;●課程——課序號(hào)、課名、學(xué)分、上課時(shí)間及名額等。這些實(shí)體之間的聯(lián)系如下: ●每個(gè)學(xué)生都屬于一個(gè)班,每個(gè)班都屬于一個(gè)系,每個(gè)教師也都屬于一個(gè)系?!衩總€(gè)班的班主任都由一名教師擔(dān)任。
●一名教師可以教多門課,一門課可以有幾位主講老師,但不同老師講的同一門課其課序號(hào)是不同 的(課序號(hào)是唯一的。
●一名同學(xué)可以選多門課,一門課可被若干同學(xué)選中?!褚幻瑢W(xué)選中的課若已學(xué)完,應(yīng)該記錄有相應(yīng)成績。
●本單位學(xué)生、教師都有重名,工作證號(hào)、學(xué)號(hào)可以作為標(biāo)識(shí)。1.2 處理要求: 教學(xué)系統(tǒng)主要提供數(shù)據(jù)維護(hù)、選課和信息查詢。其中常見的查詢有:系統(tǒng)中各對(duì)象的基本信息查詢。查 詢指定班、系的學(xué)生信息(名單、人數(shù)等。查詢學(xué)生的成績、學(xué)分情況。查詢教師授課情況和學(xué)生選課情 況??。
1.3 安全性與完整性要求: ●安全性要求: 1.系統(tǒng)應(yīng)設(shè)置訪問用戶的標(biāo)識(shí)以鑒別是否是合法用戶, 并要求合法用戶設(shè)置其密碼, 保證用戶身份不被 盜用;2.系統(tǒng)應(yīng)對(duì)不同的數(shù)據(jù)設(shè)置不同的訪問級(jí)別,限制訪問用戶可查詢和處理數(shù)據(jù)的類別和內(nèi)容;
3.系統(tǒng)應(yīng)對(duì)不同用戶設(shè)置不同的權(quán)限,區(qū)分不同的用戶,如學(xué)生,教師,系統(tǒng)管理員。
●完整性要求: 1.各種信息記錄的完整性,關(guān)鍵信息記錄內(nèi)容不能為空;2.各種數(shù)據(jù)間相互的聯(lián)系的正確性;3.相同的數(shù)據(jù)在不同記錄中的一致性。1.4 系統(tǒng)功能的設(shè)計(jì)和劃分
根據(jù)如上得到的用戶需求,我們將本系統(tǒng)按照所完成的功能分成以下幾部分: 第一部分:用戶管理部分 第二部分:管理員管理部分 各部分完成的功能如下:
1、用戶管理部分
1、處理用戶注冊(cè)
2、處理用戶登錄
3、用戶可以查詢學(xué)生信息。
4、用戶可以查詢快件信息。
5、用戶可以提交與查詢報(bào)修信息。
6、用戶可以插入與刪除用戶自己的離返校信息。
7、用戶可以修改用戶自己密碼。
2、管理員管理部分
1、處理管理員登錄
2、管理員可以查詢學(xué)生信息。
3、管理員可以發(fā)布與更新快件信息。
4、管理員可以插入、修改與查詢報(bào)修信息。
5、管理員可以插入與查詢學(xué)生夜歸信息。
6、管理員可以查詢?cè)谛Ec離校學(xué)生信息。
7、管理員可以修改管理員密碼。
2、概念設(shè)計(jì)(1 概念模型(E-R 圖 :
選修聯(lián)系的分 E-R 圖 負(fù)責(zé)聯(lián)系的分 E-R 圖
授課聯(lián)系的分 E-R 圖
教務(wù)管理系統(tǒng)的總 E-R 圖(2 數(shù)據(jù)字典 :
(3數(shù)據(jù)流圖
查詢 課程信息 課程信息表 課程信息 查詢 課 程 成績信息 信 息 教師 學(xué) 生 選課信息信 息 查詢學(xué) 生信息 修改教 師信息 教 師 信 息 系 信 息 課 程 選課信息 信 息 學(xué)生 學(xué) 生 信 息 選課信息 修改學(xué) 教 師 信 息 生信息 查詢教 師信息 選課信息 選課 已 選 課 信 息 成績信息 選 課 表 登記 成績 成 績 信 息 查詢 選課信息 選課信息 查詢 系 信 息 班 級(jí) 信 息 學(xué)生信息 學(xué)生信息表 教師信息 教師信息表 學(xué)生信息 教師信息 班 級(jí) 信 息 班級(jí)信息 查詢 系信息 班級(jí)信息表 系信息表 總 數(shù) 據(jù) 流 圖 班級(jí)信息 查詢 系信息
3、邏輯結(jié)構(gòu)設(shè)計(jì)
-R 圖向關(guān)系模型的轉(zhuǎn)換(關(guān)系的碼用下橫線表出)教師(工作證號(hào),姓名,職稱,電話,系代號(hào))代碼表示:Teacher(Tno, Tname, Title, Tel, Dno 此為“教師”實(shí)體對(duì)應(yīng)的關(guān)系模式。其中 1:n 聯(lián)系“工作”與此關(guān)系模式合并,Dno 為外碼。存在的函數(shù) 依賴為 Tno →(Tname,Title,Tel,Dno),且不存在多值依賴,所以滿足 4NF。學(xué)生(學(xué)號(hào),姓名,性別,出生年月,班號(hào))代碼表示:Student(Sno, Sname, Ssex, Sbirth, Class 此為“學(xué)生”實(shí)體對(duì)應(yīng)的關(guān)系模式。其中 1:n 聯(lián)系“屬于”與此關(guān)系模式合并,Class 為外碼。存在的函數(shù) 依賴為 Sno →(Sname,Ssex,Sbirth,Class),且不存在多值依賴,所以滿足 4NF。系(系代號(hào),系名,系辦公室電話)代碼表示:Department(Dno, Dname, Dphone 此為“系”實(shí)體對(duì)應(yīng)的關(guān)系模式。存在的函數(shù)依賴為 Dno →(Dname,Dphone),且不存在多值依賴,所 以滿足 4NF。課程(課序號(hào),課名,學(xué)分,上課時(shí)間,名額,工作證號(hào))代碼表示:Course(Cno, Cname, Credit, Ctime, Cnum, Tno 此為“課程”實(shí)體對(duì)應(yīng)的關(guān)系模式。其中 1:n 聯(lián)系“授課”與此關(guān)系模式合并,Tno 為外碼。存在的函數(shù) 依賴為 Cno →(Cname,Credit,Ctime,Cnum,Tno),且不存在多值依賴,所以滿足 4NF。選課(學(xué)號(hào),課序號(hào),成績)代碼表示:SC(Sno, Cno, Grade 此為 m: 聯(lián)系 n “選修” 所對(duì)應(yīng)的關(guān)系模式。Sno 和 Cno 均為外部碼。存在的函數(shù)依賴為完全函數(shù)依賴(Sno,Cno)→ Grade,且不存在多值依賴,所以滿足 4NF。班級(jí)(班號(hào),最低總學(xué)分,工作證號(hào),系代號(hào))代碼表示:Class(Class, TotalCredit, Tno, Dno 此為“班級(jí)”實(shí)體對(duì)應(yīng)的關(guān)系模式。其中 1:n 聯(lián)系“屬于”和 1:1 聯(lián)系“負(fù)責(zé)”與此關(guān)系模式合并,Tno 和 Dno 為外碼。該關(guān)系模式中存在傳遞函數(shù)依賴:Class → Tno,(Tno Class,Tno → Dno,可得 Class → Dno,故 Class 不屬于
3NF。解決方法是將其模式分解為:Class(Class, TotalCredit, Tno 和 T-D(Tno, Dno,分解后的關(guān)系模式滿足 4NF,并且 T-D 與 Teacher 的碼相同,可合并為同一模式。但 是考慮到系統(tǒng)要經(jīng)常進(jìn)行系的學(xué)生信息查詢,此時(shí)就不得不對(duì) Student、Class 和 Teacher 三個(gè)表進(jìn)行連接 查詢,而連接是影響查詢效率的主要原因,所以取消對(duì) Class 的模式分解。此時(shí) Class 關(guān)系模式滿足 2NF。
設(shè)計(jì)用戶子模式 為了方便程序查詢,建立了如下用戶視圖:
1、某系的學(xué)生信息視圖(學(xué)號(hào),姓名,性別,出生年月,班號(hào))
2、某系的教師信息視圖(工作證號(hào),教師姓名,職稱,電話,負(fù)責(zé)班級(jí))
3、某課程的學(xué)生成績單(學(xué)號(hào),姓名,班級(jí),成績)
4、教師授課信息表(工作證號(hào),教師姓名,職稱,教授課程,學(xué)分,上課時(shí)間)
5、學(xué)生已選課表(課序號(hào),課名,學(xué)分,授課教師,上課時(shí)間,名額)
4、物理設(shè)計(jì) 4.1 選擇存取方法
1、數(shù)據(jù)庫管理系統(tǒng)自動(dòng)在每個(gè)表的主碼上建立索引,通常為 B + 樹索引。
2、在 Student 表 Sname 列上建立 Stu_name 索引,因?yàn)椴樵儾僮骱芏喽际雇ㄟ^學(xué)生姓名進(jìn)行的。
3、在 Teacher 表 Tname 列上建立 Tea_name 索引,因?yàn)椴樵儾僮骱芏喽际雇ㄟ^教師姓名進(jìn)行的。4.2 確定數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)
1、為了提高系統(tǒng)性能,根據(jù)具體情況將數(shù)據(jù)的易變部分與穩(wěn)定部分、經(jīng)常存取部分和存取頻率較低部 分分開存放。
2、DBMS 產(chǎn)品一般都提供了一些系統(tǒng)配置變量、存儲(chǔ)分配參數(shù),根據(jù)應(yīng)用環(huán)境確定這些參數(shù)值,并且 在系統(tǒng)運(yùn)行時(shí)還要根據(jù)系統(tǒng)實(shí)際運(yùn)行情況進(jìn)行調(diào)整,以使系統(tǒng)性能最佳。4.3 評(píng)價(jià)物理結(jié)構(gòu) 根據(jù)所選用的 DBMS,如 SQL Server 2000,從定量估算各種方案的存儲(chǔ)空間、存取時(shí)間和維護(hù)代價(jià)入 手,對(duì)估算結(jié)果進(jìn)行權(quán)衡、比較,選擇一個(gè)較優(yōu)的合理的物理結(jié)構(gòu)。
5、系統(tǒng)實(shí)施 編寫關(guān)系模式,載入數(shù)據(jù)。分期分批地組織數(shù)據(jù)入庫,先輸入小批量數(shù)據(jù)做調(diào)試用,待試運(yùn)行基本合 格后,再大批量輸入數(shù)據(jù),逐步增加數(shù)據(jù)量,逐步完成運(yùn)行評(píng)價(jià)。需要注意的是,要首先調(diào)試運(yùn)行 DBMS 的 恢復(fù)功能,做好數(shù)據(jù)庫的轉(zhuǎn)儲(chǔ)和恢復(fù)工作?;?SQL 語言代碼如下: CREATE SCHEMA “TeachAffair” AUTHORIZATION Gao CREATE TABLE Department(Dno CHAR(3 PRIMARY KEY, Dept CHAR(20 UNIQUE NOT NULL, Dphone CHAR(11,;CREATE TABLE Teacher(Tno CHAR(6 PRIMARY KEY, Tname CHAR(20 NOT NULL, Title CHAR(8, Tel CHAR(11,Dno CHAR(3, FOREIGN KEY(Dno REFERENCES Department(Dno;CREATE TABLE Class(Class CHAR(6 PRIMARY KEY, TotalCredit NUMERIC(4,1, Tno CHAR(6, Dno CHAR(3, FOREIGN KEY(Tno REFERENCES Teacher(Tno, FOREIGN KEY(Dno REFERENCES Department(Dno;CREATE TABLE Student(Sno CHAR(11 PRIMARY KEY, Sname CHAR(20 NOT NULL, Ssex CHAR(2, Sbirth DATETIME, Class CHAR(6, FOREIGN KEY(Class REFERENCES Class(Class;CREATE TABLE Course(Cno CHAR(6 PRIMARY KEY, Cname CHAR(20 NOT NULL, Credit NUMERIC(2,1, Ctime DATETIME, Cnum SMALLINT, Tno CHAR(6, FOREIGN KEY(Tno REFERENCES Teacher(Tno;CREATE TABLE SC(Sno CHAR(11 NOT NULL, Cno CHAR(6 NOT NULL, Grade SMALLINT CHECK(Grade>=0 AND Grade<=100, PRIMARY KEY(Sno, Cno, FOREIGN KEY(Sno REFERENCES Student(Sno ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(Cno REFERENCES Course(Cno ON DELETE NO ACTION ON UPDATE CASCADE,;/*建立索引*/ CREATE UNIQUE INDEX Stu_name ON Student(Sname;CREATE UNIQUE INDEX Tea_name ON Teacher(Tname;CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC;/*查詢某個(gè)系的學(xué)生信息*/ CREATE VIEW GIS_Student AS SELECT * FROM Student WHERE Class IN(SELECT Class FROM Class WHERE Dname='GIS' WITH CHECK OPTION;SELECT * FROM GIS_Student;SELECT COUNT(* FROM GIS_Student;/*查詢班級(jí)的學(xué)生信息*/ SELECT Sno, Sname, Ssex, Birth FROM Student WHERE Class = '114072';SELECT COUNT(* FROM Student WHERE Class='114072';/*查詢學(xué)生的成績、學(xué)分*/ SELECT SC.Cno, Cname, Credit, Grade FROM Course, SC WHERE Sno = '20071000500' AND SC.Cno=Course.Cno;SELECT SUM(Credit FROM SC,Course WHERE Sno='20071000500' AND SC.Cno=Couse.Cno;/*查詢教師授課信息*/ SELECT Course.* FROM Course WHERE Tno='100123';SELECT Student.Sno,Sname,Class,Grade FROM Course,SC,Student WHERE Tno='100123' AND Course.Cno=SC.Cno AND SC.Sno=Student.Sno;
6、運(yùn)行維護(hù)
1、針對(duì)不同的應(yīng)用要求制定不同的轉(zhuǎn)儲(chǔ)計(jì)劃,一旦發(fā)生故障盡快將數(shù)據(jù)庫恢復(fù)到某種一致的狀態(tài),并
盡可能減少對(duì)數(shù)據(jù)庫的破壞;
2、根據(jù)實(shí)際情況修改數(shù)據(jù)庫原有的安全性、完整性控制;
3、在數(shù)據(jù)庫運(yùn)行過程中,監(jiān)督系統(tǒng)運(yùn)行,對(duì)監(jiān)測數(shù)據(jù)進(jìn)行分析,找出改進(jìn)系統(tǒng)性能的方法;
4、數(shù)據(jù)庫運(yùn)行一段時(shí)間后,由于記錄不斷增、刪、改,會(huì)使數(shù)據(jù)庫的物理存儲(chǔ)情況變壞,降低數(shù)據(jù)的 存取效率,數(shù)據(jù)庫性能下降。這時(shí)應(yīng)按原設(shè)計(jì)要求重新安排存儲(chǔ)位置、回收垃圾、減少指針鏈等,提高系 統(tǒng)性能。當(dāng)原有的數(shù)據(jù)庫設(shè)計(jì)不能滿足新的需求,需要重構(gòu)造數(shù)據(jù)庫,調(diào)整數(shù)據(jù)庫的模式和內(nèi)模式。
7、用戶手冊(cè)(<五號(hào)宋體>,具體內(nèi)容:使用、操作說明。)
8、附錄(<五號(hào)宋體>,源程序清單和結(jié)果:源程序必須有注釋,以及必要的測試數(shù)據(jù)和運(yùn)行結(jié)果數(shù)據(jù),提倡 用英文描述。)
第四篇:數(shù)據(jù)庫課程設(shè)計(jì) 計(jì)算機(jī)教務(wù)管理系統(tǒng)
中北大學(xué)
數(shù)據(jù)庫課程設(shè)計(jì)
說 明 書
學(xué) 院、系: 專
業(yè): 學(xué) 生 姓 名: 設(shè) 計(jì) 題 目:
李翰超
軟件學(xué)院 軟件工程
學(xué) 號(hào): 1221010619
計(jì)算機(jī)等級(jí)考試教務(wù)管理系統(tǒng)
起 迄 日 期: 2014年5月26日-2014年6月20日 指 導(dǎo) 教 師:
2012 年 6月 21 日.引言
隨著全國計(jì)算機(jī)等級(jí)考試的全面推廣,我市學(xué)生每年參加兩次全國計(jì)算機(jī)等級(jí)考試,考試管理工作量相當(dāng)大。但是靠人工的方式管理等級(jí)考試相關(guān)的信息,這種管理方式存在著許多缺點(diǎn),如:工作效率低、統(tǒng)計(jì)容易出錯(cuò),另外時(shí)間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于查找、更新和維護(hù)都帶來了不少的困難。所以開發(fā)一個(gè)計(jì)算機(jī)等級(jí)考試成績管理系統(tǒng)是非常必要的。2.需求分析
計(jì)算機(jī)等級(jí)考試分為若干種類:如:計(jì)算機(jī)一級(jí)VB、C語言;計(jì)算機(jī)二級(jí)VB、C語言、C++;計(jì)算機(jī)三級(jí)數(shù)據(jù)庫、網(wǎng)絡(luò)技術(shù);計(jì)算機(jī)四級(jí)數(shù)據(jù)庫工程師、網(wǎng)絡(luò)工程師。對(duì)于每個(gè)種類,考試分為筆試和機(jī)試.計(jì)算機(jī)等級(jí)考試工作過程如下:每個(gè)考生在報(bào)名時(shí),登記姓名、性別、報(bào)考種類、學(xué)校、身份證號(hào)、個(gè)人照片等??荚囖k公室根據(jù)考生報(bào)考的種類,以及所在的考區(qū)來安排考場,編排準(zhǔn)考證號(hào)碼,打印準(zhǔn)考證??忌鷧⒓涌荚嚭螅怯浢總€(gè)考生每項(xiàng)的成績,并計(jì)算出每個(gè)考生筆試和機(jī)試的成績是否都>=60分。對(duì)機(jī)試和筆試都>=60分的考生,按所在考區(qū)打印通過證書,同一考區(qū)按準(zhǔn)考證號(hào)碼順序打印出通過證書,分發(fā)給考生;計(jì)算機(jī)四級(jí)只要筆試成績>=60則通過;打印成績表供考試辦公室留存、備查。
開發(fā)計(jì)算機(jī)等級(jí)考試成績管理系統(tǒng),有計(jì)算機(jī)輔助實(shí)現(xiàn)上述過程,代替人工操作,節(jié)省人力、時(shí)間,提高工作效率。
2.1 處理對(duì)象(1)用戶帳號(hào)密碼管理 對(duì)考點(diǎn)代碼,考點(diǎn)名稱進(jìn)行管理 用戶與密碼進(jìn)行管理(2)報(bào)名管理功能模塊
報(bào)各庫錄入(姓名不能不空,之間不能有空格)增加、刪除、修改、瀏覽(3)準(zhǔn)考證管理模塊
準(zhǔn)考證生成規(guī)則:xxx+yy+zz+kk 其中XXX為考點(diǎn)代碼;YY為語言代碼,XX為考場號(hào),KK為座位號(hào)(4)考務(wù)管理功能模塊
考生信息查詢、瀏覽 成績管理模塊
成績數(shù)據(jù)錄入、接收
成績合成(總成績=筆試成績*0.6+上機(jī)成績*0.4),按大于或等于60合格
2.2數(shù)據(jù)字典:
考生信息表(考生主鍵(主鍵),姓名,性別,出生年份,民族,身份證號(hào),聯(lián)系地址,聯(lián)系電話,備注)
準(zhǔn)考證表(準(zhǔn)考證號(hào)主鍵,準(zhǔn)考證號(hào))
成績表(成績表主鍵,筆試成績,上機(jī)成績,總成績)
級(jí)別語言代碼表(級(jí)別語言代碼主鍵,級(jí)別語言代碼,級(jí)別,語言)考生考點(diǎn)信息表(考生考點(diǎn)主鍵,考點(diǎn)代碼,考點(diǎn)名稱,)用戶帳號(hào)管理(用戶帳號(hào)主鍵,用戶名,密碼)
信息操作表(考生主鍵(主鍵),準(zhǔn)考證號(hào)主鍵, 級(jí)別語言代碼主鍵,考生考點(diǎn)主鍵,用戶帳號(hào)主鍵)
3.E-R圖
4.關(guān)系模型
考生信息表(考生主鍵(主鍵),姓名,性別,出生年份,民族,身份證號(hào),聯(lián)系地址,聯(lián)系電話,備注)
準(zhǔn)考證表(準(zhǔn)考證號(hào)主鍵,準(zhǔn)考證號(hào))
成績表(成績表主鍵,筆試成績,上機(jī)成績,總成績)
級(jí)別語言代碼表(級(jí)別語言代碼主鍵,級(jí)別語言代碼,級(jí)別,語言)
考生考點(diǎn)信息表(考生考點(diǎn)主鍵,考點(diǎn)代碼,考點(diǎn)名稱,)用戶帳號(hào)管理(用戶帳號(hào)主鍵,用戶名,密碼)
信息操作表(考生主鍵(主鍵),準(zhǔn)考證號(hào)主鍵, 級(jí)別語言代碼主鍵,考生考點(diǎn)主鍵,用戶帳號(hào)主鍵)
其模式定義:
見附件:模式定義。
5.物理設(shè)計(jì)
本數(shù)據(jù)庫共有5張表組成,其中t_manage表為管理表,而其他4張表:t_grade,t_information,t_level,t_regist都為基本表,當(dāng)要查詢所需要的信息時(shí),就用連接查詢將管理表和基本表連接在一起,從而看到想看到信息。
6.數(shù)據(jù)庫實(shí)施
create table t_grade(grade number primary key, write number, shangji number, totalgrade number);alter table t_grade add constraint write check(write<=40 and write>=0);alter table t_grade add constraint shangji check(shangji<=60 and
shangji>=0);alter table t_grade add constraint totalgrade check
(totalgrade=write+shangji);
insert into t_grade values(001,40,50,90);insert into t_grade values(002,30,50,80);insert into t_grade values(003,20,60,80);insert into t_grade values(004,25,50,75);insert into t_grade values(005,30,40,70);create table t_information(information number, sname varchar2(20)not null, gender varchar2(2)check(gender='n' or gender='v'), birth number, nation varchar2(20)not null, idnumber char(18), address varchar2(20)not null, phone number not null, note varchar2(20),primary key(information));alter table t_information add constraint birth check(birth<=20020101 and
birth>=19200101);
insert into t_information values
(006,'ling','n',19950302,'han','***014','shanxi','0101111',null);insert into t_information values
(007,'wang','n',19950607,'han','***014','shanxi','0101241',null);insert into t_information values
(008,'john','n',19950504,'german','***014','german','010234511' ,'forgien');insert into t_information values
(009,'liu','v',19930407,'han','***014','shanxi','010123511',nul l);insert into t_information values
(010,'yuan','n',19910408,'han','***014','shanxi','0101211',null);create table t_level(leve number primary key, codes number not null, language varchar2(15)not null);insert into t_level values(015,01,'chinese');insert into t_level values(016,01,'chinese');insert into t_level values(017,02,'chinese');insert into t_level values(018,01,'english');insert into t_level values(019,01,'chinese');
create table t_regist(regist number, place varchar2(14), registnumber varchar2(9), primary key(regist));
insert into t_regist values(020,10101,'14010101');insert into t_regist values(021,10201,'14010102');insert into t_regist values(022,11101,'14010103');insert into t_regist values(023,12101,'14010104');insert into t_regist values(024,15103,'14010105');create table t_user(use number, username varchar2(14)not null, code varchar2(20)not null, primary key(use));
insert into t_user values(025,'ling','asasn');insert into t_user values(026,'wang','asasn');insert into t_user values(027,'john','sdrhy');insert into t_user values(028,'liu','eryery');insert into t_user values(029,'yuan','hjlmyu');
create table t_manage(information number, grade number, leve number, use number, regist number, foreign key(grade)references t_grade(grade), foreign key(information)references t_information(information), foreign key(leve)references t_level(leve), foreign key(regist)references t_regist(regist), foreign key(use)references t_user(use));
insert into t_manage values(006,001,015,025,020);5
insert into t_manage values(007,002,016,026,021);insert into t_manage values(008,003,017,027,022);insert into t_manage values(009,004,018,028,023);insert into t_manage values(010,005,019,029,024);
7.系統(tǒng)調(diào)試
通過sql語句對(duì)其進(jìn)行調(diào)試,以測試其正確性,如圖1,2,3,4,5
圖 1 6
圖 2
圖 3 7
圖 4 用自然連接查詢:
圖 5
8.心得體會(huì)
本次課程設(shè)計(jì)主要設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng),我的大體思路就是將基本信息錄入到基本表當(dāng)中,并保證沒有重復(fù)屬性,然后設(shè)計(jì)一個(gè)管理表,讓其它基本表參照這個(gè)管理表,這個(gè)管理表當(dāng)中只有各表主鍵,需要查看信息時(shí),就將兩表連接。。
這次課設(shè)我覺得有兩個(gè)難點(diǎn),一個(gè)是表間的參照,另一個(gè)是約束條件的設(shè)置,尤其是約束條件一定要充分考慮到,還有當(dāng)有那種范圍值的約束時(shí)要在建表后要用alter修改,而不是在定義時(shí)直接約束。
最后一點(diǎn)是關(guān)于主鍵的問題,主鍵最好別用學(xué)號(hào)什么的,最好應(yīng)該用連續(xù)的、無意義的數(shù)字,create sequence之后,每加一個(gè)元組就用一次nextval,這樣可以讓電腦自動(dòng)排號(hào)。
第五篇:數(shù)據(jù)庫課程設(shè)計(jì)之教務(wù)管理系統(tǒng)
源代碼:
CREATE DATABASE JWGL
/*建立教務(wù)管理系統(tǒng)*/ ON
(NAME = JWGL_Data,F(xiàn)ILENAME = 'e:sql_dataJwgl_Data.mdf', SIZE = 20, MAXSIZE = 500, FILEGROWTH = 25%)LOG ON
(NAME = JWGL_LOG,F(xiàn)ILENAME = 'e:sql_dataJwgl_Log.ldf', SIZE = 10, MAXSIZE = 100, FILEGROWTH = 1%);
CREATE TABLE Student
/*建立學(xué)生表*/(Sno CHAR(8)PRIMARY KEY NOT NULL, Sname VARCHAR(10)NOT NULL,Sex CHAR(2)CHECK(Sex IN('男','女'))NOT NULL,Age TINYINT CHECK(Age BETWEEN 15 AND 30)NOT NULL, Phonenumber CHAR(12)UNIQUE, Sdept VARCHAR(20)NOT NULL,);
CREATE TABLE Course
/*建立課程表*/(Cno CHAR(10)PRIMARY KEY NOT NULL, Cname VARCHAR(20)UNIQUE NOT NULL,Total_perior TINYINT CHECK(Total_perior BETWEEN 32 AND 108),/*總學(xué)時(shí)*/ Week_perior TINYINT CHECK(Week_perior BETWEEN 2 AND 7),/*周學(xué)時(shí)*/ Credit TINYINT CHECK(Credit BETWEEN 1 AND 7)NOT NULL,/*學(xué)分*/ Pcno CHAR(10)/*先修課*/);
CREATE TABLE SC
/*建立學(xué)生選課表*/(Sno CHAR(8)NOT NULL, Cno CHAR(10)NOT NULL,Grade TINYINT CHECK(Grade BETWEEN 1 AND 100), PRIMARY KEY(Sno,Cno),F(xiàn)OREIGN KEY(Sno)REFERENCES Student(Sno), FOREIGN KEY(Cno)REFERENCES Course(Cno));
DROP TABLE Student
/*刪除學(xué)生表*/ DROP TABLE Course
/*刪除課程表*/ DROP TABLE SC
/*刪除學(xué)生選課表*/
INSERT
/*向?qū)W生表中插入數(shù)據(jù)*/ INTO Student
VALUES('04111020','張倩','女',19,'***','計(jì)算機(jī)');INSERT
INTO Student
VALUES('04111021','張花','女',20,'***','信息');INSERT
INTO Student
VALUES('04111022','李強(qiáng)','男',20,'***','英語');INSERT
INTO Student
VALUES('04111023','王若','女',19,'***','計(jì)算機(jī)');INSERT
INTO Student
VALUES('04111024','小淼','男',20,'***','信息');INSERT
INTO Student
VALUES('04111025','李新','男',20,'***','英語');INSERT INTO Student
VALUES('04111026','劉浮','男',19,'***','信息');INSERT
INTO Student
VALUES('04111027','二毛','男',20,'***','英語');INSERT
INTO Student
VALUES('04111028','朱琪','女',19,'***','計(jì)算機(jī)');INSERT
INTO Student
VALUES('04111029','小馬','男',20,'***1','信息');INSERT
INTO Student
VALUES('04111030','吳欣','女',20,'***','英語')
INSERT
/*向課程表中插入數(shù)據(jù)*/ INTO Course
SELECT '0011','數(shù)據(jù)結(jié)構(gòu)','64','2','3','c語言'
UNION SELECT '0012','數(shù)據(jù)庫','64','2','3','離散數(shù)學(xué)' UNION SELECT '0013','信息管理','64','2','3','計(jì)算機(jī)基礎(chǔ)' UNION SELECT '0014','專業(yè)英語','64','2','4','基礎(chǔ)英語' UNION SELECT '0015','電氣學(xué)','64','2','4','電子科技'
INSERT
/*向?qū)W生選課表中插入數(shù)據(jù)*/ INTO SC
SELECT '04111020','0011','90' UNION SELECT '04111020','0012','87' UNION SELECT '04111022','0012','85' UNION SELECT '04111022','0015','76' UNION SELECT '04111023','0014','69' UNION SELECT '04111024','0013','90' UNION SELECT '04111025','0011','92' UNION SELECT '04111026','0011','83' UNION SELECT '04111027','0012','87' UNION SELECT '04111027','0013','79' UNION SELECT '04111028','0011','88' UNION SELECT '04111028','0014','85' UNION SELECT '04111029','0012','97' UNION SELECT '04111030','0013','69' UNION SELECT '04111028','0015','88'
CREATE TABLE Student_temp
/*建立 Student_temp空表*/(Sno CHAR(8)PRIMARY KEY NOT NULL, Sname VARCHAR(10)NOT NULL,Sex CHAR(2)CHECK(Sex IN('男','女'))NOT NULL,Age TINYINT CHECK(Age BETWEEN 15 AND 30)NOT NULL, Phonenumber CHAR(12)UNIQUE, Sdept VARCHAR(20)NOT NULL,);
INSERT INTO
Student_temp
/*在Student_temp表中保存計(jì)算機(jī)系所有學(xué)生的情況*/ SELECT * FROM Student
WHERE Sdept = '計(jì)算機(jī)';
ALTER TABLE Student ADD Address CHAR(20);
/*向Student表中插入地址列*/
DELETE FROM SC
/*刪除計(jì)算機(jī)系學(xué)生的選課記錄*/ WHERE Sno IN(SELECT Sno FROM Student
WHERE Sdept ='計(jì)算機(jī)');
UPDATE Student
/*將每個(gè)學(xué)生的年齡增加1歲*/ SET Age=Age+1;UPDATE
SC SET Grade=0 WHERE Sno IN(SELECT Sno FROM Student
WHERE Sdept = '計(jì)算機(jī)');
SELECT Sno,Sname,Sdept
/*查詢學(xué)生表中所有學(xué)生的學(xué)號(hào)、姓名、所在系*/ FROM Student;
SELECT *
/*查詢學(xué)生表中的所有信息*/ FROM Student;
SELECT Sname,2013-Age AS Birthday
/*查詢學(xué)生表中所有學(xué)生的出生年份,用2013-Age的值作為Birthday的列值*/ FROM Student;
SELECT *
/*查詢課程表中的所有信息*/ FROM Course;
SELECT *
/*查詢學(xué)生選課表中的所有信息*/ FROM SC;
SELECT DISTINCT Sno
/*查詢所有選了課程的學(xué)生的學(xué)號(hào)*/ FROM SC;
SELECT Sno,Sname
/*查詢計(jì)算機(jī)系所有學(xué)生的學(xué)號(hào)和姓名*/ FROM Student
WHERE Sdept ='計(jì)算機(jī)';
SELECT Sno
/*查詢考試成績?cè)?0分以上的學(xué)生學(xué)號(hào)*/ FROM SC
WHERE Grade >=80;
SELECT Sname,Sdept,Age /*查詢年齡在20-23歲的學(xué)生姓名、所在系和年齡*/ FROM Student
WHERE Age >=20 AND Age <=23;
SELECT Sname,Sdept,Age,Sex /*查詢計(jì)算機(jī)和英語系的學(xué)生姓名、年齡和性別*/ FROM Student
WHERE Sdept IN('計(jì)算機(jī)','英語');
SELECT Sname,Sdept,Age,Sex /*查詢不是計(jì)算機(jī)和英語系的學(xué)生姓名、年齡和性別*/ FROM Student
WHERE Sdept NOT IN('計(jì)算機(jī)','英語');
SELECT *
/*查詢信息系所有學(xué)生的情況*/ FROM Student
WHERE Sdept LIKE '信息';
SELECT *
/*查詢姓張的學(xué)生所有信息*/ FROM
Student
WHERE Sname LIKE '張%';
SELECT
Cno,Credit
/* 查詢'數(shù)據(jù)結(jié)構(gòu)'課程的課程號(hào)和學(xué)分*/ FROM Course
WHERE Cname LIKE '數(shù)據(jù)結(jié)構(gòu)';
SELECT Sno,Cno
/*查詢沒有考試成績的課程后和學(xué)分*/ FROM SC
WHERE Grade IS NULL;
SELECT *
/*查詢?nèi)w學(xué)生的信息,查詢結(jié)果按所在系的升序排列,同一系中的學(xué)生按年齡降序排列*/ FROM Student
ORDER BY Sdept ,Age DESC;
SELECT AVG(Grade)AS '平均成績'
/*查詢選修'0014'號(hào)課程的學(xué)生的平均分*/ FROM SC
WHERE Cno ='0014';
SELECT MIN(DISTINCT Grade)AS '最低分' /*查詢成績表中的最低分*/ FROM SC;
SELECT COUNT(*)AS'總?cè)藬?shù)'
/*統(tǒng)計(jì)學(xué)生總?cè)藬?shù)*/ FROM Student;
SELECT COUNT(DISTINCT Sno)/*統(tǒng)計(jì)選修了課程的學(xué)生人數(shù)*/ FROM SC;
SELECT Cno ,COUNT(Sno)/*查詢每門課程的課程號(hào)及選課人數(shù)*/ FROM SC GROUP BY Cno;
SELECT Student.*,SC.*
/*查詢每個(gè)學(xué)生及其選修課的情況*/ FROM Student ,SC
WHERE Student.Sno=SC.Sno;
SELECT Student.Sno,Sname,Grade
/*查詢選修了'數(shù)據(jù)庫'課程并且成績?cè)?5分以上的學(xué)生的學(xué)號(hào)和姓名*/
FROM Student ,Course,SC
WHERE Student.Sno = SC.Sno AND SC.Cno
= Course.Cno AND Cname = '數(shù)據(jù)庫'AND Grade>85;
SELECT Sno,Sname
/*查詢和王若在同一個(gè)系學(xué)習(xí)的學(xué)生的學(xué)號(hào)和姓名*/ FROM Student
WHERE Sdept =
(SELECT Sdept
FROM Student
SELECT Sname ,Age
/*查詢其他系中比英語系某一學(xué)生年齡小的學(xué)生是姓名和年齡*/ FROM Student
WHERE Sdept <>'英語'
AND AGE FROM Student WHERE Sdept ='英語'); SELECT Sname /*查詢選修了0014號(hào)課程的學(xué)生的姓名*/ FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno =Student.Sno AND Cno='0014'); SELECT Cno FROM Course UNION ALL /*ALL表示合并兩個(gè)查詢輸出的全部記錄,沒有ALL表示結(jié)果中不包含重復(fù)行*/ SELECT Cno FROM SC ORDER BY Cno; CREATE PROCEDURE Student_Course /*在學(xué)生-課程數(shù)據(jù)庫中創(chuàng)建存儲(chǔ)過程,查看和'小馬'有關(guān)的基本信息及選修課程*/ AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,Course,SC WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Sno AND Sname='王若' IF EXISTS(SELECT name FROM sysobjects WHERE name='Student_Course' AND type='P') DROP PROCEDURE Student_Course;WHERE Sname = '王若');EXECUTE Student_Course;/*查看存儲(chǔ)的信息*/ SELECT Sno /*查詢選修'0012'或'0015'號(hào)課程的所以學(xué)生的學(xué)號(hào)*/ FROM SC WHERE Cno='0012' UNION SELECT Sno FROM SC WHERE Cno='0015'; CREATE UNIQUE INDEX Stusno ON Student(sno);/*建立索引*/ CREATE UNIQUE INDEX Coucon ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Grade DESC); drop index Stusno ON Student/*刪除索引*/ drop index Coucon ON Course drop index SCno ON SC CREATE VIEW C_Student /*建立計(jì)算機(jī)系學(xué)生的視圖,進(jìn)行修改和插入操作時(shí)只能對(duì)計(jì)算機(jī)系的學(xué)生操作*/ AS SELECT Sno,Sname,Sex,Age FROM Student WHERE Sdept='計(jì)算機(jī)' WITH CHECK OPTION CREATE VIEW Student_Course_0013(Sno,Sname,Sex,Age,Grade)/*建立選擇0013號(hào)課程并且成績?cè)?0分以上的學(xué)生視圖*/ AS SELECT Student.Sno,Sname,Sex,Age,Grade FROM Student,SC WHERE Student.Sno=SC.Sno AND Grade>=80 AND Cno='0013' CREATE VIEW Student_Birth(Sno,Sname,Sbirth)/*建立反應(yīng)學(xué)生出生年份的視圖*/ AS SELECT Sno,Sname,2013-Age FROM Student CREATE PROCEDURE student_count/*創(chuàng)建一個(gè)存儲(chǔ)過程,返回選修某門課程的學(xué)生人數(shù)*/ @CourseName VARCHAR(20), @StudentSum INT OUTPUT AS SELECT @StudentSum=COUNT(*)FROM Course ,SC WHERE Course.Cno=SC.Cno AND Cname =@CourseName; drop procedure student_count;/* DELCARE @StudentSum INT; EXECUTE student_count '專業(yè)英語',@StudentSum output;SELECT 'the result is:',@Student_Sum;*/ CREATE PROCEDURE student_course1 /*通過參數(shù)@StudentName將指定學(xué)生的姓名傳遞給存儲(chǔ)過程*/ @StudentName VARCHAR(10)AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,Course,SC WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Sname=@StudentName; EXECUTE student_course1 '小馬';/*調(diào)用存儲(chǔ)過程*/ /*刪除視圖*/ DROP VIEW C_Student; DROP VIEW Student_Course_0013;DROP VIEW Student_Birth; CREATE TRIGGER student_change/*創(chuàng)建觸發(fā)器,當(dāng)學(xué)生表中的記錄被更新時(shí),顯示表中的所有記錄*/ ON Student AFTER INSERT,UPDATE,DELETE AS SELECT * FROM Student; CREATE TRIGGER sc_insert3 ON SC /*在SC表上創(chuàng)建觸發(fā)器,當(dāng)向SC表中添加學(xué)生的選課記錄時(shí),檢查學(xué)生的學(xué)號(hào)是否存在。若不存在,不能插入改條記錄*/ AFTER INSERT AS IF(SELECT COUNT(*)FROM Student ,inserted WHERE Student.Sno=inserted.Sno)=0 BEGIN PRINT'學(xué)號(hào)不存在,不能插入記錄' ROLLBACK TRANSACTION END; INSERT INTO SC VALUES('04111098','0015',73) ALTER TABLE SC /*刪除觸發(fā)器*/ DISABLE TRIGGER sc_insert2