还剩3页未读,继续阅读
文本内容:
课程设计报告年月日课题数据201016库设计目的和要求掌握数据库需求分析
1.掌握数据库概念结构设计与逻辑结构设计方法
2.掌握创建表、约束的方法
3.操作内容创建学生成绩管理系统通过需求分析确定表结构、分几个表
1、表中需哪些列,列名、数据类型、长度;
2、可否为空值;(表示未知、不可用或将在以后添加数据)
3、是否需使用约束、缺省值或规则;
4、是否使用索引及索引类型;
5、哪些是主键,哪些是外键6操作方法和步骤
一、数据需求分析对于学生成绩管理系统,我们要录入学生的所有资料,但是如果把所以的信息都录入一个表中,这个表就会很复杂,且表的容量会非常大,占了很多的存储空间,操作起来也十分不方便,添加数据或是修改数据就很麻烦,尤其是用代码查询的时候,服务器就很慢所以我们要将表细分先建一个大表,即学籍表,里面保存学生的最基本,且一般不改变,还要只有一个值的项,如学号,姓名,性别,出生日期,民族,政治面貌,班级,专业,部门,这里就包含了学生大部分的信息但是这里还漏掉了与学生密切相关的成绩和所学课程,因一个同学要学多门课程就要有多个成绩,所以我们考虑把成绩和课程单独拿出来的放在一个表中但是要和两个表连起来才能知道成绩表里的成绩是谁的啊,所以要在这个表里建一列与学籍表里的一列相同的,才能解决问题考虑到要节约存储空间,还要保证列里的值是唯一的,所以选择学号列最合适但是在建表的时候发现很多学生都学了一门课程,所以这个课程名称要在这个表里输入很多次,这也浪费了大量的空间,这里我们又开始考虑建课程表了,同样要知道成绩表里的成绩是什么课程的,我们就开始考虑给课程编号了,再在成绩表和课程表里都添加一列课程代号就行了学校为了方便管理,也要建立相应的表,如部门表,专业表,班级表,这些表比较简单,一般是一个代号和一个名称列为了避免错误,这些独立的表也最好连起来,有了建课程表的经验,我们也考虑给部门,专业,班级编号既然在这里给班级编了号,那么在学籍表里我们就可以把班级名称列改为班级代号列,这又使我们节约了大量的存储空间同时在专业表和班级表列都建立一个专业代号列,在部门表和专业表里都建立一个部门代号列,这样,我们就把所有的表连起来了.用户表则是用来存储登录到数据库系统的人
二、涉及到的表1:学籍表字段名称类型长度键名特殊属性学号Char8主键只能为字符姓名Varchar12只能为汉字性别char2默认为男出生日期Smalldatetime不能为空民族varchar8默认为汉族政治面貌varchar12默认为团员班级代号int外键不能为空籍贯varchar20不能为空联系电话varchar16不能为空家庭住址varchar20不能为空2:班级表键名字段名称类型长度特殊属性班级代号int主键自动增长,级联学籍表班级名称varchar12唯一不能为空专业代号Int外键级联专业表3:专业表字段名称类型长度键名特殊属性专业代号Int主键自动增长专业名称varchar12唯一不能为空部门代号tinyint外键级联部门表班级人数Int不能为空4:部门表字段名称类型长度键名特殊属性部门代号Tinyint主键自动增长部门名称varchar12唯一不能为空5:成绩表字段名称类型长度键名特殊属性学号Char8联合主键级联学籍表课程代号int联合主键级联课程表成绩tinyint不能为空6:课程表字段名称类型长度键名特殊属性课程代号Int主键自动增长课程名称varchar12唯一不能为空7:用户表字段名称类型长度键名特殊属性用户名varchar20不能为空密码varchar20不能为空权限char10默认为普通用户
三、存储过程、视图、触发器存储过程为了防止有人利用非法方式登录,在学生成绩管理系统中创建了两个存储过程,名称分别为proAdmininfo和proMemberlnfOo存储过程proAdminlnfo中,定义了两个输入参数,用于系统管理员登录网站的姓名和密码,创建该存储过程的SQL语句如下CREATE PROCEDUREguanliyuan@AdminName varchar20,@AdminPwd varchar20asselect*from用户表where用户名二@AdminNanie and密码二@AdminPwdGO存储过程proMemberlnfo中,定义了两个输入参数,用于存储普通用户登录网站的姓名和密码,创建该存储过程的SQL语句如下CREATE PROCEDUREyonghu©MemberName varchar20,©MemberPwd varchar20asselect*from用户表where用户名=@MemberName and密码二蒯emberPwdGO建立一个输入学号查学生成绩的存储过程create procchengji@xuehao char8asselect a.学号,姓名,成绩,课程名称from学籍表a,成绩表b,课程表cwhere a.学号二b.学号and b.课程代号二c.课程代号and学号二@xuehaogo根据输入的学号和课程名称删除该学生该课程表的成绩create procshanchu@a char6,@b varchar16asdelete成绩表from成绩表a,课程表bwhere a.课程号二b.课程号and学号二@a and课程名称二@b go可往成绩表中添加一条记录create proctianjia@a char8,@b int,@c tinyintasinsert成绩表values@a,@b,@c go视图按系将学生的不及格的课程查询出来create viewbujige asselecta.学号,姓名,课程名称from学籍表a,成绩表b,课程表c,班级表dwhere a.学号二b.学号and b.课程代号二c.课程代号and成绩<60and a.班级代号二d.班级代号group by专业代号,a.学号,姓名,课程名称go触发器当某班已经有学生时不能修改或删除该班的资料班级表create triggerbanji onfordelete asifEXISTSselect*学籍表班级表from a,b班级代号」,班级代号where a.,该班有学生,不能删除‘printrollbackgo学籍表create triggerbanji onforinsert as,请将该同学的班级人数更新‘print go设计后总结通过本次课程设计,我们了解了数据库需求分析的方法,理解了数据库概念结构设计与逻辑结构,复习了创建表、约束的方法,以及建立视图和触发器的设计,并大体完成了建立一个小型数据系统的建立和管理建立系统的初期,数据的分析尤其重要,有多少种数据要保存?我在建立的时候把数据分为三类,一类是一般不改变的,一类是要保存多个数据的,另一些是经常变化的然后再在这三类中去看那些逻辑上是紧密相关的数据就放在一个表中,这可以作为一个划分表的依据确定好各单个的表之后,一般把列名最多的表作为一条主表,可以将其看做是树的茎,其他的表则是依附在树茎上的树枝,它们组合在一起就是一个完整的生命体,一个完整的数据库系统连接它们的关节时,我们一般要在其上面建相同的列,而遵照数据库是越精简越好的原则,添加的列取编号的列最合适,因为数字的存储空间是最少的在这些关节点的地方,为了保证数据的正确性,要在编号列的主表建立主键,在外表建立外键,如果一个表里面有两列在其他表是主键,则要将这两列一起设为主键对于常用的大范围的查询,我们应该写一个视图就可以了而经常用,但是查询的单位很小的时候,我们一般要建立一个存储过程,因为这样的查询单位往往是一个类似函数一样的变量在独立对表进行操作的时候,就需要编写触发器了。