学生成绩管理第1章设计目的与要求1.1设计目的本实践课的主要目的是:掌握运用管理系统及数据库原理知识进行系统分析和设计的方法;掌握关系数据库的设计方法;掌握SQLServer2000技术应用;掌握简单的数据库应用程序编写方法;理解C/S模式结构。1.2设计环境Windowsxp,VisualBasic6.0,SQLServer2000,SQLServer2000桌面引擎1.4设计内容及要求一、内容1.要求根据管理信息系统及数据库设计原理,按照数据库系统设计的步骤和规范,完成各阶段的设计内容。2.需求分析具体实际,数据流图、数据字典、关系模型要正确规范3.在sqlserver2000上实现设计的数据库模型。4.对应用程序进行概要设计。二、要求设计过程中,要严格遵守课程设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出课程设计报告。第2章设计内容2.1数据库设计1.1需求分析1.学生管理系统总共包括四个表学生信息表student、教师信息表teacher、成绩表score和课程表course。Student表:在建表时,除了添加学号、姓名、班级必要字段,还添加一些其他的字段,比如:出生日期、性别、邮箱地址和类型等。Teacher表:在建表时,除了添加教师编号,教师姓名,部门必要字段,还可以添加一些其他的字段,比如:出生日期、性别、和电话等。Score表:此表应该包括学生学号、课程号和成绩等。Course表:应包括课程号,对应的课程名称和教此课程的教师编号。(1)、建立一个数据库,然后在此数据库中建立这四个数据表。(2)、向表中添加记录。(3)、用一些查询语句来查看表中的特定记录。(4)、向表中添加一些字段。如:向teacher表中添加字段tel(5)、创建一个自定义数据类型,并修改student表中的某个字段为此数据类型。(6)、创建几个视图查询某个班级的学生信息查看每门课程的平均成绩查看选修计算机课程的学生信息查看所有男教师和所有男学生的信息2.1.2概念设计四个表的E-R实体模型图分析:1NNM在教学管理中,学校开设若干门学科,一个教师可以教授其中的一门或多门课程,每个学生也需要学习其中的几门课程,因此,教学管理中涉及的对象(实体型)有学生、教师和课程。用E-R图描述它们之间的联系。如图所示。其中,学生与课程是多对多的联系,而教师与课程的联系则是一对多。这四个表的总的实体-关系图教师学生学教学生信息表学号课程号号出生日期课程号号学号课程号性别课程号出生日期课程号教师姓名课程号班级课程号号设计数据表在此学生成绩信息中有4个表需要建立学生信息表(student)包括学号(sno)、姓名(sname)、性别(Ssex)、班级(class)、出生日期(sbirth)教师信息表(teacher)包括教师编号(tno)、姓名(tname)、性别(Tsex)、部门(depart)、职称(prof)、出生日期(tbirth)成绩表(score)包括学号(sno)、课程号(cno)、成绩(degree)课程信息表(course)包括课程号(cno)、课程名称(cname)、教师编号(tno)2.1.3逻辑设计逻辑结构设计阶段的任务是将概念结构设计阶段所得到的概念模型转换为具体DBMS所能支持的数据模型(即逻辑结构),并对其进行优化。逻辑结构设计一般分为三步进行:从E-R图向课程表教师信息表课程名称课程号号成绩课程号号教师编号课程号号职称课程号号部门课程号号课程号课程号号关系模式转化数据库的逻辑设计主要是将概念模型转换成一般的关系模式,也就是将E-R图中的实体、实体的属性和实体之间的联系转化为关系模式。一个实体类型转换为一个关系模型,将每种实体类型转换为一个关系,实体的属性就是关系的属性,实体的关键字就是关系的关键字。将“学生”实体转换为一个关系模型,其中,带下划线的属性为主键,该主属性为关系模型外键。主键是一个表通过一个列或多个列组合的数据来唯一标识表中的每一行,这个列或列组合就被称为主键,煮件可以来强制实体完整性。主键约束有以下特征和作用:(1)主键约束通过不允许一个或多个列输入重复的值来保证一个表中所有行的惟一性,使所有浪都是可以区分的。(2)一个表张只能有一个主键,且组成主键的列的数据都不能取空值。(3)当定义主键约束时,SQLserver在主键列上建立惟一性索引,这个索引在煮件被查询时可以加快查询的速度。在teacher表中,以教师编号tno为主键,对其进行惟一性约束。在Course表中,以课程号为主键,对其进行惟一性约束。2.1.4物理设计1.存储结构存储结构是建立一种由逻辑结构到存储空间的映射。存储结构是把一组结点存放在按地址相邻的存储单元里,结点间的逻辑关系用存储单元的自然顺序关系来表达的,即用一块存储区域存储线性数据结构,为使用整数编码访问数据结点提供了便利。2.索引的创建为schoolgrade表创建一个以grade_id为索引的关键字的唯一聚簇索引1)展开数据库中的表右键学生表,单击所有任务弹出的索引管理。2)在窗体点新建索引名称为grade_name,点击复选框“聚簇索引”、“惟一值”。3.事务日志文件备份及存放SQLServer创建数据库的时候,会同时创建事物日志文件,事物日志存储在一个单独的日志文件上。在修改写入数据库之前,事物日志会自动地记录对数据库对象所做的所有修改,事物日志有助于防止数据库损坏。日志文件与数据文件要分开放在不同的磁盘上,这样事物日志就可以单独的备份,事务日志不会抢占数据库的空间,可以很容易的监测事务日志的空间。4.存取方法:数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用要求。物理设计的任务之一就是要确定选择哪些存取方法,即建立哪些存取路径。存取方法是快速存取数据库中数据的技术。数据库管理系统一般都提供多种存取方祛。常用的存取方法有二类。第一类是索引方法,第二类是聚簇(Cluster)方法。索引方法是数据库中经典的存取方法,使用最普遍。索引法是为了加速对表中的数据行的检索而创建的一种分散的存储结构。是针对一个表而建立的,它能够以一列或多列的值为关键字,迅速查找/存取表中行数据加快了数据检索。整个系统需要调用学生表、成绩表等,所以学生表属性“学号”,成绩表表中的属性“学号”,将经常出现在查询条件中,可以考虑在上面建立聚簇索引以提高查询效率。数据库模式定义1、Student表:snoChar(8)不允许为空snameChar(10)不允许为空SsexChar(2)不允许为空sbirthDatetime(8)允许为空classChar(4)不允许为空typeChar(7)允许为空score表结构:snoChar(8)不允许为空cnoChar(5)不允许为空degreeFloat(8)不允许为空Course表:以课程号为主键,通过这个主键来对这个表进行唯一性约束。cno(主键)Char(5)不允许为空cnamevarchar(10)不允许为空tnochar(3)不允许为空Teacher表结构:Tno(主键)Char(5)不允许为空tnamevarchar(10)不允许为空departVarchar(8)不允许为空tsexChar(2)不允许为空tbirthdatatime允许为空profChar(6)允许为空六、其他对象的说明:(1)、外键约束(primarykey):外键也是由表中的一个列或多个列组成的,它是和在相关表中事先定义的具有惟一性的列一起使用的,该列一个是所在表的主键。外键约束用来建立和强制两个表之间的关联,即一个表的一个列或列组合与另一个表的具有惟一性的列或列组合相关,这个列或列组合就成为第一个表中的外键外键约束限制将破坏这种关联的操作。作为外键的列的值可以是空值,或是它所引用的表中已经存在的值。在score表中,其学号sno和课程号cno都是此表的外键约束,因为此表中学号sno要受学生信息表中的学号的约束,student表中没有的学号,score表中也应该没有,如果向score表添加数据时违反的此规则,则添加不成功。课程号cno也同样,受到course表中课程号cno的约束.。(2)、空值(null):空值意味着数据尚未如,它与0或长度为零的字符串(“”)的含义不同。如果表中的某一列必须有值才能使记录有意义,那么可以指明该列不允许取空值。在教师信息表teacher中其出生日期列tbirth和职称prof允许为空,但并不表示该教师没有生日,没有职称,而是目前还不知道而已。在学生信息表student中其出生日期sbirth也可为空,也是同样的道理。(3)、check约束:检查约束可以用来限制列上可以接受的数据值,检查约束使用逻辑表达式来限制列上可以接受的数据。可以在一个列上使用多个检查约束,也可以在表上建立一个可以在多个列上使用的检查约束。比如:在学生信息表中,邮件地址semail的格式必须是%@%格式的。(4)、惟一性约束:使用惟一性约束的作用是保证在不是主键的指定惟一性的列上不会出现重复的数据。定义了惟一性约束的列上的数据可以为空值,一个表上可以定义多个惟一性6.数据库实施阶段1、创建数据库:createdatabasesshon(name=ssh,filename='e:\老大\sql\ssh.mdf',size=1)logon(name=ssh1,filename='e:\老大\sql\ssh1.ldf',size=1)2、创建数据表(1)、student表usesshcreatetablestudent(snochar(8)primarykey,snamechar(10)notnull,Ssexchar(2)notnull,Sbirthdatetime,classchar(4)notnullsemailvarchar(20))(2)、score表createtablescore(snochar(8)notnull,cnochar(4)notnull,degreefloatnotnull)(3)、course表createtablecourse(cnochar(5)notnullprimarykey,cnamevarchar(10)notnull,tnochar(3)notnull)(4)、teacher表createtableteacher(tnochar(5)notnullprimarykey,tnamevarchar(10)notnull,departvarchar(8)notnull,Tsexchar(2)notnull,Tbirthdatetime,profchar(6))4向表中添加记录(1)、向学生信息表中添加insertintostudentvalues('101','生活','女','1983-09-18','11')insertintostudentvalues('102','风尘','男','1984-01-01','11')insertintostudentvalues('103','离开','男','1984-01-01','11')insertintostudentvalues('104','流浪','女','1984-11-11','11')insertintostudentvalues('105','生命','男','1984-12-05','13')insertintostudentvalues('106','无悔','女','1984-11-01','13')insertintostudentvalues('107','历史','女','1984-10-01','12')insertintostudentvalues('108','风尘','男','1985-9-08','11')insertintostudentvalues('109','活着','男','1985-12-12','12')insertintostudentvalues('110','傻瓜','女'