华南理工大学-计算机学院-数据库-实验二-报告(共19页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《华南理工大学-计算机学院-数据库-实验二-报告(共19页).doc》由会员分享,可在线阅读,更多相关《华南理工大学-计算机学院-数据库-实验二-报告(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上华南理工大学数据库课程实验报告实验题目: 实验二:数据库的安全和完整性约束 姓名: 学号: 班级: 17计科一班 组别: 无 合作者: 无 指导教师: 董守玲 实验概述【实验目的及要求】实验目的: 通过创建视图、触发器,设计安全机制等方式掌握数据库的安全和完整性的设计。实验要求:1采用实验一的建库脚本和数据插入脚本创建Student数据库,并完成以下操作:1)新增表Credits(SNO,SumCredit,NoPass),表示每学生已通过选修课程的合计学分数,以及不及格的课程数。2)创建视图Student_Grade(Sname,Cname,Grade),表示学生选
2、修课程及成绩的详细信息。2.在数据库中创建以下触发器:1)Upd_Credit要求:当在SC表中插入一条选课成绩,自动触发Upd_Credit,完成在Credits表中修改该学生的合计学分数和不及格的课程数。2)Upd_StuView(Instead of触发器)要求:当对视图Student_Grade作插入数据项操作时,自动触发Upd_StuView,完成对SC表的插入操作。如:当执行Insert into Student_Grade values(王刚,数据库,54)则触发器完成另一插入操作:Insert into SC values(,CS-110,54)另外,需要检查当前插入的学生和课
3、程是否已在Students,和Courses表中存在,如不存在,不执行任何操作,并提示用户错误信息。3)PK_SC,FK_SC_SNO,FK_SC_CNO)(选做)要求:首先删除SC中所有主键和外键定义,用触发器实现表SC上的主键(SNO,CNO)和外键SNO,CNO的约束定义。3为Student数据库设计安全机制。要求:在该数据库系统中,有三类用户:1)学生,权限包括:查询所有的课程信息,根据学号和课程号来查询成绩。但不允许修改任何数据。(必做)只能查询自己的成绩,不能查询别人的成绩。(选做)2)老师:权限包括:查询有关学生及成绩的所有信息,有关课程的所有信息,但不允许修改任何数据。3)教务
4、员:权限包括:查询和修改任何有关学生和课程的信息,但不允许查询和修改数据库中其它任何表,视图等数据库对象。要求:安全控制必须仅由数据库一端来实现,不考虑由应用程序来控制。为此,需要创建三个用户,登录时密码验证;分别授予各类权限,并测试权限的控制是否有效。【实验环境】PC机,WINDOWS操作系统,Oracle 或Microsoft SQL Server 数据库实验内容【实验过程】一、 实验步骤:1.登录数据库,使用实验相关数据库2.完成触发器部分: (1)新增数据库并计算插入相关数据(需要辅助表) (2)创建视图 (3)在表的插入过程中建立触发器 (4)在视图的插入过程中创建触发器3. 完成安
5、全性部分: (1)完成三个用户的创建,并测试初始权限 (2)授予学生权限,学生重新登录,测试相关权限有无 (3)授予老师权限,老师重新登录,测试相关权限有无 (4)教务员学生权限,教务员重新登录,测试相关权限有无二、 实验数据: 实验一使用的数据库。三、实验主要过程:1采用实验一的建库脚本和数据插入脚本创建Student数据库,并完成以下操作:1)新增表Credits(SNO,SumCredit,NoPass),表示每学生已通过选修课程的合计学分数,以及不及格的课程数。Step1创建表新增表Credits(SNO,SumCredit,NoPass) 代码:create table Credit
6、s(SNO varchar(15),SumCredit decimal(5,1),NoPass smallint);Step2 创建辅助表tmpSumCredit( SNO varchar(15), SumCredit decimal(5,1) 两个 代码:create table tmpSumCredit(SNO varchar(15),SumCredit decimal(5,1);create table tmpNoPass(SNO varchar(15),NoPass smallint);Step3 向辅助表插入数据 tmpSumCredit tmpNoPass代码:insert int
7、o tmpSumCredit(SNO,SumCredit)select SC.SNO, sum(CREDIT)from Courses,SCwhere SC.CNO=Courses.CNOgroup by SNO;insert into tmpNoPass(SNO,NoPass)select SC.SNO, sum(CASE WHEN GRADE60 THEN 1 ELSE 0 END)from Courses,SCwhere SC.CNO=Courses.CNOgroup by SNO;Step4 向Credit插入数据(通过辅助表) 代码:insert into Credits(SNO,S
8、umCredit,NoPass)select tmpSumCredit.SNO, tmpSumCredit.SumCredit, tmpNoPass.NoPassfrom tmpSumCredit, tmpNoPasswhere tmpSumCredit.SNO=tmpNoPass.SNO; 2) 创建视图Student_Grade(Sname,Cname,Grade),表示学生选修课程及成绩的详细信息。 创建视图 结果 代码:create view Student_Grade(Sname, Cname, Grade)asselect SC.SNO, SNAME, GRADEfrom Stud
9、ents, Courses, SCwhere Students.SNO=SC.SNO and Courses.CNO=SC.CNO; 2.在数据库中创建以下触发器:1)Upd_Credit要求:当在SC表中插入一条选课成绩,自动触发Upd_Credit,完成在Credits表中修改该学生的合计学分数和不及格的课程数。Step1:创建触发器,插入数据,并查看Credits表代码:delimiter /create trigger Upd_Credit after insert on SC for each rowbeginselect CREDIT into Credit from Course
10、s where new.CNO=CNO;update Credits set SumCredit=SumCredit+Credit,NoPass=NoPass+(case when new.GRADE60 then 1 else 0 end) where SNO=new.SNO;end /Step2:结果(Credits前后对比,在插入8 EE1 59 后) 代码:insert into SCvalues(8,EE1,59);2)Upd_StuView(Instead of触发器)要求:当对视图Student_Grade作插入数据项操作时,自动触发Upd_StuView,完成对SC表的插入操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南理工大学 计算机 学院 数据库 实验 报告 19
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内