《SQL数据库技术》课程设计
一、题目: 学生成绩管理
二、因为我做的是学生成绩管理, 因此数据库中至少有个一个表是来存储学生的各课成绩的。
有了学生成绩, 得知道这个成绩是哪个学生的, 因此此表中也得有学生姓名, 可是学生姓名肯定有重复的 , 因此得必须有个标志来惟一标识一个学生, 因此得给每个学生一个编号( 学号) , 可是也得必须清楚, 这个成绩是哪门课程的, 因此给课程定义了一个编号。
之后, 得想到有了学生成绩表, 总得有个表来存放学生信息吧, 因此又建立一个学生信息表, 此表中的必须的字段得有学号、姓名、班级, 其它的字段能够根据需要来添加。
然后就是得有个课程表来存放哪个教师教哪门课程信息, 因此此表中至少得有课程号, 课程名称和教师的惟一标识( 教师编号) , 再有一个表来存放教师的信息的, 其中的字段必须有教师编号, 教师姓名和所在的部门, 当然也能够有教师出生日期、职称、电话号码等字段。
总之, 这个学生管理系统总共包括四个表学生信息表student、教师信息表teacher、成绩表score和课程表course。
Student表: 在建表时, 除了添加学号、姓名、班级必要字段, 还添加一些其它的字段, 比如: 出生日期、性别、邮箱地址和类型等。
Teacher表: 在建表时, 除了添加教师编号, 教师姓名, 部门必要字段, 还能够添加一些其它的字段, 比如: 出生日期、性别、和电话等。
Score表: 此表应该包括学生学号、课程号和成绩等。
Course表: 应包括课程号, 对应的课程名称和教此课程的教师编号。
( 1) 、建立一个数据库, 然后在此数据库中建立这四个数据表。
( 2) 、向表中添加记录。
( 3) 、用一些查询语句来查看表中的特定记录。
( 4) 、向表中添加一些字段。
如: 向teacher表中添加字段 tel
( 5) 、创立一个自定义数据类型, 并修改student表中的某个字段为此数据类型。
(6)、创立几个视图
⏹查询某个班级的学生信息
⏹查看每门课程的平均成绩
⏹查看选修计算机课程的学生信息
⏹查看所有男教师和所有男学生的信息
( 7) 、创立几个存储过程
●显示成绩表中的课程号在课程表中且所任教师性别为男、计算机系
的成绩表
●显示某学生的学号, 姓名, 所学课程号, 课程名称和对应的成绩
●在执行此存储过程时, 如果没有给出参数( 学生姓名) , 则输入全
部的学生的学号, 姓名, 班级, 任课教师编号及其姓名, 所学课程
名称和成绩, 如果有, 则显示此学生的以上信息。
( 8) 、创立触发器
◆在成绩表中建立一个触发器, 当向表中添加记录时, 此学生的成绩
都乘以1.2
◆检查学生的邮箱地址是否相同, 如果相同, 输出'inserting fail',
而且回滚事务; 如果不相同, 则插入成功。
◆在成绩表建立一个触发器, 在向表中插入记录时, 检验插入的课程
号是否在课程表中的课程号的范围之内。
( 9) 、创立规则, 并绑定
●在向成绩表中添加记录时, 如果成绩degree<0, 则插入不成功。
●在向教师表中添加记录时, 如果电话号码不是0-9的数字, 则插入不
成功。
( 10) 、创立自定义函数和索引
这些都在后面有完整的代码和解释。
三、四个表的E-R实体模型图分析:
在教学管理中, 学校开设若干门学科, 一个教师能够教授其中的一门或多门课程, 每个学生也需要学习其中的几门课程, 因此, 教学管理中涉及的对象( 实体型) 有学生、教师和课程。
用E-R图描述它们之间的联系。
如图所示。
其中, 学生与课程是多对多的联系, 而教师与课程的联系则是一对多。
这四个表的总的实体-关系图:
四、设计数据表: 经过E-R图分析, 现在已经对数据库有一个很清楚的认识了。
在此学生成绩信息中有4个表需要建立
学生信息表( student) 包括学号( sno) 、姓名( sname) 、性别( Ssex) 、班级( class) 、出生日期( sbirth)
教师信息表( teacher)包括教师编号( tno) 、姓名( tname) 、性别( Tsex) 、部门( depart) 、职称( prof) 、出生日期( tbirth)
成绩表( score) 包括学号( sno) 、课程号( cno) 、成绩( degree)
课程信息表( course) 包括课程号( cno) 、课程名称( cname) 、教师编号( tno)
五、表结构
主键是一个表经过一个列或多个列组合的数据来唯一标识表中的每一行, 这个列或列组合就被称为主键, 煮件能够来强制实体完整性。
主键约束有以下特征和作用:
( 1) 主键约束经过不允许一个或多个列输入重复的值来保证一个表中所有行的惟一性, 使所有浪都是能够区分的。
( 2) 一个表张只能有一个主键, 且组成主键的列的数据都不能取空值。
( 3) 当定义主键约束时, SQL server在主键列上建立惟一性索引, 这个索引在煮件被查询时能够加快查询的速度。
在teacher表中, 以教师编号tno为主键, 对其进行惟一性约束。
在Course表中, 以课程号为主键, 对其进行惟一性约束。
1、 Student表:
score表结构:
Course表: 以课程号为主键, 经过这个主键来对这个表进行唯一性约束。
Teacher表结构:
六、其它对象的说明:
( 1) 、外键约束( primary key) : 外键也是由表中的一个列或多个列组成的, 它是和在相关表中事先定义的具有惟一性的列一起使用的, 该列一个是所在表的主键。
外键约束用来建立和强制两个表之间的关联, 即一个表的一个列或列组合与另一个表的具有惟一性的列或列组合相关, 这个列或列组合就成为第一个表中的外键外键约束限制将破坏这种关联的操作。
作为外键的列的值能够是空值, 或是它所引用的表中已经存在的值。
在score表中, 其学号sno和课程号cno都是此表的外键约束, 因为此表中学号sno要受学生信息表中的学号的约束, student表中没有的学号, score表中也应该没有, 如果向score表添加数据时违反的此规则, 则添加不成功。
课程号cno也同样, 受到course表中课程号cno的约束.。
( 2) 、空值(null): 空值意味着数据尚未如, 它与0或长度为零的字符串( ””) 的含义不同。
如果表中的某一列必须有值才能使记录有意义, 那么能够指明该列不允许取空值。
在教师信息表teacher中其出生日期列tbirth和职称prof允许为空, 但并不表示该教师没有生日, 没有职称, 而是当前还不知道而已。
在学生信息表student中其出生日期sbirth也可为空, 也是同样的道理。
(3)、 check约束: 检查约束能够用来限制列上能够接受的数据值, 检查约束使用逻辑表示式来限制列上能够接受的数据。
能够在一个列上使用多个检查约束, 也能够在表上建立一个能够在多个列上使用的检查约束。
比如: 在学生信息表中, 邮件地址semail的格式必须是%@%格式的。
( 4) 、惟一性约束: 使用惟一性约束的作用是保证在不是主键的指定惟一性的列上不会出现重复的数据。
定义了惟一性约束的列上的数据能够为空值, 一个表上能够定义多个惟一性约束。
七、创立数据库、数据表、视图、存储过程、自定义函数、触发器等语句。