您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 期末大作业:数据库设计
1期末大作业:学生毕业设计数据库设计一、实验目的(1)掌握数据库设计的基本方法(2)掌握各种数据库对象的设计方法二、实验内容1.数据库概要设计:用文字简要描述实体之间的联系,画出E-R图(标出各联系中实体的基数)。实体之间关系:主要是以学生基本信息这个实体为一个中心,首先涉及的就是实习单位信息的问题,这个部分是一个实习单位对应多个学生的关系,再后就是论文的问题,这个也是一个论文对应多个学生,而一个学生只能对应一个论文题目的关系,最后涉及的一个就是学生和导师之间的关系,这部分又可以分为两种情况,主要是视学生的实习方式而定,分校内实习和校外实习两种,在校内实习中,是一个学生对应一个老师,而一个老师则可以对应多个学生的关系,校外实习的情况稍有不同,一个学生可以对应两个老师,而一个老师则可以对应多个学生的关系。下面是实体关系图:2、数据表设计:将E-R图转换为数据表,给出创建各表的SQL语句。数据库的创建:createdatabase学生毕业设计onprimary(name=学生毕业设计,filename='f:\学生毕业设计.mdf',size=20mb,maxsize=50mb,学生信息校内教师信息校外教师信息论文信息实习选择指导指导(0,n)(1.1)1n(1,1)(0,n)n1(1,1)1n(0,n)(0,1)(0,n)n1实习单位信息2filegrowth=10%)logon(name=学生毕业设计_log,filename='f:\学生毕业设计_log.ldf',size=15mb,maxsize=30mb,filegrowth=10%)go建表:use学生毕业设计createtable实习单位信息(单位编号char(4)notnull,实习单位varchar(50)notnull,联系电话varchar(20),通信地址varchar(50),邮编char(6),primarykey(实习单位))createtable校内教师信息(教师编号char(4)notnull,校内教师varchar(20)notnull,性别char(2),专业名称varchar(20),职称varchar(20),职务varchar(20),primarykey(校内教师))createtable校外教师信息(教师编号char(4)notnull,校外教师varchar(20)notnull,性别char(2),部门varchar(20),职称varchar(20),职务varchar(20),primarykey(校外教师))createtable论文信息(论文IDchar(6),论文题目varchar(50)notnull,要求varchar(100),primarykey(论文题目))createtable学生基本信息(学号char(8)notnull,姓名varchar(20)notnull,性别char(2),出生日期datetime,3专业名称varchar(20)notnull,籍贯varchar(20),实习单位varchar(50),校内教师varchar(20)notnull,校外教师varchar(20),论文题目varchar(50),primarykey(学号),foreignkey(实习单位)references实习单位信息(实习单位),foreignkey(校内教师)references校内教师信息(校内教师),foreignkey(校外教师)references校外教师信息(校外教师),foreignkey(论文题目)references论文信息(论文题目))3、完整性约束:根据需要给数据表添加数据完整性,并说明添加的理由。完整性约束:Createrulephone_ruleAS@联系电话Like'([0-9][0-9][0-9][0-9])-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'use学生毕业设计execSp_bindrulephone_rule,'学院信息.专业电话'(为了约束电话号码形式,保证数据的完整性和正确性)createrulecode_ruleas@codelike'[0-9][0-9][0-9][0-9][0-9][0-9]';use学生毕业设计execSp_bindrulecode_rule,'实习单位信息.邮编';(保证邮编的正确性)Createrulelunwen_ruleAS@codeLike'[l][w][0-9][0-9][0-9][0-9]';use学生毕业设计execSp_bindrulelunwen_rule,'论文信息.论文ID';(确定论文编号的格式,保证数据的完整性以避免数据库的混乱和输入信息时产生欺骗)CREATErulexuehao_ruleas@codelike'[2][0][0][9][0-9][0-9][0-9][0-9]';use学生毕业设计execSp_bindrulexuehao_rule,'学生基本信息.学号';(确定学号的格式,保证学生身份的真实性)createrulea_ruleas@codelike'[a][0-9][0-9][0-9]';use学生毕业设计execSp_bindrulea_rule,'校内教师信息.教师编号';(确定教师编号的格式,保证教室身份的真实性)4createruleb_ruleas@codelike'[b][0-9][0-9][0-9]';use学生毕业设计execSp_bindruleb_rule,'校外教师信息.教师编号';(确定教师编号的格式,保证教室身份的真实性并与校内教师编号区分)4、存储过程、触发器和视图:根据需要给数据库添加几个实用的存储过程、触发器和视图,并说明它们各自的功能。查询:use学生毕业设计select学号,姓名,学生基本信息.性别,学生基本信息.校内教师,职称,职务from学生基本信息,校内教师信息where学生基本信息.校内教师=校内教师信息.校内教师and学生基本.校内教师='孙贝贝'use学生毕业设计select*from学生基本信息where校外教师isnotnull;use学生毕业设计select*from学生基本信息5返回指导老师与其指导的学生名字的存储过程:CreateProc校内指导情况asselect校内教师信息.校内教师,学生基本信息.姓名from校内教师信息innerjoin学生基本信息on校内教师信息.校内教师=学生基本信息.校内教师return查看:execsp_depends校内指导情况返回学生实习情况的存储过程:createproc学生实习asselect*from学生基本信息return查看:execsp_depends学生实习6创建视图:createview学生与指导老师情况asselect学号,姓名,专业名称,校内教师,校外教师from学生基本信息查看视图:触发器:一位教师指导学生人数不得超过10人use学生毕业设计goCREATETRIGGERlxx_6ON学生基本信息afterinsertAsbeginif(selectCOUNT(distinct姓名)from学生基本信息,校内教师信息where(学生基本信息.校内教师=校内教师信息.校内教师and学生基本信息.校内教师='孙贝贝'))10print'一个老师指导学生不能超过十人!'endgo职称不到副教授、教授级别的教师只能指导本专业学生use学生毕业设计goCREATETRIGGERlxx_7ON学生基本信息afterupdate7Asselect职务,学生基本信息.专业名称from校内教师信息,学生基本信息if校内教师信息.职务'副教授'or校内教师信息.职务'教授'and校内教师信息.专业名称=学生基本信.专业名称beginprint'此老师只能指导本专业学生!'endgo5、实验小结:这次的实验把我们这学期所学的数据库知识全部综合在了一起,其实开始学习数据库的时候,并没有想到数据库设计要花费那么多的心思和想法,首先吧,要设计之前,总体的需求分析是必须的,再后就是分析实体以及实体关系,这套方法还是很有效的,尤其对我们这样数据库的初学者来说,最起码我觉得是最正常的设计思维了。这个学期的另外一门课程,专业实训上,我们小组的项目也是和数据库系统设计挂钩的,在整体数据库设计学习之前,我们就已经先学会数据库的需求分析等等了,只是还是没有做的很到位,因为对数据完整性这一块知识的缺乏,所有涉及的数据库是很简单的,也是不严谨的,不安全的,总的看来说,我觉得数据库设计的好与否和数据完整性这一部分是很有大的关联的。这次的实验我还是花了心思的,从复习数据库设计再到熟悉个数据完整性约束等,使我对数据库设计和刚学时有了很大的不同认识。虽然在此过程中也出现了一些问题,或者说我的数据库设计不一定很完美,但至少我在这个过程中还是掌握了很多数据库设计的知识,也加深了对数据库安全性的认识,收获还是不错的。
本文标题:期末大作业:数据库设计
链接地址:https://www.777doc.com/doc-7272608 .html