1、欠款金额借书数目借阅人续借次数图书捐赠人是否可借电话破损情况捐赠日期应还日期借阅日期遗失情况类别编号管理员欠款状态实际归还时间续借状态借阅 联系电话管理捐赠三、逻辑结构设计学生(学号,姓名,电话,)图书(编号,名称,类别,破损情况)借书表(书号,借阅者学号,借阅时间,应还日期,是否续借,欠款状态,实际还书时间)捐书表(捐书人学号,书编号,捐书时间)注:红色部分为修改部分四、物理结构设计 数据库名:BOOK数据库物理文件初始大小:20 MB是否允许自动增长:是自动增长方式:每次增加10%最大数据容量:不受限是否自动收缩:是否是只读数据库:否 事务日志文件位置:e:data 事务日志文件初始大小:
2、2MB事务日志文件最大数据容量:30MB创建如下数据表: 学生表结构表名Student作用记录学生信息列名数据类型长度是否允许为空字段说明SNamevarchar50学生姓名SNumber11主键,学号SP图书表结构Book记录书籍信息BNumber15主键,书籍编号BNamevarchar 书名BKind100书籍类别Situation200SFKJBit1是否可借(1为可借,0为不可借)借书表Borrow储存书籍借阅信息BNo外键,引用Book表中的主键BNumber,BNo和SNo共同作为主键SNo外键,引用Student表中的主键SNumberBTimeDatetime8借阅日期, Y
3、HRQdebtfloat4逾期不还,以每天0.1元计费,欠款为1,不欠款为0欠款金额(欠款为1否则为0)XJSJSJdatetime实际还书时间捐书表Juanshu存储捐书信息JSNo外键,引用Student表中的主键s_numberJBNo外键,引用Book表中的主键BNumber, JSNo和JBNo共同作为主键JTime捐书时间, 捐出的书自捐赠日起三个月内不准取回;1.视图a.视图名称:借书信息;显示:书编号,书籍名,借书人学号,借书人姓名。(选择字段,重命名列名,连接查询)create view 借书信息asselect BNumber as书编号,BName as书籍名,SNo a
4、s借书人学号, SName as借书人姓名from Borrow inner join Bookon BNo =BNumber inner join Studenton SNo = SNumberb.视图名称:捐书信息;书编号,书籍名,捐书人学号,捐书人姓名,捐赠天数 CREATE view 捐书信息select JBNo as BName as JSNo as 捐书人学号SName as 捐书人姓名捐赠天数= Datediff(day, JTime ,getdate() )from Juanshu inner join Book on JBNo = BNumber inner join St
5、udenton JSNo =SNumberc.视图名称:没有借出的书;书编号,书籍名,未借出,即未借出的书列表(条件查询)create view 没有借出的书籍, BName as ,SFKJ as 未借出from Bookwhere state=1d.视图名称:已被借出的书;书编号,书籍名,被借出,即已借出书籍列表(条件查询)create view已被借出的书 BName as , SFKJ as 已借出where SFKJ =0e.视图名称:捐书最多者;显示:学号,姓名,捐书总量(top关键字,分组,排序)create view 捐书最多者select top 1 JSNo as 学号,
6、SName as 姓名,count(JSNo) as 捐书总量from Juanshu inner join Studenton JSNo = SNumber group by JSNo , SName order by count (JSNo) descf.视图名称:是否更换新书;书籍名,完好的书(模糊查询)CREATE view是否更换新书select BNumber as BName as Situation as 破损情况where Situation like 完好2.存储过程:a.创建一个名为借阅情况的存储过程,实现输入书编号,查询该书籍的借阅情况。(书名,是否可借,借书人姓名,借
7、书时间,应归还时间,实际归还时间)create proc借阅情况jy as char(11)beginselect BName as 书名 SFKJ as 是否可借 SName as BTime as 借书时间 YHRQ as 应归还时间 SJSJ as 实际归还时间on Bno = BNumber inner join Studenton SNo = SNumber where jy= BNumber end GO执行该存储过程:exec shujxinx19b.创建一个名为捐书人的存储过程,输入书编号,查询该书的捐书者,捐书时间。create proc 捐书人xs as char(11)s
8、elect JSNo as 捐书人书籍名称,Jtime as 捐书时间from Student inner join Juanshuon SNumber = JSNo where xs= JBNo endexec捐书人3执行结果:c.创建一个名为xsjies的存储过程,输入学号,查询该学生的借阅信息。create proc xsjiesxh as char(11)select js_BID as 借书编号 b_name as js_time as js_returntime as js_xujie as 是否续借 js_qiankuan as 欠款状态from Jieshu inner joi
9、n Bookon js_BID=BID inner join Studenton js_num=s_numberwhere xh=s_numberendexec xsjies201011012343.触发器:a.(级联删除)在Student上创建一个名为studelete的触发器,实现的功能,当在Student表中删除一条记录后,在Juanshu表和Jieshu表中删除与此学号对应的记录。CREATE trigger studeleteon Studentinstead of deletedeclare xh as char(11)select xh=s_number from deletedprint 开始查找并删除了Student表中的记录!delete from Juanshuwhere xh=jus_num删除了Juanshu表中学号为:+rtrim(xh)+的记录delete from Jie