第一篇:教务管理系统 数据库实例设计
第17章 数据库系统设计实例
本章以一个考务管理系统的设计过程为例,介绍在VB 6.0+SQL Server 2000环境中开发数据库系统的一般方法。
17.1 系统概述
17.1.1 系统功能
本系统用于从考生报名、产生准考证到录取考生和打印成绩单即对考生考试和录取全过程进行管理的考务系统,包含主要功能如下:
考生报名,按报名顺序产生报名号
产生准考生号和以紧凑方式打印准考证 输入考生考试成绩和输入录取合格标准 根据合格标准录取上线考生 打印考生成绩单和考生录取通知书 设置系统用户和系统初始化
17.1.2 设计技巧
本系统设计中的一些技巧如下: 公共模块设计(参见17.4节的Module1.Bas模块)SQL Server数据库设计(参见17.3节)VB菜单设计方法(包括菜单项的有效性设计,对于“一般操作员”,使若干菜单项无效。参见menu多文档窗体设计过程)统一的数据编辑设计方法:以ksb表为例进行说明:为了编辑其记录,设计了edks窗体,在其中的DataGrid数据网格控件中显示所有已输入的考生记录。用户可以先通过“设置条件”框架查找到满足指定条件的考生记录,然后选择“修改”或“删除”命令按钮进行考生记录的修改或删除,或者选择“添加”命令按钮输入新的考生记录。 VB报表设计方法(包括使用Data Report设计器和PrintForm方法)图像数据的存取方法(参见edks窗体设计过程)事件编程技术:一些数据编辑窗体(如edks等窗体)上有两个事件过程即Load和Activate,它们的执行过程是:在启动本窗体时先执行Load(仅执行一次)事件过程,
第二篇:数据库程序设计---教务辅助管理系统
数据库设计实例 教务管理系统
数据库实验七 数据库设计
题目要求:
设计一个教务管理系统。要求管理包括:学生的档案,学生选课的情况,学生每学期的综合测评,教师档案,教师工作量等等。具体考核方法根据自己了解的实际情况处理。
假设此次设计的教务系统是整个学生管理系统数据库中的一部分,整个系统至少还包括学籍管理等其他子系统。
在初期设计时,先关注与教务系统有关的数据。在完成对教务管理系统的建模后再对整个系统进行合并,总终得到整个系统的设计方案。
一、需求分析
1、根据分析可以画出该教务管理系统的数据流图:
学生 选课 上课 考试 测评 选课单 允许考试 成绩单 老师档案 课程简介 教室安排 试卷 考场安排 测评报告单 学生名单 教师 选定教材 申报 课表
2、数据字典
数据结构:学生
含义说明:是教务管理系统的一个核心数据结构,定义了学生的有关信息
组成:学号、姓名
数据项:学号
含义说明:唯一标识每一个学生
别名:学生编号 类型:字符型 长度:9位
取值范围:190000000 – 999999999
取值含义:前四位表明学生所在年级,后五位安顺序编号
数据项:姓名
含义说明:表示学生的姓名 类型:字符型 长度:10位
取值范围:任意字符
数据结构:教师
含义说明:教务管理系统的核心数据结构之一,定义了教师的有关信息 组成:教师号,教师姓名
数据项:教师号
含义说明:教师的编号 类型:字符型 长度:5位
取值范围:10000 – 99999
数据项:教师姓名
含义说明:教师的姓名 类型:字符型 长度:10位
取值范围:任意合法的字符
数据结构:课程
含义说明:教务管理系统的核心数据结构之一,定义了课程的有关信息 组成:课程号,课程名,课程描述,教师,教室,教科书,学分
数据项:课程号
含义说明:课程的编号 类型:字符型 长度:4
取值范围:0001 – 9999
数据项:课序号
含义说明:对于同一课程,由不同老师教授,用课序号来区分 类型:字符型 长度:2
取值范围:01 – 99
数据项:课程名
含义说明:课程的名称 类型:字符型 长度:10
取值范围:任意合法的字符
数据项:课程描述
含义说明:课程内容的基本描述 类型:字符型 长度:200
取值范围:任意合法字符
数据项:教科书
含义说明:课程所用的教科书 类型:字符型 长度:20
取值范围:任意合法字符
数据项:学分
含义说明:课程的学分 类型:整型 长度:1
取值范围:1-9
数据结构:教室
含义说明:上课所用的教室
组成:教室编号,教室地址,教室容量
数据项:教室编号
含义说明:教室的编号 类型:字符 长度:5
取值范围:00001-99999
数据项:教室地址
含义说明:标明教室的地址 类型:字符 长度:30
取值范围:任意合法的字符
数据项:教室容量
含义说明:教室的容纳学生的数量 类型:整型
取值范围:正整数
数据结构:选课记录
含义说明:纪录学生选课的纪录 组成:学生,课程,成绩
数据项:成绩
含义说明:选课学生本学期的成绩
类型:浮点数
范围:0.0 – 100.0
处理过程:分配教室
说明:为所有课程分配上课教室 输入:课程,教室 输出:教室安排
处理:学期课程决定后,要为每个课程安排上课地点,要求上课的地点不能冲突且上课人数不能超过教室容量。
处理过程:分配考场
说明:在考试日期,为所有课程分配考场
输入:课程,教室
输出:考场安排
处理:为每个课程安排考场,考试时间和地点不能冲突且考试人数不能超过考场容量。
数据存储:成绩单
说明:记录学生本学期所有课程成绩 流入数据流:学生所有的选课记录 流出数据流:学生的成绩单 数据量:由学生的人数决定 存取方式:随机存取
二、概念结构设计
1、根据需求分析画出E-R图:
选修 学生 教师 课程 m n 讲授 1 n 教科书 n
成绩 教室 开设 1 n
2、根据E-R图写出各个实体的属性描述
学生:{学号,姓名}
课程:{课程号,课程名,课程描述,学分} 教师:{教师号,教师名,课程数} 教室:{教室编号,地址,容量}
3、视图的集成
假设在学生管理系统的学籍管理系统中存在另一个学生实体,其中还包括以下信息:性别,所属专业,所属班级。为了使两个实体保持一致,对两个实体取并集得到新的学生实体: 学生:{学号,姓名,性别,专业,班级}
三、逻辑结构设计
1、由E-R图向数据模型的转换
一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。所以,E-R图中的属性描述可直接转换为相应的关系模式。
2、对于剩余的一对多和多对多联系可以如下表示
学生-课程:{学号,课程号,课序号,成绩} 课程-教师:{课程号,课序号,教师号} 课程-教科书:{课程号,课序号,教科书}
教室-课程:{教室号,时间,课程号,课序号}
其中 课程-教师 与 课程-教科书 具有相同的主码,可以合并成一个关系 教学:{课程号,课序号,教师号,教科书}
最后得到的关系模式为
学生:{学号,姓名,性别,专业,班级} 课程:{课程号,课程名,课程描述,学分} 教师:{教师号,教师名,课程数} 教室:{教室号,地址,容量}
学生-课程:{学号,课程号,课序号,成绩} 教学:{课程号,课序号,教师号,教科书} 教室-课程:{教室号,时间,课程号,课序号}
3、用户外模式
根据需求,为计算综合测评增加一个外模式,因为综合测评只在学期末进行,查询次数不多,所以没有必要用冗余的方法来提高查询效率,只需要建立一个外模式视图即可。
测评{学号,学生姓名,平均成绩}
4、根据设计写出相应的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
--级联更新
ON DELETE CASCADE,--级联删除
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))
为进行综合测评增加一个外模式 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
为了符合数据的参照完整性约束,避免学生选课的时候选择一个不存在的课程号-课序号组,增加一个外键约束。ALTER TABLE sc
ADD CONSTRAINT fk_sc_tech FOREIGN KEY(Cno,SCno)REFERENCES tech(Cno,SCno)
ON UPDATE CASCADE
ON DELETE CASCADE
为了在插入一个新课程时能级联更新教师的工作量,增加一个触发器。此任务也可以通过建立一个外模式视图来动态统计,为了练习的目的这里采用了触发器
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 关于课程容量:如何保证选课的学生数量不超过教室的容量?
初步解决办法是:在学生选课时建立暂时不考虑容量问题,都加渗透一个临时的SC表中。然后,在选课结束后将未超额的记录直接加渗透SC表,超额的课程进行抽签,将命中部分学生的选课记录插入SC表,直到人数符合课程容量的要求为止。
抽签的功能较适合用顶层的高级语言来实现。在选课结束后,选超额课程的学生需登陆选课系统进行抽签,抽签的过程可以使用概率算法,如果抽中,系统再将选课记录插入SC表,否则就从临时表中删除。所以,在数据库系统中,没有对SC表的插渗入渗出操作进行约束。
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/lesky/archive/2006/12/25/1460 966.aspx
数据库设计---教务管理系统
2009年12月03日 星期四 11:04 P.M.题目要求:
设计一个教务管理系统。要求管理包括:学生的档案,学生选课的情况,学生每学期的综合测评,教师档案,教师工作量等等。具体考核方法根据自己了解的实际情况处理。
假设此次设计的教务系统是整个学生管理系统数据库中的一部分,整个系统至少还包括学籍管理等其他子系统。
在初期设计时,先关注与教务系统有关的数据。在完成对教务管理系统的建模后再对整个系统进行合并,总终得到整个系统的设计方案。
一、需求分析
1、根据分析可以画出该教务管理系统的数据流图: 学生
选课
上课
考试
测评
选课单
允许考试
成绩单
老师档案
课程简介
教室安排
试卷
考场安排
测评报告单 学生名单
教师
选定教材
申报
课表
2、数据字典 数据结构:学生
含义说明:是教务管理系统的一个核心数据结构,定义了学生的有关信息 组成:学号、姓名 数据项:学号
含义说明:唯一标识每一个学生 别名:学生编号 类型:字符型 长度:9位
取值范围:190000000 – 999999999
取值含义:前四位表明学生所在年级,后五位安顺序编号 数据项:姓名
含义说明:表示学生的姓名 类型:字符型 长度:10位 取值范围:任意字符
数据结构:教师 含义说明:教务管理系统的核心数据结构之一,定义了教师的有关信息
组成:教师号,教师姓名
数据项:教师号
含义说明:教师的编号
类型:字符型
长度:5位
取值范围:10000 – 99999
数据项:教师姓名
含义说明:教师的姓名
类型:字符型
长度:10位
取值范围:任意合法的字符
数据结构:课程
含义说明:教务管理系统的核心数据结构之一,定义了课程的有关信息 组成:课程号,课程名,课程描述,教师,教室,教科书,学分
数据项:课程号 含义说明:课程的编号 类型:字符型 长度:4 取值范围:0001 – 9999 数据项:课序号
含义说明:对于同一课程,由不同老师教授,用课序号来区分 类型:字符型 长度:2
取值范围:01 – 99 数据项:课程名 含义说明:课程的名称 类型:字符型 长度:10
取值范围:任意合法的字符 数据项:课程描述
含义说明:课程内容的基本描述 类型:字符型 长度:200
取值范围:任意合法字符 数据项:教科书
含义说明:课程所用的教科书 类型:字符型 长度:20
取值范围:任意合法字符 数据项:学分 含义说明:课程的学分 类型:整型 长度:1 取值范围:1-9 数据结构:教室
含义说明:上课所用的教室
组成:教室编号,教室地址,教室容量 数据项:教室编号 含义说明:教室的编号 类型:字符 长度:5
取值范围:00001-99999 数据项:教室地址 含义说明:标明教室的地址 类型:字符 长度:30
取值范围:任意合法的字符 数据项:教室容量
含义说明:教室的容纳学生的数量 类型:整型 取值范围:正整数 数据结构:选课记录
含义说明:纪录学生选课的纪录 组成:学生,课程,成绩
数据项:成绩
含义说明:选课学生本学期的成绩
类型:浮点数 范围:0.0 – 100.0 处理过程:分配教室
说明:为所有课程分配上课教室 输入:课程,教室 输出:教室安排
处理:学期课程决定后,要为每个课程安排上课地点,要求上课的地点不能冲突且上课人数不能超过教室容量。
处理过程:分配考场
说明:在考试日期,为所有课程分配考场
输入:课程,教室
输出:考场安排
处理:为每个课程安排考场,考试时间和地点不能冲突且考试人数不能超过考场容量。
数据存储:成绩单
说明:记录学生本学期所有课程成绩 流入数据流:学生所有的选课记录 流出数据流:学生的成绩单 数据量:由学生的人数决定 存取方式:随机存取
二、概念结构设计
1、根据需求分析画出E-R图:
选修
学生
教师
课程
m n 讲授 n 教科书
n 成绩
教室
开设 n
2、根据E-R图写出各个实体的属性描述 学生:{学号,姓名}
课程:{课程号,课程名,课程描述,学分} 教师:{教师号,教师名,课程数} 教室:{教室编号,地址,容量}
3、视图的集成
假设在学生管理系统的学籍管理系统中存在另一个学生实体,其中还包括以下信息:性别,所属专业,所属班级。为了使两个实体保持一致,对两个实体取并集得到新的学生实体: 学生:{学号,姓名,性别,专业,班级}
三、逻辑结构设计
1、由E-R图向数据模型的转换
一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。所以,E-R图中的属性描述可直接转换为相应的关系模式。
2、对于剩余的一对多和多对多联系可以如下表示 学生-课程:{学号,课程号,课序号,成绩} 课程-教师:{课程号,课序号,教师号} 课程-教科书:{课程号,课序号,教科书} 教室-课程:{教室号,时间,课程号,课序号}
其中 课程-教师 与 课程-教科书 具有相同的主码,可以合并成一个关系 教学:{课程号,课序号,教师号,教科书} 最后得到的关系模式为
学生:{学号,姓名,性别,专业,班级} 课程:{课程号,课程名,课程描述,学分} 教师:{教师号,教师名,课程数} 教室:{教室号,地址,容量}
学生-课程:{学号,课程号,课序号,成绩} 教学:{课程号,课序号,教师号,教科书} 教室-课程:{教室号,时间,课程号,课序号}
3、用户外模式
根据需求,为计算综合测评增加一个外模式,因为综合测评只在学期末进行,查询次数不多,所以没有必要用冗余的方法来提高查询效率,只需要建立一个外模式视图即可。测评{学号,学生姓名,平均成绩}
4、根据设计写出相应的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--级联更新 ON DELETE CASCADE,--级联删除 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))
为进行综合测评增加一个外模式 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
为了符合数据的参照完整性约束,避免学生选课的时候选择一个不存在的课程号-课序号组,增加一个外键约束。ALTER TABLE sc
ADD CONSTRAINT fk_sc_tech FOREIGN KEY(Cno,SCno)REFERENCES tech(Cno,SCno)ON UPDATE CASCADE ON DELETE CASCADE
为了在插入一个新课程时能级联更新教师的工作量,增加一个触发器。此任务也可以通过建立一个外模式视图来动态统计,为了练习的目的这里采用了触发器 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 关于课程容量:如何保证选课的学生数量不超过教室的容量?
初步解决办法是:在学生选课时建立暂时不考虑容量问题,都加入一个临时的SC表中。然后,在选课结束后将未超额的记录直接加入SC表,超额的课程进行抽签,将命中部分学生的选课记录插入SC表,直到人数符合课程容量的要求为止。
抽签的功能较适合用顶层的高级语言来实现。在选课结束后,选超额课程的学生需登陆选课系统进行抽签,抽签的过程可以使用概率算法,如果抽中,系统再将选课记录插入SC表,否则就从临时表中删除。
所以,在数据库系统中,没有对SC表的插入操作进行约束。
第三篇:数据库实习报告-教务管理系统.
数据库系统课程设计 学生姓名: 班 学 号: 指导教师:
教务管理系统
1、需求分析 1.1 信息要求: 教务管理系统涉及的实体有: ●教师——工作证号、姓名、职称、电话等;●学生——学号、姓名、性别、出生年月等;●班级——班号、最低总学分等;
●系——系代号、系名和系办公室电话等;●课程——课序号、课名、学分、上课时间及名额等。这些实体之间的联系如下: ●每个学生都属于一个班,每个班都属于一个系,每个教师也都属于一个系。●每个班的班主任都由一名教师担任。
●一名教师可以教多门课,一门课可以有几位主讲老师,但不同老师讲的同一门课其课序号是不同 的(课序号是唯一的。
●一名同学可以选多门课,一门课可被若干同学选中。●一名同学选中的课若已学完,应该记录有相应成绩。
●本单位学生、教师都有重名,工作证号、学号可以作为标识。1.2 处理要求: 教学系统主要提供数据维护、选课和信息查询。其中常见的查询有:系统中各对象的基本信息查询。查 询指定班、系的学生信息(名单、人数等。查询学生的成绩、学分情况。查询教师授课情况和学生选课情 况„„。
1.3 安全性与完整性要求: ●安全性要求: 1.系统应设置访问用户的标识以鉴别是否是合法用户, 并要求合法用户设置其密码, 保证用户身份不被 盗用;2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如学生,教师,系统管理员。
●完整性要求: 1.各种信息记录的完整性,关键信息记录内容不能为空;2.各种数据间相互的联系的正确性;3.相同的数据在不同记录中的一致性。1.4 系统功能的设计和划分
根据如上得到的用户需求,我们将本系统按照所完成的功能分成以下几部分: 第一部分:用户管理部分 第二部分:管理员管理部分 各部分完成的功能如下:
1、用户管理部分
1、处理用户注册
2、处理用户登录
3、用户可以查询学生信息。
4、用户可以查询快件信息。
5、用户可以提交与查询报修信息。
6、用户可以插入与删除用户自己的离返校信息。
7、用户可以修改用户自己密码。
2、管理员管理部分
1、处理管理员登录
2、管理员可以查询学生信息。
3、管理员可以发布与更新快件信息。
4、管理员可以插入、修改与查询报修信息。
5、管理员可以插入与查询学生夜归信息。
6、管理员可以查询在校与离校学生信息。
7、管理员可以修改管理员密码。
2、概念设计(1 概念模型(E-R 图 :
选修联系的分 E-R 图 负责联系的分 E-R 图
授课联系的分 E-R 图
教务管理系统的总 E-R 图(2 数据字典 :
(3数据流图
查询 课程信息 课程信息表 课程信息 查询 课 程 成绩信息 信 息 教师 学 生 选课信息信 息 查询学 生信息 修改教 师信息 教 师 信 息 系 信 息 课 程 选课信息 信 息 学生 学 生 信 息 选课信息 修改学 教 师 信 息 生信息 查询教 师信息 选课信息 选课 已 选 课 信 息 成绩信息 选 课 表 登记 成绩 成 绩 信 息 查询 选课信息 选课信息 查询 系 信 息 班 级 信 息 学生信息 学生信息表 教师信息 教师信息表 学生信息 教师信息 班 级 信 息 班级信息 查询 系信息 班级信息表 系信息表 总 数 据 流 图 班级信息 查询 系信息
3、逻辑结构设计
-R 图向关系模型的转换(关系的码用下横线表出)教师(工作证号,姓名,职称,电话,系代号)代码表示:Teacher(Tno, Tname, Title, Tel, Dno 此为“教师”实体对应的关系模式。其中 1:n 联系“工作”与此关系模式合并,Dno 为外码。存在的函数 依赖为 Tno →(Tname,Title,Tel,Dno),且不存在多值依赖,所以满足 4NF。学生(学号,姓名,性别,出生年月,班号)代码表示:Student(Sno, Sname, Ssex, Sbirth, Class 此为“学生”实体对应的关系模式。其中 1:n 联系“属于”与此关系模式合并,Class 为外码。存在的函数 依赖为 Sno →(Sname,Ssex,Sbirth,Class),且不存在多值依赖,所以满足 4NF。系(系代号,系名,系办公室电话)代码表示:Department(Dno, Dname, Dphone 此为“系”实体对应的关系模式。存在的函数依赖为 Dno →(Dname,Dphone),且不存在多值依赖,所 以满足 4NF。课程(课序号,课名,学分,上课时间,名额,工作证号)代码表示:Course(Cno, Cname, Credit, Ctime, Cnum, Tno 此为“课程”实体对应的关系模式。其中 1:n 联系“授课”与此关系模式合并,Tno 为外码。存在的函数 依赖为 Cno →(Cname,Credit,Ctime,Cnum,Tno),且不存在多值依赖,所以满足 4NF。选课(学号,课序号,成绩)代码表示:SC(Sno, Cno, Grade 此为 m: 联系 n “选修” 所对应的关系模式。Sno 和 Cno 均为外部码。存在的函数依赖为完全函数依赖(Sno,Cno)→ Grade,且不存在多值依赖,所以满足 4NF。班级(班号,最低总学分,工作证号,系代号)代码表示:Class(Class, TotalCredit, Tno, Dno 此为“班级”实体对应的关系模式。其中 1:n 联系“属于”和 1:1 联系“负责”与此关系模式合并,Tno 和 Dno 为外码。该关系模式中存在传递函数依赖:Class → Tno,(Tno Class,Tno → Dno,可得 Class → Dno,故 Class 不属于
3NF。解决方法是将其模式分解为:Class(Class, TotalCredit, Tno 和 T-D(Tno, Dno,分解后的关系模式满足 4NF,并且 T-D 与 Teacher 的码相同,可合并为同一模式。但 是考虑到系统要经常进行系的学生信息查询,此时就不得不对 Student、Class 和 Teacher 三个表进行连接 查询,而连接是影响查询效率的主要原因,所以取消对 Class 的模式分解。此时 Class 关系模式满足 2NF。
设计用户子模式 为了方便程序查询,建立了如下用户视图:
1、某系的学生信息视图(学号,姓名,性别,出生年月,班号)
2、某系的教师信息视图(工作证号,教师姓名,职称,电话,负责班级)
3、某课程的学生成绩单(学号,姓名,班级,成绩)
4、教师授课信息表(工作证号,教师姓名,职称,教授课程,学分,上课时间)
5、学生已选课表(课序号,课名,学分,授课教师,上课时间,名额)
4、物理设计 4.1 选择存取方法
1、数据库管理系统自动在每个表的主码上建立索引,通常为 B + 树索引。
2、在 Student 表 Sname 列上建立 Stu_name 索引,因为查询操作很多都使通过学生姓名进行的。
3、在 Teacher 表 Tname 列上建立 Tea_name 索引,因为查询操作很多都使通过教师姓名进行的。4.2 确定数据库的存储结构
1、为了提高系统性能,根据具体情况将数据的易变部分与稳定部分、经常存取部分和存取频率较低部 分分开存放。
2、DBMS 产品一般都提供了一些系统配置变量、存储分配参数,根据应用环境确定这些参数值,并且 在系统运行时还要根据系统实际运行情况进行调整,以使系统性能最佳。4.3 评价物理结构 根据所选用的 DBMS,如 SQL Server 2000,从定量估算各种方案的存储空间、存取时间和维护代价入 手,对估算结果进行权衡、比较,选择一个较优的合理的物理结构。
5、系统实施 编写关系模式,载入数据。分期分批地组织数据入库,先输入小批量数据做调试用,待试运行基本合 格后,再大批量输入数据,逐步增加数据量,逐步完成运行评价。需要注意的是,要首先调试运行 DBMS 的 恢复功能,做好数据库的转储和恢复工作。基本 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;/*查询某个系的学生信息*/ 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;/*查询班级的学生信息*/ SELECT Sno, Sname, Ssex, Birth FROM Student WHERE Class = '114072';SELECT COUNT(* FROM Student WHERE Class='114072';/*查询学生的成绩、学分*/ 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、运行维护
1、针对不同的应用要求制定不同的转储计划,一旦发生故障尽快将数据库恢复到某种一致的状态,并
尽可能减少对数据库的破坏;
2、根据实际情况修改数据库原有的安全性、完整性控制;
3、在数据库运行过程中,监督系统运行,对监测数据进行分析,找出改进系统性能的方法;
4、数据库运行一段时间后,由于记录不断增、删、改,会使数据库的物理存储情况变坏,降低数据的 存取效率,数据库性能下降。这时应按原设计要求重新安排存储位置、回收垃圾、减少指针链等,提高系 统性能。当原有的数据库设计不能满足新的需求,需要重构造数据库,调整数据库的模式和内模式。
7、用户手册(<五号宋体>,具体内容:使用、操作说明。)
8、附录(<五号宋体>,源程序清单和结果:源程序必须有注释,以及必要的测试数据和运行结果数据,提倡 用英文描述。)
第四篇:数据库课程设计 计算机教务管理系统
中北大学
数据库课程设计
说 明 书
学 院、系: 专
业: 学 生 姓 名: 设 计 题 目:
李翰超
软件学院 软件工程
学 号: 1221010619
计算机等级考试教务管理系统
起 迄 日 期: 2014年5月26日-2014年6月20日 指 导 教 师:
2012 年 6月 21 日.引言
随着全国计算机等级考试的全面推广,我市学生每年参加两次全国计算机等级考试,考试管理工作量相当大。但是靠人工的方式管理等级考试相关的信息,这种管理方式存在着许多缺点,如:工作效率低、统计容易出错,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。所以开发一个计算机等级考试成绩管理系统是非常必要的。2.需求分析
计算机等级考试分为若干种类:如:计算机一级VB、C语言;计算机二级VB、C语言、C++;计算机三级数据库、网络技术;计算机四级数据库工程师、网络工程师。对于每个种类,考试分为笔试和机试.计算机等级考试工作过程如下:每个考生在报名时,登记姓名、性别、报考种类、学校、身份证号、个人照片等。考试办公室根据考生报考的种类,以及所在的考区来安排考场,编排准考证号码,打印准考证。考生参加考试后,登记每个考生每项的成绩,并计算出每个考生笔试和机试的成绩是否都>=60分。对机试和笔试都>=60分的考生,按所在考区打印通过证书,同一考区按准考证号码顺序打印出通过证书,分发给考生;计算机四级只要笔试成绩>=60则通过;打印成绩表供考试办公室留存、备查。
开发计算机等级考试成绩管理系统,有计算机辅助实现上述过程,代替人工操作,节省人力、时间,提高工作效率。
2.1 处理对象(1)用户帐号密码管理 对考点代码,考点名称进行管理 用户与密码进行管理(2)报名管理功能模块
报各库录入(姓名不能不空,之间不能有空格)增加、删除、修改、浏览(3)准考证管理模块
准考证生成规则:xxx+yy+zz+kk 其中XXX为考点代码;YY为语言代码,XX为考场号,KK为座位号(4)考务管理功能模块
考生信息查询、浏览 成绩管理模块
成绩数据录入、接收
成绩合成(总成绩=笔试成绩*0.6+上机成绩*0.4),按大于或等于60合格
2.2数据字典:
考生信息表(考生主键(主键),姓名,性别,出生年份,民族,身份证号,联系地址,联系电话,备注)
准考证表(准考证号主键,准考证号)
成绩表(成绩表主键,笔试成绩,上机成绩,总成绩)
级别语言代码表(级别语言代码主键,级别语言代码,级别,语言)考生考点信息表(考生考点主键,考点代码,考点名称,)用户帐号管理(用户帐号主键,用户名,密码)
信息操作表(考生主键(主键),准考证号主键, 级别语言代码主键,考生考点主键,用户帐号主键)
3.E-R图
4.关系模型
考生信息表(考生主键(主键),姓名,性别,出生年份,民族,身份证号,联系地址,联系电话,备注)
准考证表(准考证号主键,准考证号)
成绩表(成绩表主键,笔试成绩,上机成绩,总成绩)
级别语言代码表(级别语言代码主键,级别语言代码,级别,语言)
考生考点信息表(考生考点主键,考点代码,考点名称,)用户帐号管理(用户帐号主键,用户名,密码)
信息操作表(考生主键(主键),准考证号主键, 级别语言代码主键,考生考点主键,用户帐号主键)
其模式定义:
见附件:模式定义。
5.物理设计
本数据库共有5张表组成,其中t_manage表为管理表,而其他4张表:t_grade,t_information,t_level,t_regist都为基本表,当要查询所需要的信息时,就用连接查询将管理表和基本表连接在一起,从而看到想看到信息。
6.数据库实施
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.系统调试
通过sql语句对其进行调试,以测试其正确性,如图1,2,3,4,5
图 1 6
图 2
图 3 7
图 4 用自然连接查询:
图 5
8.心得体会
本次课程设计主要设计一个计算机管理系统,我的大体思路就是将基本信息录入到基本表当中,并保证没有重复属性,然后设计一个管理表,让其它基本表参照这个管理表,这个管理表当中只有各表主键,需要查看信息时,就将两表连接。。
这次课设我觉得有两个难点,一个是表间的参照,另一个是约束条件的设置,尤其是约束条件一定要充分考虑到,还有当有那种范围值的约束时要在建表后要用alter修改,而不是在定义时直接约束。
最后一点是关于主键的问题,主键最好别用学号什么的,最好应该用连续的、无意义的数字,create sequence之后,每加一个元组就用一次nextval,这样可以让电脑自动排号。
第五篇:数据库课程设计之教务管理系统
源代码:
CREATE DATABASE JWGL
/*建立教务管理系统*/ ON
(NAME = JWGL_Data,FILENAME = 'e:sql_dataJwgl_Data.mdf', SIZE = 20, MAXSIZE = 500, FILEGROWTH = 25%)LOG ON
(NAME = JWGL_LOG,FILENAME = 'e:sql_dataJwgl_Log.ldf', SIZE = 10, MAXSIZE = 100, FILEGROWTH = 1%);
CREATE TABLE Student
/*建立学生表*/(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),/*总学时*/ Week_perior TINYINT CHECK(Week_perior BETWEEN 2 AND 7),/*周学时*/ Credit TINYINT CHECK(Credit BETWEEN 1 AND 7)NOT NULL,/*学分*/ Pcno CHAR(10)/*先修课*/);
CREATE TABLE SC
/*建立学生选课表*/(Sno CHAR(8)NOT NULL, Cno CHAR(10)NOT NULL,Grade TINYINT CHECK(Grade BETWEEN 1 AND 100), PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno), FOREIGN KEY(Cno)REFERENCES Course(Cno));
DROP TABLE Student
/*删除学生表*/ DROP TABLE Course
/*删除课程表*/ DROP TABLE SC
/*删除学生选课表*/
INSERT
/*向学生表中插入数据*/ INTO Student
VALUES('04111020','张倩','女',19,'***','计算机');INSERT
INTO Student
VALUES('04111021','张花','女',20,'***','信息');INSERT
INTO Student
VALUES('04111022','李强','男',20,'***','英语');INSERT
INTO Student
VALUES('04111023','王若','女',19,'***','计算机');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,'***','计算机');INSERT
INTO Student
VALUES('04111029','小马','男',20,'***1','信息');INSERT
INTO Student
VALUES('04111030','吴欣','女',20,'***','英语')
INSERT
/*向课程表中插入数据*/ INTO Course
SELECT '0011','数据结构','64','2','3','c语言'
UNION SELECT '0012','数据库','64','2','3','离散数学' UNION SELECT '0013','信息管理','64','2','3','计算机基础' UNION SELECT '0014','专业英语','64','2','4','基础英语' UNION SELECT '0015','电气学','64','2','4','电子科技'
INSERT
/*向学生选课表中插入数据*/ 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表中保存计算机系所有学生的情况*/ SELECT * FROM Student
WHERE Sdept = '计算机';
ALTER TABLE Student ADD Address CHAR(20);
/*向Student表中插入地址列*/
DELETE FROM SC
/*删除计算机系学生的选课记录*/ WHERE Sno IN(SELECT Sno FROM Student
WHERE Sdept ='计算机');
UPDATE Student
/*将每个学生的年龄增加1岁*/ SET Age=Age+1;UPDATE
SC SET Grade=0 WHERE Sno IN(SELECT Sno FROM Student
WHERE Sdept = '计算机');
SELECT Sno,Sname,Sdept
/*查询学生表中所有学生的学号、姓名、所在系*/ FROM Student;
SELECT *
/*查询学生表中的所有信息*/ FROM Student;
SELECT Sname,2013-Age AS Birthday
/*查询学生表中所有学生的出生年份,用2013-Age的值作为Birthday的列值*/ FROM Student;
SELECT *
/*查询课程表中的所有信息*/ FROM Course;
SELECT *
/*查询学生选课表中的所有信息*/ FROM SC;
SELECT DISTINCT Sno
/*查询所有选了课程的学生的学号*/ FROM SC;
SELECT Sno,Sname
/*查询计算机系所有学生的学号和姓名*/ FROM Student
WHERE Sdept ='计算机';
SELECT Sno
/*查询考试成绩在80分以上的学生学号*/ FROM SC
WHERE Grade >=80;
SELECT Sname,Sdept,Age /*查询年龄在20-23岁的学生姓名、所在系和年龄*/ FROM Student
WHERE Age >=20 AND Age <=23;
SELECT Sname,Sdept,Age,Sex /*查询计算机和英语系的学生姓名、年龄和性别*/ FROM Student
WHERE Sdept IN('计算机','英语');
SELECT Sname,Sdept,Age,Sex /*查询不是计算机和英语系的学生姓名、年龄和性别*/ FROM Student
WHERE Sdept NOT IN('计算机','英语');
SELECT *
/*查询信息系所有学生的情况*/ FROM Student
WHERE Sdept LIKE '信息';
SELECT *
/*查询姓张的学生所有信息*/ FROM
Student
WHERE Sname LIKE '张%';
SELECT
Cno,Credit
/* 查询'数据结构'课程的课程号和学分*/ FROM Course
WHERE Cname LIKE '数据结构';
SELECT Sno,Cno
/*查询没有考试成绩的课程后和学分*/ FROM SC
WHERE Grade IS NULL;
SELECT *
/*查询全体学生的信息,查询结果按所在系的升序排列,同一系中的学生按年龄降序排列*/ FROM Student
ORDER BY Sdept ,Age DESC;
SELECT AVG(Grade)AS '平均成绩'
/*查询选修'0014'号课程的学生的平均分*/ FROM SC
WHERE Cno ='0014';
SELECT MIN(DISTINCT Grade)AS '最低分' /*查询成绩表中的最低分*/ FROM SC;
SELECT COUNT(*)AS'总人数'
/*统计学生总人数*/ FROM Student;
SELECT COUNT(DISTINCT Sno)/*统计选修了课程的学生人数*/ FROM SC;
SELECT Cno ,COUNT(Sno)/*查询每门课程的课程号及选课人数*/ FROM SC GROUP BY Cno;
SELECT Student.*,SC.*
/*查询每个学生及其选修课的情况*/ FROM Student ,SC
WHERE Student.Sno=SC.Sno;
SELECT Student.Sno,Sname,Grade
/*查询选修了'数据库'课程并且成绩在85分以上的学生的学号和姓名*/
FROM Student ,Course,SC
WHERE Student.Sno = SC.Sno AND SC.Cno
= Course.Cno AND Cname = '数据库'AND Grade>85;
SELECT Sno,Sname
/*查询和王若在同一个系学习的学生的学号和姓名*/ FROM Student
WHERE Sdept =
(SELECT Sdept
FROM Student
SELECT Sname ,Age
/*查询其他系中比英语系某一学生年龄小的学生是姓名和年龄*/ FROM Student
WHERE Sdept <>'英语'
AND AGE FROM Student WHERE Sdept ='英语'); SELECT Sname /*查询选修了0014号课程的学生的姓名*/ FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno =Student.Sno AND Cno='0014'); SELECT Cno FROM Course UNION ALL /*ALL表示合并两个查询输出的全部记录,没有ALL表示结果中不包含重复行*/ SELECT Cno FROM SC ORDER BY Cno; CREATE PROCEDURE Student_Course /*在学生-课程数据库中创建存储过程,查看和'小马'有关的基本信息及选修课程*/ 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;/*查看存储的信息*/ SELECT Sno /*查询选修'0012'或'0015'号课程的所以学生的学号*/ 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 /*建立计算机系学生的视图,进行修改和插入操作时只能对计算机系的学生操作*/ AS SELECT Sno,Sname,Sex,Age FROM Student WHERE Sdept='计算机' WITH CHECK OPTION CREATE VIEW Student_Course_0013(Sno,Sname,Sex,Age,Grade)/*建立选择0013号课程并且成绩在80分以上的学生视图*/ 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)/*建立反应学生出生年份的视图*/ AS SELECT Sno,Sname,2013-Age FROM Student CREATE PROCEDURE student_count/*创建一个存储过程,返回选修某门课程的学生人数*/ @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 '专业英语',@StudentSum output;SELECT 'the result is:',@Student_Sum;*/ CREATE PROCEDURE student_course1 /*通过参数@StudentName将指定学生的姓名传递给存储过程*/ @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 '小马';/*调用存储过程*/ /*删除视图*/ DROP VIEW C_Student; DROP VIEW Student_Course_0013;DROP VIEW Student_Birth; CREATE TRIGGER student_change/*创建触发器,当学生表中的记录被更新时,显示表中的所有记录*/ ON Student AFTER INSERT,UPDATE,DELETE AS SELECT * FROM Student; CREATE TRIGGER sc_insert3 ON SC /*在SC表上创建触发器,当向SC表中添加学生的选课记录时,检查学生的学号是否存在。若不存在,不能插入改条记录*/ AFTER INSERT AS IF(SELECT COUNT(*)FROM Student ,inserted WHERE Student.Sno=inserted.Sno)=0 BEGIN PRINT'学号不存在,不能插入记录' ROLLBACK TRANSACTION END; INSERT INTO SC VALUES('04111098','0015',73) ALTER TABLE SC /*删除触发器*/ DISABLE TRIGGER sc_insert2