《数据库原理及应用》课程设计报告
题目:
高校学生管理信息系统
学号和姓名 指导教师
2012.6.4~2012.6.7
指导教师对课程设计(论文)的评语(工作态度、任务完成情况、能力水平、设计说明书(论文)的撰写和图纸质量等):
成绩
指导教师签字 年 月 日
目 录
1、开发背景 ................................................................................................... 错误!未定义书签。
2、功能描述 ..................................................................................................................................... 5
3、业务流程分析 ............................................................................................................................. 5
4、数据流程分析 ............................................................................................................................. 6
4.1、数据流程图 ...................................................................................................................... 6
4.2、数据字典 ........................................................................................................................ 10
5、概念模型设计 ........................................................................................................................... 15
6. 逻辑模型设计和优化 ................................................................................................................ 16
7. 物理设计和实施 ........................................................................................................................ 16
8、课程设计心得体会 ................................................................................................................... 30
1、开发背景
高等院校是教学和科研的重要基地,也是培养人才的重要场所。高校学生管理工作是高校管理工作的重要组成部分,也是衡量高校管理水平的重要依据。学生管理工作是一个系统工程,贯穿于学生在校学习的整个过程和各个方面。从新生入学开始,到毕业离校,包括学生学籍管理,学生成绩管理,学生在校期间的奖惩情况管理,毕业生的就业指导管理等各个方面,具有工作量大、分类细、项目多和覆盖面广等特点。具有高效而准确的学生信息管理是提高高校办学质量、培养一流人才必不可缺少的重要手段。随着高校规模的扩大和业务的扩展,传统的管理模式和手段己经远远不能适应新的发展需要。主要体现在: 1.易于出错,效率较低
在管理工作中,学生的学籍管理仍然采用手工填表,这种方式的可靠性不高,因为手工填表很容易就会造成数据遗漏,同时由于学生的档案、学籍数量繁多,手工处理工作量极大,效率低下,进行数据的维护和检索都非常的不便,不能满足日常的管理工作的要求。 2.数据更新不够及时
以前由于没有采用计算机数据库存储方式,所以在数据的更新上,仍采用各系部或各班级将数据上报,并由专门的数据录入人员进行手工录入。这种方式不仅加大了学生信息管理的工作量,而且很容易遗漏信息,并且造成信息的更新不及时。, 3.信息管理规范性不够
由于没有一个完善的系统,学生的相关信息的数据库不够完善,使得对学生的信息管理上,缺乏规范性。数据分散存放,定义的格式往往会各不相同。如表示姓名的字段在这里取名为“name”,到了另一个表中就变成了“xingming”,这种不一致的数据格式在数据处理时往往需要进行转换,给工作带来很大的不方便。数据分散存放,数据之间没有相应的约束与关联,在进行数据维护的时候,必须同时更新所有部门的相关数据,非常繁琐,稍不注意就会引起数据的不一致。学生的相关数据分散在各个不同的部门,存储和管理的方式各不相同。有的采用Excel表格,有的仍然是采用卡片表格,很难实现数据的共享。
基于以上因素,传统的以手工和纸张对学生和教师信息的管理工作以及采用用户的单机管理己经越来越不能适应高校发展的需要,尤其是随看计算机的普及,运用先进的数据库管理信息系统及其软件开发平台,对信息进行科学化和数据库存储管理,己经成为高校信息系统的发展趋势。
校园管理信息化是当前高校管理发展的趋势.进入21世纪后,高校管理信息化正以前所未有的速度走进我们的校园,极大地改变着传统的信息管理方式,促使学校教育管理走向网络化、国际化、个性化。高校学生信息管理系统运用数据库技术和计算机技术,在全面深入分析学生信息管理业务需求的基础上,将学生信息管理的全过程实现网络管理。确保了高校学生信息管理高效和规范。本文分析了系统开发的背景和国内外校园数字化管理信息系统的发展现状,并对高校学生信息管理的业务需求和网络办公的需求作了比较详细的分析,详细阐述了系统需要解决的主要问题.设计思路和实现手段。本课程设计报告的主要内容如下:通过分析高校学生管理的特点和学生管理信息流,归纳出一个典型高校学生管理信息系统的数据库系统结构,根据该结构分析了系统的功能需求。
正是认识到高校管理学生信息的信息化在整个高校信息化过程中的重要地位,我们基于实践的目的开发了“高校学生信息管理系统”。基于计算机的操作方式的系统具有快速、及时的传递消息的优点。一方面数字化管理可以使管理部门和教师能够从多角度、多方位的了解学生的有关信息,便于进行教育活动;另一方面也可以使学生能够及时得到一些反馈信息,对信息的管理和控制是双向的。这样一来,可以帮助学校提高工作质量与效率,使琐碎繁杂
的学生管理井井有条。 当前,只有少数起步早的高校有一个比较完善的管理体制,所以建立完善的高校学生信息管理系统是提高高校学生管理科学化的手段。充分利用高校的现有资源,网络资源、硬件资源,软件资源,能够提高资源的利用率。不仅可以利用本校各个院系之间的资源而且可以利用未开发的资源。
2、功能描述
经过调研及分析,高校学生管理系统主要完成以下功能:
(1)学生基本信息查询:主要进行对学生的学号、姓名、性别等各项基本信息进行查询功能的实现。
(2):选校信息:主要是对学生选取大学时学校的编号与校名登记与查询功能实现。
(3)分班信息:主要是对学生分班的依据如入学年份、专业等信息的设定以及查询功能实现。
(4)选课信息:主要是对每项课程利用编号进行登记,同时标注其学分,课程名称;同时实现查询以上内容的功能。
(5)寝室分配信息:根据学生学号,学生姓名,通过寝室号进行记录功能,相互对应,同时实现查询功能。
(6)成绩信息:通过对学生的学号,选课信息,学分进行录入,使用户尽快了解其内容,并且实现查询的作用。
(7)老师任课信息:登记教师姓名,年龄以及所授课程的编号与所占学分,方便用户较快了解,并且实现查询的功能。
(8)奖惩信息:分别设立其相对于的惩罚与奖励规则项目,同时对应成绩信息查询功能,有效地针对学生进行奖惩体制。
(9)退学信息:通过删除的功能,与学生学号相关联,从而达到退学信息系统的处理与实现,最快的把退学信息所处理。
3、业务流程分析
图3.1 高校学生管理信息系统业务流程图
4、数据流程分析
4.1、数据流程图
通过需求分析,得出超市商品销售管理子系统数据流程如图所示
图4.1 高校学生管理信息系统顶层数据流图
图4.2 高校学生管理——第一层成绩处理分解图
图4.3 高校学生管理——第一层分班处理分解图
图4.4 高校学生管理——第一层课程处理分解图
图4.5 高校学生管理——第一层寝室处理分解图
4.2、数据字典
(根据编号对数据流程图中的各元素如数据流、数据存储、外部实体和处理逻辑进行细节描述)
(1)数据流的描述
数据流编号: F01
数据流名称:学生成绩表信息
简述:高校学生考试成绩项目总表 数据流来源:成绩信息处理系统 数据流去向:学生基本信息系统
数据流组成:表名+学号+课程号+成绩 数据流量:400/天 高峰流量:1000/天
数据流编号: F02
数据流名称: 寝室分配信息
简述: 学生根据各项信息分配寝室的内容 数据流来源: 寝室分配系统 数据流去向: 学生基本信息系统 数据流组成: 学号+姓名+寝室号 数据流量: 100/天 高峰流量: 500/天
数据流编号: F03
数据流名称:学生成绩信息 简述:各学生成绩信息 数据流来源:任课教师
数据流去向:成绩信息处理系统 数据流组成:学号+课程号+成绩 数据流量:400/天 高峰流量:1000/天
数据流编号: F04
数据流名称: 寝室信息
简述: 顾客多购买商品尚未售空 数据流来源: 超市商品查询 数据流去向: 顾客购买商品
数据流组成: 商品名+商品号+生产厂家+生产日期+价格 数据流量: 1000/天 高峰流量: 10000/天
数据流编号: F05
数据流名称: 课程信息
简述: 有学生进行选课时所读取的课程内容
数据流来源: 课程表
数据流去向: 课程处理
数据流组成: 课程号+课程名+课程学分
数据流量: 1000/天
高峰流量:10000/天
数据流编号: F06
数据流名称: 班级信息
简述: 各班所记录的学生,班级情况
数据流来源: 班级表
数据流去向:课程处理
数据流组成: 班级号+班级名+对应专业
数据流量: 200/天
高峰流量:1000/天
数据流编号: F07
数据流名称: 选课信息
简述: 学生进行选课时所知悉的信息
数据流来源: 选课表
数据流去向: 课程处理
数据流组成: 学号+课程名+课程名+课程学分
数据流量: 100/天
高峰流量:500/天
数据流编号: F08
数据流名称: 课程信息+班级信息
简述: 描述具体的课程与成绩处理内容
数据流来源: 教师
数据流去向:课程处理+成绩处理
数据流组成: 课程号+班级号+课程名+班级名+课程学分
数据流量: 200/天
高峰流量:1000/天
数据流编号: F09
数据流名称: 退学信息
简述:进行退学处理所记录的信息内容
数据流来源: 退学处理
数据流去向:学校
数据流组成: 退学学生号+退学时间
数据流量: 200/天
高峰流量:1000/天
数据流编号: F10
数据流名称: 奖惩信息
简述: 对学生各项进行奖励与惩罚的处理
数据流来源: 奖惩管理
数据流去向:学校
数据流组成:奖励内容+惩罚内容+学号
数据流量: 10/天
高峰流量:100/天
数据流编号: F11
数据流名称: 学生信息
简述: 学校所登记的学生具体信息内容
数据流来源: 学校
数据流去向:学生
数据流组成: 学号+姓名+年龄+性别+专业+学校
数据流量: 1000/天
高峰流量:1000/天
(2)处理逻辑的描述
处理逻辑编号:P
处理逻辑名称:高校学生管理信息系统
简述:是整个高校学生管理信息系统的核心,处理各种数据,对各种信息
进行查询记录等。
输入的数据流:D001学生信息
处理描述:对输入的各种信息进行处理,然后将处理的结果按规定返回, 输出的数据流:D002查询结果
处理频率:1000次/天
处理逻辑编号:P1
处理逻辑名称:奖惩管理
简述:对学生的各项行为进行处理
输入的数据流:F10奖惩信息
处理描述: 根据用户输入的学生信息,判断学生是否有需要奖励或惩罚的地
方,有则返回内容,并允许用户进行相应处理,和修改学生档案,
无则返回查找,无效内容进行返回报错。
输出的数据流:F10学生有需要进行奖惩处理+F10学生无需处理
处理频率:100次/天
处理逻辑编号:P2
处理逻辑名称:退学处理
简述: 根据退学查询系统返回的信息,用户可处理具有退学申请的学生。 输入的数据流: F9 退学查询系统返回的退学信息
处理描述: 根据查询系统提示的退学学生信息,用户处理退学学生,进行
修改学生信息和退学记录,已经修改退学学生记录,并进行退学
学生的基本信息删除。
输出的数据流: F9退学学生信息查询+ F9退学学生处理+ F9修改退学学生信息+
F9删除退学学生信息
处理频率: 1000次/天
处理逻辑编号: P3
处理逻辑名称: 课程处理
简述: 根据各种输入信息进行课程内容处理
输入的数据流: F8课程信息+F6班级信息+F7选课信息
处理描述:根据用户进行学生信息操作以及学生选课信息进行课程处理与查
询,符合相关条件进行查询并允许处理,没符合不返回任何信息。
输出的数据流: F5课程信息
处理频率: 1000次/天
处理逻辑编号: P4
处理逻辑名称: 成绩处理
简述: 根据输入或查询成绩进行学生方面的处理
输入的数据流: F3成绩信息
处理描述: 根据用户输入的学生内容进行修改学生成绩与内容,正确查询则
返回学生内容和成绩内容,错误查询则不返回任何信息。
输出的数据流: F3成绩信息+F3学生成绩信息
处理频率: 1000次/天
处理逻辑编号:P5
处理逻辑名称:分班处理
简述:用户进行分班内容操作的处理项目
输入的数据流:F7选课信息+F6班级信息+F5课程信息
处理描述:根据输入的选课信息、班级信息、课程信息进行相应的查询与修改等功能,如果有出入则返回错误信息,如果无出入则进行查询,返回各功能操作。
输出的数据流:F6班级信息
处理频率:100次/天
处理逻辑编号:P6
处理逻辑名称:寝室分配
简述:用户进行寝室内容操作的处理
输入的数据流:F4寝室信息
处理描述:根据输入的寝室内容进行相应的查询与修改等功能,如果有出入则返回错误信息,如果无出入则进行查询,返回各功能操作。
输出的数据流:F2学生寝室分配
处理频率:100次/天
(3)数据存储的描述
数据存储编号:X1
数据存储名称:学生信息
简述:学生的基本信息
数据存储组成:学号+学生姓名+年龄+性别+专业+所属地
关键字:学号
相关联的处理:F11
数据存储编号:X2
数据存储名称:课程信息
简述:学校各科课程内容信息记录
数据存储组成:课程号+课程名+学分+学时
关键字:课程号
相关联的处理:F5
数据存储编号:X3
数据存储名称:成绩信息
简述:记录成绩的信息内容
数据存储组成:课程号+成绩
关键字:课程号
相关联的处理:F3
(4)外部实体的描述
外部实体编号:E1
外部实体名称:学生
简 述:学生内容
输入的数据流:F11
输出的数据流:无
外部实体编号:E2
外部实体名称:学校
简 述:学校内容
输入的数据流:F9,F10
输出的数据流:F11
外部实体编号:E3
外部实体名称:教师
简 述:教师内容
输入的数据流:无
输出的数据流:F3,F8
5、概念模型设计
根据系统数据流图和数据字典,得出系统的总体概念模型CDM
图5.1 系统CDM图
6. 逻辑模型设计和优化
图6.1 系统PDM图
7. 物理设计和实施
/*==============================================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /* Created on: 2011-6-28 14:43:20 */
/*==============================================================*/
alter table Dropped
drop constraint FK_DROPPED_退学2_STUDENT go
alter table student
drop constraint FK_STUDENT_住宿_DROP go
alter table student
drop constraint FK_STUDENT_班级_CLASS go
alter table student
drop constraint FK_STUDENT_退学_DROPPED go
alter table student
drop constraint FK_STUDENT_选校_COLLEGE go
alter table 任课
drop constraint FK_任课_任课_COURSE
go
alter table 任课
drop constraint FK_任课_任课2_TEACHER go
alter table 奖惩
drop constraint FK_奖惩_奖惩_REWARDS go
alter table 奖惩
drop constraint FK_奖惩_奖惩2_STUDENT go
alter table 查询成绩
drop constraint FK_查询成绩_查询成绩_GRADE go
alter table 查询成绩
drop constraint FK_查询成绩_查询成绩2_STUDENT go
alter table 选修
drop constraint FK_选修_选修_STUDENT go
alter table 选修
drop constraint FK_选修_选修2_COURSE go
if exists (select 1
from sysindexes
where id = object_id('Dropped') and name = '退学2_FK' and indid > 0
and indid
drop index Dropped.退学2_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '住宿_FK' and indid > 0
and indid
drop index student.住宿_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '班级_FK' and indid > 0
and indid
drop index student.班级_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '退学_FK' and indid > 0
and indid
drop index student.退学_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '选校_FK' and indid > 0
and indid
drop index student.选校_FK
go
if exists (select 1
from sysindexes
where id = object_id('任课') and name = '任课2_FK' and indid > 0
and indid
drop index 任课.任课2_FK
go
if exists (select 1
from sysindexes
where id = object_id('任课') and name = '任课_FK' and indid > 0
and indid
drop index 任课.任课_FK
go
if exists (select 1
from sysindexes
where id = object_id('奖惩') and name = '奖惩2_FK' and indid > 0
and indid
drop index 奖惩.奖惩2_FK
go
if exists (select 1
from sysindexes
where id = object_id('奖惩') and name = '奖惩_FK' and indid > 0
and indid
drop index 奖惩.奖惩_FK
go
if exists (select 1
from sysindexes
where id = object_id('查询成绩') and name = '查询成绩2_FK' and indid > 0
and indid
drop index 查询成绩.查询成绩2_FK go
if exists (select 1
from sysindexes
where id = object_id('查询成绩') and name = '查询成绩_FK' and indid > 0
and indid
drop index 查询成绩.查询成绩_FK go
if exists (select 1
from sysindexes
where id = object_id('选修') and name = '选修2_FK' and indid > 0
and indid
drop index 选修.选修2_FK
go
if exists (select 1
from sysindexes
where id = object_id('选修') and name = '选修_FK' and indid > 0
and indid
drop index 选修.选修_FK
go
if exists (select 1
from sysobjects
where id = object_id('Dropped') and type = 'U')
drop table Dropped
go
if exists (select 1
from sysobjects
where id = object_id('Rewards')
and type = 'U')
drop table Rewards
go
if exists (select 1
from sysobjects
where id = object_id('class')
and type = 'U')
drop table class
go
if exists (select 1
from sysobjects
where id = object_id('college')
and type = 'U')
drop table college
go
if exists (select 1
from sysobjects
where id = object_id('course')
and type = 'U')
drop table course
go
if exists (select 1
from sysobjects
where id = object_id('"drop"')
and type = 'U')
drop table "drop"
go
if exists (select 1
from sysobjects
where id = object_id('grade')
and type = 'U')
drop table grade
go
if exists (select 1
from sysobjects
where id = object_id('student')
and type = 'U')
drop table student
go
if exists (select 1
from sysobjects
where id = object_id('teacher')
and type = 'U')
drop table teacher
go
if exists (select 1
from sysobjects
where id = object_id('任课')
and type = 'U')
drop table 任课
go
if exists (select 1
from sysobjects
where id = object_id('奖惩')
and type = 'U')
drop table 奖惩
go
if exists (select 1
from sysobjects
where id = object_id('查询成绩')
and type = 'U')
drop table 查询成绩
go
if exists (select 1
from sysobjects
where id = object_id('选修')
and type = 'U')
drop table 选修
go
/*==============================================================*/ /* Table: Dropped */
/*==============================================================*/ create table Dropped (
details1 char(6) null,
sno3 int not null,
sno1 int null,
constraint PK_DROPPED primary key (sno3)
)
go
/*==============================================================*/ /* Index: 退学2_FK */
/*==============================================================*/ create index 退学2_FK on Dropped (
sno1 ASC
)
go
/*==============================================================*/ /* Table: Rewards */
/*==============================================================*/ create table Rewards (
Rewards1 char(30) not null,
punishment1 char(30) not null,
constraint PK_REWARDS primary key (Rewards1, punishment1)
)
go
/*==============================================================*/ /* Table: class */
/*==============================================================*/ create table class (
sno6 int not null,
sname4 char(20) null,
classno int null,
constraint PK_CLASS primary key (sno6)
)
go
/*==============================================================*/ /* Table: college */
/*==============================================================*/ create table college (
no1 int not null,
clname1 char(30) null,
constraint PK_COLLEGE primary key (no1)
)
go
/*==============================================================*/ /* Table: course */
/*==============================================================*/ create table course (
cno1 int not null,
cname1 char(20) null,
credit1 real null,
constraint PK_COURSE primary key (cno1)
)
go
/*==============================================================*/ /* Table: "drop" */
/*==============================================================*/ create table "drop" (
sno4 int not null,
sname3 char(20) null,
dno int null,
constraint PK_DROP primary key (sno4)
)
go
/*==============================================================*/ /* Table: grade */
/*==============================================================*/ create table grade (
sno2 int not null,
cno2 int not null,
grade1 real null,
credit2 real null,
constraint PK_GRADE primary key (sno2, cno2)
)
go
/*==============================================================*/ /* Table: student */
/*==============================================================*/ create table student (
sno1 int not null,
sno6 int null,
sno4 int null,
sno3 int null,
no1 int null,
sname1 char(20) null,
sage1 int null,
ssex1 char(4) null,
sdept1 char(30) null,
splace char(30) null,
constraint PK_STUDENT primary key (sno1)
)
go
/*==============================================================*/ /* Index: 选校_FK */
/*==============================================================*/ create index 选校_FK on student (
no1 ASC
)
go
/*==============================================================*/ /* Index: 退学_FK */
/*==============================================================*/ create index 退学_FK on student (
sno3 ASC
)
go
/*==============================================================*/ /* Index: 住宿_FK */
/*==============================================================*/ create index 住宿_FK on student (
sno4 ASC
)
go
/*==============================================================*/ /* Index: 班级_FK */
/*==============================================================*/ create index 班级_FK on student (
sno6 ASC
)
go
/*==============================================================*/ /* Table: teacher */
/*==============================================================*/
create table teacher (
tno1 int not null,
tname1 char(20) null,
tage1 int null,
tps1 char(10) null,
constraint PK_TEACHER primary key (tno1)
)
go
/*==============================================================*/ /* Table: 任课 */
/*==============================================================*/ create table 任课 (
cno1 int not null,
tno1 int not null,
constraint PK_任课 primary key (cno1, tno1)
)
go
/*==============================================================*/ /* Index: 任课_FK */
/*==============================================================*/ create index 任课_FK on 任课 (
cno1 ASC
)
go
/*==============================================================*/ /* Index: 任课2_FK */
/*==============================================================*/ create index 任课2_FK on 任课 (
tno1 ASC
)
go
/*==============================================================*/ /* Table: 奖惩 */
/*==============================================================*/ create table 奖惩 (
Rewards1 char(30) not null,
punishment1 char(30) not null,
sno1 int not null,
constraint PK_奖惩 primary key (Rewards1, punishment1, sno1)
)
/*==============================================================*/ /* Index: 奖惩_FK */
/*==============================================================*/ create index 奖惩_FK on 奖惩 (
Rewards1 ASC,
punishment1 ASC
)
go
/*==============================================================*/ /* Index: 奖惩2_FK */
/*==============================================================*/ create index 奖惩2_FK on 奖惩 (
sno1 ASC
)
go
/*==============================================================*/ /* Table: 查询成绩 */
/*==============================================================*/ create table 查询成绩 (
sno2 int not null,
cno2 int not null,
sno1 int not null,
constraint PK_查询成绩 primary key (sno2, cno2, sno1)
)
go
/*==============================================================*/ /* Index: 查询成绩_FK */
/*==============================================================*/ create index 查询成绩_FK on 查询成绩 (
sno2 ASC,
cno2 ASC
)
go
/*==============================================================*/ /* Index: 查询成绩2_FK */
/*==============================================================*/ create index 查询成绩2_FK on 查询成绩 (
sno1 ASC
go
/*==============================================================*/ /* Table: 选修 */
/*==============================================================*/ create table 选修 (
sno1 int not null,
cno1 int not null,
constraint PK_选修 primary key (sno1, cno1)
)
go
/*==============================================================*/ /* Index: 选修_FK */
/*==============================================================*/ create index 选修_FK on 选修 (
sno1 ASC
)
go
/*==============================================================*/ /* Index: 选修2_FK */
/*==============================================================*/ create index 选修2_FK on 选修 (
cno1 ASC
)
go
alter table Dropped
add constraint FK_DROPPED_退学2_STUDENT foreign key (sno1)
references student (sno1)
go
alter table student
add constraint FK_STUDENT_住宿_DROP foreign key (sno4)
references "drop" (sno4)
go
alter table student
add constraint FK_STUDENT_班级_CLASS foreign key (sno6)
references class (sno6)
go
alter table student
add constraint FK_STUDENT_退学_DROPPED foreign key (sno3)
references Dropped (sno3)
go
alter table student
add constraint FK_STUDENT_选校_COLLEGE foreign key (no1)
references college (no1)
go
alter table 任课
add constraint FK_任课_任课_COURSE foreign key (cno1)
references course (cno1)
go
alter table 任课
add constraint FK_任课_任课2_TEACHER foreign key (tno1)
references teacher (tno1)
go
alter table 奖惩
add constraint FK_奖惩_奖惩_REWARDS foreign key (Rewards1, punishment1) references Rewards (Rewards1, punishment1)
go
alter table 奖惩
add constraint FK_奖惩_奖惩2_STUDENT foreign key (sno1)
references student (sno1)
go
alter table 查询成绩
add constraint FK_查询成绩_查询成绩_GRADE foreign key (sno2, cno2) references grade (sno2, cno2)
go
alter table 查询成绩
add constraint FK_查询成绩_查询成绩2_STUDENT foreign key (sno1) references student (sno1)
go
alter table 选修
add constraint FK_选修_选修_STUDENT foreign key (sno1)
references student (sno1)
go
alter table 选修
add constraint FK_选修_选修2_COURSE foreign key (cno1) references course (cno1)
go
《数据库原理及应用》课程设计报告
题目:
高校学生管理信息系统
学号和姓名 指导教师
2012.6.4~2012.6.7
指导教师对课程设计(论文)的评语(工作态度、任务完成情况、能力水平、设计说明书(论文)的撰写和图纸质量等):
成绩
指导教师签字 年 月 日
目 录
1、开发背景 ................................................................................................... 错误!未定义书签。
2、功能描述 ..................................................................................................................................... 5
3、业务流程分析 ............................................................................................................................. 5
4、数据流程分析 ............................................................................................................................. 6
4.1、数据流程图 ...................................................................................................................... 6
4.2、数据字典 ........................................................................................................................ 10
5、概念模型设计 ........................................................................................................................... 15
6. 逻辑模型设计和优化 ................................................................................................................ 16
7. 物理设计和实施 ........................................................................................................................ 16
8、课程设计心得体会 ................................................................................................................... 30
1、开发背景
高等院校是教学和科研的重要基地,也是培养人才的重要场所。高校学生管理工作是高校管理工作的重要组成部分,也是衡量高校管理水平的重要依据。学生管理工作是一个系统工程,贯穿于学生在校学习的整个过程和各个方面。从新生入学开始,到毕业离校,包括学生学籍管理,学生成绩管理,学生在校期间的奖惩情况管理,毕业生的就业指导管理等各个方面,具有工作量大、分类细、项目多和覆盖面广等特点。具有高效而准确的学生信息管理是提高高校办学质量、培养一流人才必不可缺少的重要手段。随着高校规模的扩大和业务的扩展,传统的管理模式和手段己经远远不能适应新的发展需要。主要体现在: 1.易于出错,效率较低
在管理工作中,学生的学籍管理仍然采用手工填表,这种方式的可靠性不高,因为手工填表很容易就会造成数据遗漏,同时由于学生的档案、学籍数量繁多,手工处理工作量极大,效率低下,进行数据的维护和检索都非常的不便,不能满足日常的管理工作的要求。 2.数据更新不够及时
以前由于没有采用计算机数据库存储方式,所以在数据的更新上,仍采用各系部或各班级将数据上报,并由专门的数据录入人员进行手工录入。这种方式不仅加大了学生信息管理的工作量,而且很容易遗漏信息,并且造成信息的更新不及时。, 3.信息管理规范性不够
由于没有一个完善的系统,学生的相关信息的数据库不够完善,使得对学生的信息管理上,缺乏规范性。数据分散存放,定义的格式往往会各不相同。如表示姓名的字段在这里取名为“name”,到了另一个表中就变成了“xingming”,这种不一致的数据格式在数据处理时往往需要进行转换,给工作带来很大的不方便。数据分散存放,数据之间没有相应的约束与关联,在进行数据维护的时候,必须同时更新所有部门的相关数据,非常繁琐,稍不注意就会引起数据的不一致。学生的相关数据分散在各个不同的部门,存储和管理的方式各不相同。有的采用Excel表格,有的仍然是采用卡片表格,很难实现数据的共享。
基于以上因素,传统的以手工和纸张对学生和教师信息的管理工作以及采用用户的单机管理己经越来越不能适应高校发展的需要,尤其是随看计算机的普及,运用先进的数据库管理信息系统及其软件开发平台,对信息进行科学化和数据库存储管理,己经成为高校信息系统的发展趋势。
校园管理信息化是当前高校管理发展的趋势.进入21世纪后,高校管理信息化正以前所未有的速度走进我们的校园,极大地改变着传统的信息管理方式,促使学校教育管理走向网络化、国际化、个性化。高校学生信息管理系统运用数据库技术和计算机技术,在全面深入分析学生信息管理业务需求的基础上,将学生信息管理的全过程实现网络管理。确保了高校学生信息管理高效和规范。本文分析了系统开发的背景和国内外校园数字化管理信息系统的发展现状,并对高校学生信息管理的业务需求和网络办公的需求作了比较详细的分析,详细阐述了系统需要解决的主要问题.设计思路和实现手段。本课程设计报告的主要内容如下:通过分析高校学生管理的特点和学生管理信息流,归纳出一个典型高校学生管理信息系统的数据库系统结构,根据该结构分析了系统的功能需求。
正是认识到高校管理学生信息的信息化在整个高校信息化过程中的重要地位,我们基于实践的目的开发了“高校学生信息管理系统”。基于计算机的操作方式的系统具有快速、及时的传递消息的优点。一方面数字化管理可以使管理部门和教师能够从多角度、多方位的了解学生的有关信息,便于进行教育活动;另一方面也可以使学生能够及时得到一些反馈信息,对信息的管理和控制是双向的。这样一来,可以帮助学校提高工作质量与效率,使琐碎繁杂
的学生管理井井有条。 当前,只有少数起步早的高校有一个比较完善的管理体制,所以建立完善的高校学生信息管理系统是提高高校学生管理科学化的手段。充分利用高校的现有资源,网络资源、硬件资源,软件资源,能够提高资源的利用率。不仅可以利用本校各个院系之间的资源而且可以利用未开发的资源。
2、功能描述
经过调研及分析,高校学生管理系统主要完成以下功能:
(1)学生基本信息查询:主要进行对学生的学号、姓名、性别等各项基本信息进行查询功能的实现。
(2):选校信息:主要是对学生选取大学时学校的编号与校名登记与查询功能实现。
(3)分班信息:主要是对学生分班的依据如入学年份、专业等信息的设定以及查询功能实现。
(4)选课信息:主要是对每项课程利用编号进行登记,同时标注其学分,课程名称;同时实现查询以上内容的功能。
(5)寝室分配信息:根据学生学号,学生姓名,通过寝室号进行记录功能,相互对应,同时实现查询功能。
(6)成绩信息:通过对学生的学号,选课信息,学分进行录入,使用户尽快了解其内容,并且实现查询的作用。
(7)老师任课信息:登记教师姓名,年龄以及所授课程的编号与所占学分,方便用户较快了解,并且实现查询的功能。
(8)奖惩信息:分别设立其相对于的惩罚与奖励规则项目,同时对应成绩信息查询功能,有效地针对学生进行奖惩体制。
(9)退学信息:通过删除的功能,与学生学号相关联,从而达到退学信息系统的处理与实现,最快的把退学信息所处理。
3、业务流程分析
图3.1 高校学生管理信息系统业务流程图
4、数据流程分析
4.1、数据流程图
通过需求分析,得出超市商品销售管理子系统数据流程如图所示
图4.1 高校学生管理信息系统顶层数据流图
图4.2 高校学生管理——第一层成绩处理分解图
图4.3 高校学生管理——第一层分班处理分解图
图4.4 高校学生管理——第一层课程处理分解图
图4.5 高校学生管理——第一层寝室处理分解图
4.2、数据字典
(根据编号对数据流程图中的各元素如数据流、数据存储、外部实体和处理逻辑进行细节描述)
(1)数据流的描述
数据流编号: F01
数据流名称:学生成绩表信息
简述:高校学生考试成绩项目总表 数据流来源:成绩信息处理系统 数据流去向:学生基本信息系统
数据流组成:表名+学号+课程号+成绩 数据流量:400/天 高峰流量:1000/天
数据流编号: F02
数据流名称: 寝室分配信息
简述: 学生根据各项信息分配寝室的内容 数据流来源: 寝室分配系统 数据流去向: 学生基本信息系统 数据流组成: 学号+姓名+寝室号 数据流量: 100/天 高峰流量: 500/天
数据流编号: F03
数据流名称:学生成绩信息 简述:各学生成绩信息 数据流来源:任课教师
数据流去向:成绩信息处理系统 数据流组成:学号+课程号+成绩 数据流量:400/天 高峰流量:1000/天
数据流编号: F04
数据流名称: 寝室信息
简述: 顾客多购买商品尚未售空 数据流来源: 超市商品查询 数据流去向: 顾客购买商品
数据流组成: 商品名+商品号+生产厂家+生产日期+价格 数据流量: 1000/天 高峰流量: 10000/天
数据流编号: F05
数据流名称: 课程信息
简述: 有学生进行选课时所读取的课程内容
数据流来源: 课程表
数据流去向: 课程处理
数据流组成: 课程号+课程名+课程学分
数据流量: 1000/天
高峰流量:10000/天
数据流编号: F06
数据流名称: 班级信息
简述: 各班所记录的学生,班级情况
数据流来源: 班级表
数据流去向:课程处理
数据流组成: 班级号+班级名+对应专业
数据流量: 200/天
高峰流量:1000/天
数据流编号: F07
数据流名称: 选课信息
简述: 学生进行选课时所知悉的信息
数据流来源: 选课表
数据流去向: 课程处理
数据流组成: 学号+课程名+课程名+课程学分
数据流量: 100/天
高峰流量:500/天
数据流编号: F08
数据流名称: 课程信息+班级信息
简述: 描述具体的课程与成绩处理内容
数据流来源: 教师
数据流去向:课程处理+成绩处理
数据流组成: 课程号+班级号+课程名+班级名+课程学分
数据流量: 200/天
高峰流量:1000/天
数据流编号: F09
数据流名称: 退学信息
简述:进行退学处理所记录的信息内容
数据流来源: 退学处理
数据流去向:学校
数据流组成: 退学学生号+退学时间
数据流量: 200/天
高峰流量:1000/天
数据流编号: F10
数据流名称: 奖惩信息
简述: 对学生各项进行奖励与惩罚的处理
数据流来源: 奖惩管理
数据流去向:学校
数据流组成:奖励内容+惩罚内容+学号
数据流量: 10/天
高峰流量:100/天
数据流编号: F11
数据流名称: 学生信息
简述: 学校所登记的学生具体信息内容
数据流来源: 学校
数据流去向:学生
数据流组成: 学号+姓名+年龄+性别+专业+学校
数据流量: 1000/天
高峰流量:1000/天
(2)处理逻辑的描述
处理逻辑编号:P
处理逻辑名称:高校学生管理信息系统
简述:是整个高校学生管理信息系统的核心,处理各种数据,对各种信息
进行查询记录等。
输入的数据流:D001学生信息
处理描述:对输入的各种信息进行处理,然后将处理的结果按规定返回, 输出的数据流:D002查询结果
处理频率:1000次/天
处理逻辑编号:P1
处理逻辑名称:奖惩管理
简述:对学生的各项行为进行处理
输入的数据流:F10奖惩信息
处理描述: 根据用户输入的学生信息,判断学生是否有需要奖励或惩罚的地
方,有则返回内容,并允许用户进行相应处理,和修改学生档案,
无则返回查找,无效内容进行返回报错。
输出的数据流:F10学生有需要进行奖惩处理+F10学生无需处理
处理频率:100次/天
处理逻辑编号:P2
处理逻辑名称:退学处理
简述: 根据退学查询系统返回的信息,用户可处理具有退学申请的学生。 输入的数据流: F9 退学查询系统返回的退学信息
处理描述: 根据查询系统提示的退学学生信息,用户处理退学学生,进行
修改学生信息和退学记录,已经修改退学学生记录,并进行退学
学生的基本信息删除。
输出的数据流: F9退学学生信息查询+ F9退学学生处理+ F9修改退学学生信息+
F9删除退学学生信息
处理频率: 1000次/天
处理逻辑编号: P3
处理逻辑名称: 课程处理
简述: 根据各种输入信息进行课程内容处理
输入的数据流: F8课程信息+F6班级信息+F7选课信息
处理描述:根据用户进行学生信息操作以及学生选课信息进行课程处理与查
询,符合相关条件进行查询并允许处理,没符合不返回任何信息。
输出的数据流: F5课程信息
处理频率: 1000次/天
处理逻辑编号: P4
处理逻辑名称: 成绩处理
简述: 根据输入或查询成绩进行学生方面的处理
输入的数据流: F3成绩信息
处理描述: 根据用户输入的学生内容进行修改学生成绩与内容,正确查询则
返回学生内容和成绩内容,错误查询则不返回任何信息。
输出的数据流: F3成绩信息+F3学生成绩信息
处理频率: 1000次/天
处理逻辑编号:P5
处理逻辑名称:分班处理
简述:用户进行分班内容操作的处理项目
输入的数据流:F7选课信息+F6班级信息+F5课程信息
处理描述:根据输入的选课信息、班级信息、课程信息进行相应的查询与修改等功能,如果有出入则返回错误信息,如果无出入则进行查询,返回各功能操作。
输出的数据流:F6班级信息
处理频率:100次/天
处理逻辑编号:P6
处理逻辑名称:寝室分配
简述:用户进行寝室内容操作的处理
输入的数据流:F4寝室信息
处理描述:根据输入的寝室内容进行相应的查询与修改等功能,如果有出入则返回错误信息,如果无出入则进行查询,返回各功能操作。
输出的数据流:F2学生寝室分配
处理频率:100次/天
(3)数据存储的描述
数据存储编号:X1
数据存储名称:学生信息
简述:学生的基本信息
数据存储组成:学号+学生姓名+年龄+性别+专业+所属地
关键字:学号
相关联的处理:F11
数据存储编号:X2
数据存储名称:课程信息
简述:学校各科课程内容信息记录
数据存储组成:课程号+课程名+学分+学时
关键字:课程号
相关联的处理:F5
数据存储编号:X3
数据存储名称:成绩信息
简述:记录成绩的信息内容
数据存储组成:课程号+成绩
关键字:课程号
相关联的处理:F3
(4)外部实体的描述
外部实体编号:E1
外部实体名称:学生
简 述:学生内容
输入的数据流:F11
输出的数据流:无
外部实体编号:E2
外部实体名称:学校
简 述:学校内容
输入的数据流:F9,F10
输出的数据流:F11
外部实体编号:E3
外部实体名称:教师
简 述:教师内容
输入的数据流:无
输出的数据流:F3,F8
5、概念模型设计
根据系统数据流图和数据字典,得出系统的总体概念模型CDM
图5.1 系统CDM图
6. 逻辑模型设计和优化
图6.1 系统PDM图
7. 物理设计和实施
/*==============================================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /* Created on: 2011-6-28 14:43:20 */
/*==============================================================*/
alter table Dropped
drop constraint FK_DROPPED_退学2_STUDENT go
alter table student
drop constraint FK_STUDENT_住宿_DROP go
alter table student
drop constraint FK_STUDENT_班级_CLASS go
alter table student
drop constraint FK_STUDENT_退学_DROPPED go
alter table student
drop constraint FK_STUDENT_选校_COLLEGE go
alter table 任课
drop constraint FK_任课_任课_COURSE
go
alter table 任课
drop constraint FK_任课_任课2_TEACHER go
alter table 奖惩
drop constraint FK_奖惩_奖惩_REWARDS go
alter table 奖惩
drop constraint FK_奖惩_奖惩2_STUDENT go
alter table 查询成绩
drop constraint FK_查询成绩_查询成绩_GRADE go
alter table 查询成绩
drop constraint FK_查询成绩_查询成绩2_STUDENT go
alter table 选修
drop constraint FK_选修_选修_STUDENT go
alter table 选修
drop constraint FK_选修_选修2_COURSE go
if exists (select 1
from sysindexes
where id = object_id('Dropped') and name = '退学2_FK' and indid > 0
and indid
drop index Dropped.退学2_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '住宿_FK' and indid > 0
and indid
drop index student.住宿_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '班级_FK' and indid > 0
and indid
drop index student.班级_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '退学_FK' and indid > 0
and indid
drop index student.退学_FK
go
if exists (select 1
from sysindexes
where id = object_id('student') and name = '选校_FK' and indid > 0
and indid
drop index student.选校_FK
go
if exists (select 1
from sysindexes
where id = object_id('任课') and name = '任课2_FK' and indid > 0
and indid
drop index 任课.任课2_FK
go
if exists (select 1
from sysindexes
where id = object_id('任课') and name = '任课_FK' and indid > 0
and indid
drop index 任课.任课_FK
go
if exists (select 1
from sysindexes
where id = object_id('奖惩') and name = '奖惩2_FK' and indid > 0
and indid
drop index 奖惩.奖惩2_FK
go
if exists (select 1
from sysindexes
where id = object_id('奖惩') and name = '奖惩_FK' and indid > 0
and indid
drop index 奖惩.奖惩_FK
go
if exists (select 1
from sysindexes
where id = object_id('查询成绩') and name = '查询成绩2_FK' and indid > 0
and indid
drop index 查询成绩.查询成绩2_FK go
if exists (select 1
from sysindexes
where id = object_id('查询成绩') and name = '查询成绩_FK' and indid > 0
and indid
drop index 查询成绩.查询成绩_FK go
if exists (select 1
from sysindexes
where id = object_id('选修') and name = '选修2_FK' and indid > 0
and indid
drop index 选修.选修2_FK
go
if exists (select 1
from sysindexes
where id = object_id('选修') and name = '选修_FK' and indid > 0
and indid
drop index 选修.选修_FK
go
if exists (select 1
from sysobjects
where id = object_id('Dropped') and type = 'U')
drop table Dropped
go
if exists (select 1
from sysobjects
where id = object_id('Rewards')
and type = 'U')
drop table Rewards
go
if exists (select 1
from sysobjects
where id = object_id('class')
and type = 'U')
drop table class
go
if exists (select 1
from sysobjects
where id = object_id('college')
and type = 'U')
drop table college
go
if exists (select 1
from sysobjects
where id = object_id('course')
and type = 'U')
drop table course
go
if exists (select 1
from sysobjects
where id = object_id('"drop"')
and type = 'U')
drop table "drop"
go
if exists (select 1
from sysobjects
where id = object_id('grade')
and type = 'U')
drop table grade
go
if exists (select 1
from sysobjects
where id = object_id('student')
and type = 'U')
drop table student
go
if exists (select 1
from sysobjects
where id = object_id('teacher')
and type = 'U')
drop table teacher
go
if exists (select 1
from sysobjects
where id = object_id('任课')
and type = 'U')
drop table 任课
go
if exists (select 1
from sysobjects
where id = object_id('奖惩')
and type = 'U')
drop table 奖惩
go
if exists (select 1
from sysobjects
where id = object_id('查询成绩')
and type = 'U')
drop table 查询成绩
go
if exists (select 1
from sysobjects
where id = object_id('选修')
and type = 'U')
drop table 选修
go
/*==============================================================*/ /* Table: Dropped */
/*==============================================================*/ create table Dropped (
details1 char(6) null,
sno3 int not null,
sno1 int null,
constraint PK_DROPPED primary key (sno3)
)
go
/*==============================================================*/ /* Index: 退学2_FK */
/*==============================================================*/ create index 退学2_FK on Dropped (
sno1 ASC
)
go
/*==============================================================*/ /* Table: Rewards */
/*==============================================================*/ create table Rewards (
Rewards1 char(30) not null,
punishment1 char(30) not null,
constraint PK_REWARDS primary key (Rewards1, punishment1)
)
go
/*==============================================================*/ /* Table: class */
/*==============================================================*/ create table class (
sno6 int not null,
sname4 char(20) null,
classno int null,
constraint PK_CLASS primary key (sno6)
)
go
/*==============================================================*/ /* Table: college */
/*==============================================================*/ create table college (
no1 int not null,
clname1 char(30) null,
constraint PK_COLLEGE primary key (no1)
)
go
/*==============================================================*/ /* Table: course */
/*==============================================================*/ create table course (
cno1 int not null,
cname1 char(20) null,
credit1 real null,
constraint PK_COURSE primary key (cno1)
)
go
/*==============================================================*/ /* Table: "drop" */
/*==============================================================*/ create table "drop" (
sno4 int not null,
sname3 char(20) null,
dno int null,
constraint PK_DROP primary key (sno4)
)
go
/*==============================================================*/ /* Table: grade */
/*==============================================================*/ create table grade (
sno2 int not null,
cno2 int not null,
grade1 real null,
credit2 real null,
constraint PK_GRADE primary key (sno2, cno2)
)
go
/*==============================================================*/ /* Table: student */
/*==============================================================*/ create table student (
sno1 int not null,
sno6 int null,
sno4 int null,
sno3 int null,
no1 int null,
sname1 char(20) null,
sage1 int null,
ssex1 char(4) null,
sdept1 char(30) null,
splace char(30) null,
constraint PK_STUDENT primary key (sno1)
)
go
/*==============================================================*/ /* Index: 选校_FK */
/*==============================================================*/ create index 选校_FK on student (
no1 ASC
)
go
/*==============================================================*/ /* Index: 退学_FK */
/*==============================================================*/ create index 退学_FK on student (
sno3 ASC
)
go
/*==============================================================*/ /* Index: 住宿_FK */
/*==============================================================*/ create index 住宿_FK on student (
sno4 ASC
)
go
/*==============================================================*/ /* Index: 班级_FK */
/*==============================================================*/ create index 班级_FK on student (
sno6 ASC
)
go
/*==============================================================*/ /* Table: teacher */
/*==============================================================*/
create table teacher (
tno1 int not null,
tname1 char(20) null,
tage1 int null,
tps1 char(10) null,
constraint PK_TEACHER primary key (tno1)
)
go
/*==============================================================*/ /* Table: 任课 */
/*==============================================================*/ create table 任课 (
cno1 int not null,
tno1 int not null,
constraint PK_任课 primary key (cno1, tno1)
)
go
/*==============================================================*/ /* Index: 任课_FK */
/*==============================================================*/ create index 任课_FK on 任课 (
cno1 ASC
)
go
/*==============================================================*/ /* Index: 任课2_FK */
/*==============================================================*/ create index 任课2_FK on 任课 (
tno1 ASC
)
go
/*==============================================================*/ /* Table: 奖惩 */
/*==============================================================*/ create table 奖惩 (
Rewards1 char(30) not null,
punishment1 char(30) not null,
sno1 int not null,
constraint PK_奖惩 primary key (Rewards1, punishment1, sno1)
)
/*==============================================================*/ /* Index: 奖惩_FK */
/*==============================================================*/ create index 奖惩_FK on 奖惩 (
Rewards1 ASC,
punishment1 ASC
)
go
/*==============================================================*/ /* Index: 奖惩2_FK */
/*==============================================================*/ create index 奖惩2_FK on 奖惩 (
sno1 ASC
)
go
/*==============================================================*/ /* Table: 查询成绩 */
/*==============================================================*/ create table 查询成绩 (
sno2 int not null,
cno2 int not null,
sno1 int not null,
constraint PK_查询成绩 primary key (sno2, cno2, sno1)
)
go
/*==============================================================*/ /* Index: 查询成绩_FK */
/*==============================================================*/ create index 查询成绩_FK on 查询成绩 (
sno2 ASC,
cno2 ASC
)
go
/*==============================================================*/ /* Index: 查询成绩2_FK */
/*==============================================================*/ create index 查询成绩2_FK on 查询成绩 (
sno1 ASC
go
/*==============================================================*/ /* Table: 选修 */
/*==============================================================*/ create table 选修 (
sno1 int not null,
cno1 int not null,
constraint PK_选修 primary key (sno1, cno1)
)
go
/*==============================================================*/ /* Index: 选修_FK */
/*==============================================================*/ create index 选修_FK on 选修 (
sno1 ASC
)
go
/*==============================================================*/ /* Index: 选修2_FK */
/*==============================================================*/ create index 选修2_FK on 选修 (
cno1 ASC
)
go
alter table Dropped
add constraint FK_DROPPED_退学2_STUDENT foreign key (sno1)
references student (sno1)
go
alter table student
add constraint FK_STUDENT_住宿_DROP foreign key (sno4)
references "drop" (sno4)
go
alter table student
add constraint FK_STUDENT_班级_CLASS foreign key (sno6)
references class (sno6)
go
alter table student
add constraint FK_STUDENT_退学_DROPPED foreign key (sno3)
references Dropped (sno3)
go
alter table student
add constraint FK_STUDENT_选校_COLLEGE foreign key (no1)
references college (no1)
go
alter table 任课
add constraint FK_任课_任课_COURSE foreign key (cno1)
references course (cno1)
go
alter table 任课
add constraint FK_任课_任课2_TEACHER foreign key (tno1)
references teacher (tno1)
go
alter table 奖惩
add constraint FK_奖惩_奖惩_REWARDS foreign key (Rewards1, punishment1) references Rewards (Rewards1, punishment1)
go
alter table 奖惩
add constraint FK_奖惩_奖惩2_STUDENT foreign key (sno1)
references student (sno1)
go
alter table 查询成绩
add constraint FK_查询成绩_查询成绩_GRADE foreign key (sno2, cno2) references grade (sno2, cno2)
go
alter table 查询成绩
add constraint FK_查询成绩_查询成绩2_STUDENT foreign key (sno1) references student (sno1)
go
alter table 选修
add constraint FK_选修_选修_STUDENT foreign key (sno1)
references student (sno1)
go
alter table 选修
add constraint FK_选修_选修2_COURSE foreign key (cno1) references course (cno1)
go