华北科技学院计算机系综合性实验
实验报告
课程名称数据库原理与应用
实验学期 2009 至 2010 学年第一学期学生所在系部管理系
年级三年级专业班级商务B071班
学生姓名李荣妹学号 4121
任课教师郭红
实验成绩
计算机系制
《数据库原理与应用》课程综合性实验报告
(3)建表如下图:
图书表的结构
读者表的结构罚款表的结构
借阅表的结构密码表的结构
输入数据:图书
读者
S只学生,t指老师,1指没有超期,0表示超期
借阅
罚款
密码:
(4)、创建视图。
以sa的身份登录数据库,创建视图V1,V2,V3
create VIEW V1 create VIEW V2 create VIEW V3
AS AS AS
select * from 图书 select * from 借阅 select * from 罚款
建立视图V5,查看在库的图书:create view V5 as select *from 图书 where 借阅状态=‘在库’
建立已被借出去的图书视图
create view V6
as
select * from 图书
where 借阅状态='出库'
建立逾期未还的图书的学生视图:
create view V7
as
select * from 借阅
where datediff(day,convert(smalldatetime,借出日期),getdate())>’30’ and
借书证号 in(select 借书证号 from 读者,借阅
Where 借阅.借书证号=读者.借书证号 and 读者类别=‘s’
四、物理设计和自定义完整性
建立索引:为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是表中建立索引的表项:
图书表(图书编号,条形码号)读者(借书证号)借阅(借书证号,条形码号)罚款表(借书证号,条形码号)密码(借书证号)
(2)建立触发器
a.对已有借书证的读者进行查询借书是否超期(这里归定30天):
create trigger T1 on 读者
for insert
as
select 借阅.借书证号,读者.读者姓名,图书.图书编号,图书.书名,借阅.借出日期
from 读者,借阅,图书
where 读者.借书证号=借阅.借书证号
and 图书.条形码号=借阅.条形码号
and 读者类别='s'
and Datediff(day,convert(smalldatetime,借出日期),getdate())>=30
b.建立触发器T2(还书时):
create trigger T2 on 借阅
for insert
as
begin
update 图书 set 借阅状态='在库'
where 条形码号=(select 条形码号 from inserted)
update 借阅 set 归还日期=getdate();
update 读者 set 书数=书数-1
where 借书证号=(select 借书证号 from inserted)
end
c.建立触发器T3(借书书时):
create trigger T3 on 借阅
for insert
as
begin
update 图书 set 借阅状态='入库'
where 条形码号=(select 条形码号 from inserted)
update 借阅 set 借出日期=getdate();
update 读者 set 书数=书数+1
where 借书证号=(select 借书证号 from inserted)
end
d.建立触发器T4,实现超出借书数目时禁借(针对老师的):
create trigger T4 on 读者
for insert
as
if(select 书数 from inserted where 读者类别='t'and 书数>'10')
begin
print '该用户不能再借'
rollback
end
e.建立触发器T5,实现超出借书数目时禁借:
create trigger T4 on 读者
for insert
as
if(select 书数 from 读者 where 读者类别=‘s’and 书数>’5’)
begin
print'该用户不能再借'
rollback
end;
五、设置权限
本图书馆系统中权限角色有:系统管理员lrm ,拥有所有的权限
图书管理员lib密码lib,对图书的管理,包括增、删、改、查,借阅表和罚款表的管理,读者表的查询。
读者用户read,对密码表中自己密码的更改,图书表的查询,借阅表的查询。
用户在自己的权限下对表进行管理则可以进行,若超出权限范围则不可,如下图,是以lib 身份登录对读者表进行插入,则不行。
四、实验结果及分析
结果如下:。