还剩51页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
华北科技学院计算机系综合性实验实验报告课程名称网络数据库实验学期2013至2014学年第1学期学生所在系部计算机学院年级2011级专业班级网络工程学生姓名学号任课教师实验成绩计算机系制实验报告须知
1、学生上交实验报告时,必须为打印稿(A4纸)页面空间不够,可以顺延
2、学生应该填写的内容包括封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等
3、教师应该填写的内容包括实验成绩、教师评价等
4、教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档
5、未尽事宜,请参考该课程的实验大纲和教学大纲《网络数据库》课程综合性实验报告开课实验室软件一室2013年11月15日实验题目图书借阅系统数据库设计
一、实验目的通过该实验把数据库的理论知识(数据库和数据表的设计理论、数据完整性的实现、存储过程、触发器、数据库备份、数据库安全等)应用到具体的综合实例中,达到数据库知识整合的目的
二、设备与环境硬件多媒体计算机软件WindowsXP以上的操作系统、SQLServer2008版本
三、实验内容及要求
1.数据库设计要求数据库设计要合理,对数据库设计作必要的说明并抓图2.数据表设计要求数据表设计要合理,要符合数据库设计的理论范式,对数据表设计作必要的说明并抓图3.视图设计要求根据系统需求作必要的视图设计,如在一次查询中涉及到多个表,应该创建视图4.索引设计要求根据系统需求作必要的索引设计,本系统需要的聚集索引、非聚集索引、唯一索引、全文索引等5.数据完整性设计根据系统需求作必要的数据完整性设计,本系统需要的实体完整性体现、域完整性体现、参照完整性体现等6.存储过程和触发器设计根据系统需求作必要的存储过程和触发器设计,本系统需要的存储过程和触发器设计必要的存储过程和触发器设计都要写全说明,图可以是一个表的完整存储过程或触发器7.备份与恢复设计根据系统需求作必要的备份策略8.数据库安全设计根据系统需求作必要的数据库安全设计,如本系统分几级用户、分别是什么角色成员具有什么操作权限等
四、实验结果及分析
1.数据库设计
(1)设计思想图书借阅系统主要涉及业务为读者借阅图书、读者归还图书,涉及主要实体包括读者、图书因此针对图书、读者、借阅、历史借阅设计文件组在实际实现中,可以为每一个文件组指定一个磁盘驱动器,然后将特定的表、索引等与该文件组相关联,对这些表的存储、查询、修改操作都在该文件组中,使用四个文件组可以提高文件组中表中数据的查询性能具体实现设计包含一个主文件组(PRI__RY),四个用户定义文件组(MyDB_FG
1、MyDB_FG
2、MyDB_FG
3、MyDB_FG4)其中主文件组中存放主数据文件MBook
203.mdf,用户定义文件组
1、
2、
3、4分别存放四个辅助数据文件(MyDB_FG1_Data
1.ndf、MyDB_FG2_Data
1.ndf、MyDB_FG3_Data
1.ndf、MyDB_FG4_Data
1.ndf)2.数据表设计
(1)设计思想在实际系统中,读者、图书、借阅、历史借阅,各个表中数据较大,将其放在不同的辅助数据文件中,每一个辅助数据文件分别属于一个单独的文件组而每一文件组又分别指定了不同的磁盘驱动器,因此可以提高对这些表中数据的查询性能具体实现用户定义文件组
1、
2、
3、4中的辅助数据文件分别存放读者表、图书表、借阅表和历史借阅表将读者表(Reader)放在文件组
1、图书表(Book、BookID_I__N)放在文件组
2、借阅表(Lend)放在文件组
3、历史借阅表(HistoryLend)放在文件组
42.1读者表(Reader)属于文件组1
①主键为读者号(ReaderID),因在实际系统中读者号为固定长度,固设置为char12;
②性别(___)数据类型设置为bit,约束为0或1(0女,1男);
③照片(Photo)数据类型设置为varbinary__X,可变长度二进制数据类型,安全性较高,只适合图像容量不是很大的时候;
④地址(Addr)数据类型设置为xml类型,灵活易于扩展,适合于传输和存储数据
2.2图书表(Book)、图书ID与I__N对应表(BookID_I__N)属于文件组2
①图书表主键设置为I__N,因为图书有不同复本,所以另外设置了图书ID,在图书ID与I__N对应表(BookID_I__N)中存放其对应关系;
②图书表中字段库存量(Invnum)和复本量(Copnum)设置约束非空,默认为0;
③图书封面照片(Photo)数据类型设置为可变才二进制数据类型,方便存储
④图书内容概要(Sum__ry)数据类型设置为xml,适合存储和传输
⑤BookID_I__N表中BookID作为主键
2.3借阅表(Lend)属于文件组3
①借阅表中读者号、I__N、图书ID共同作为主键(说明不允许同一读者号,借阅同一I__N号图书);
②读者号(ReaderID)作为外键,参照读者表(Reader)中(ReaderID);
③图书I__N号(I__N)作为外键,参照图书表(Book)中(I__N);
④图书ID号(BookID)作为外键,参照图书I__N号与ID对应表(BookID_I__N)中(BookID)
⑤借书日期(bbt)数据类型为date类型
2.4历史借阅表(HistoryLend)属于文件组4
①历史借阅表中读者号、I__N、图书ID、借书日期、还书日期共同作为主键(说明不允许同一读者号,借阅同一I__N号图书),当同一读者两次借同一本书(先还图书后再借),可以依靠借书日期、还书日期来唯一确定读者两次的借阅、还书记录;
②在历史借阅表中除借书日期(bbt)、还书日期(rbbt)外,其他字段都作为外键,分别参照与其他基本表;
③在读者还书时,采用存储过程,将读者的借书记录插入到历史借阅表,并将还书日期设置为当前系统日期3.视图设计
(1)设计思想
①___可以查看当前读者的借阅情况,可以根据历史借阅表中的数据统计图书的借阅次数;
②读者可以查看自己的借阅记录和其他读者的借阅记录(部分字段,如读者号、院部、专业、所借图书I__N、ID、借书日期、归还日期等)
(2)具体实现
3.1创建视图将读者表、借阅表、图书表连接,根据读者编号、图书I__N号,可将三个表连接,从而实现查看读者当前借阅记录在连接时,由于只用到表中部分字段,所以先在基表中筛选部分字段作为新表,进行连接,可以提高连接效率以下是视图的代码实现,以及从视图中查询得到的当前读者借阅情况的结果
3.2根据历史借阅表中的数据统计图书的借阅次数以下是从视图中查询得到的结果,___可以根据历史借阅表图书的外借次数决定增加哪些图书的复本量,以满足读者需求4.索引的建立
(1)设计思想
①在图书借阅系统中,为了从数据库的大量数据中迅速找到需要的内容,采用类似于书目录这样的索引技术,不必顺序查找,就能迅速查到所需要的内容
②索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表
③聚集索引与非聚集索引的不同之处在于非聚集索引B树的叶子节点不存放数据页信息,而是存放非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行
(2)具体实现
①读者表按读者号(ReaderID)建立主键索引(PRI__RYKEY),__方式为聚集索引;
②图书表按I__N号建立主键索引,__方式为聚集索引;借阅表按读者号(ReaderID)、I__N号、图书ID建立主键索引,__方式为聚集索引;
③图书ID与I__N对应表(BookID_I__N)按图书ID建立主键索引,__方式为聚集索引;
④历史借阅表按读者号(ReaderID)、I__N号、图书ID、借书日期(bbt)、还书日期(rbbt)建立主键索引、__方式为聚集索引;
⑤为图书表的书名、__、库存量(BnameAuthorInvnum)创建非聚集索引;
⑥为读者表的读者号、姓名、借书量(ReaderIDNameNum)创建非聚集索引;
⑦为图书ID与I__N对应表(BookID_I__N)中的的图书I__N字段创建非聚集索引5.数据完整性设计
(1)设计思想
①实体完整性实体完整性又称为行的完整性,要求表中有一个主键,其值不能为空且能唯一地标识对应的记录通过索引、UNIQUE约束、PRI__RYKEY约束或IDENTITY属性可实现数据的实体完整性
②域完整性域完整性又称为列完整性,指给定列输入的有效性实现域完整性的方法有限制类型(通过数据类型)、格式(通过CHECK约束和规则)或可能的取值范围(通过CHECK约束、DEFAULT定义、NOTNULL定义和规则)等
③参照完整性参照完整性又称为引用完整性参照完整性保证主表中的数据与从表(被参照表)中的数据的一致性具体实现
①实体完整性图书表中以I__N号为主键,图书存在不同的复本,在图书ID与I__N对应表中,同一个I__N对应不同的图书ID,以图书ID作为主键;读者表中以读者号作为主键可以唯一确定一个读者;借阅表中以读者号、I__N号、图书ID作为主键(不允许读者同一I__N号图书同时借两本,但是可以还了该书后再接,保证了借阅表中借阅记录的实体完整性);历史借阅表中,以读者编号、I__N、图书ID、借书日期、还书日期作为主键来保证还书记录的实体完整性
②域完整性读者表中读者号设置为char
(12)固定长度,性别约束为CHECK(___=0OR___=1),0女,1男,出生日期设置为date类型,借书数量,设置默认为0;图书表中I__N号设置为varchar16,库存量和复本量设置为int类型,默认为0;借阅表中借书日期字段设置为date类型,且不允许为空;历史借阅表中借书日期、还书日期数据类型也都设置为date类型
③参照完整性图书ID与I__N对应表中,I__N号参照图书表中I__N号;借阅表中读者号参照读者表中读者号,I__N号参照图书表中I__N号,图书ID参照图书ID与I__N对应表中的图书ID;历史借阅表中读者号、I__N号、图书ID也都分别参照于基表中对应字段;当读者借书时,采用借书存储过程,将当前日期作为借书日期字段的值插入到借阅表中;当读者还书时,采用还书存储过程,将读者的借书记录(在借阅表中)插入到历史借阅表中(表明读者已经还书),将当前日期作为还书日期字段的值插入到历史借阅表中采用两个借书、还书的存储过程可以很好的保证了借阅表、历史借阅表和读者表、图书表之间的参照完整性6.存储过程和触发器设计
(1)设计思想
①在图书借阅系统中,主要涉及业务为读者借书、读者还书、书籍检索所以分别针对三个业务创建了存储过程此外还创建了在当前借阅表中查询超期未归还图书的借书记录、在历史借阅表中超期未归还图书的还书记录
②存储过程在服务器端运行,执行速度块;
③存储过程在执行一次后就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能;
④使用存储过程可以完成所有的数据库操作,并通过编程方式控制对数据库信息访问的权限,确保数据库的安全;
⑤可以自动完成需要预先执行的任务存储过程可以在SQLServer启动时自动执行,而不必在系统启动后再进行手工操作,大大方便了用户的使用,可以完成一些需要预先执行的任务
(2)具体实现
6.1在数据库MBook203中创建加密的读者借书存储过程,当向Lend表插入一条记录时
①检查该记录的借书证号ReaderID在Reader表中是否存在;
②检查该记录的图书I__N号是否在Book表中是否存在;
③检查该记录的图书库存量Invnum是否等于0;
④检查该记录是否借阅过该图书;
⑤检查该记录的图书BookID是否在借阅表Lend中已经存在;若有一项为否,则不允许插入,并回滚事务,否则,插入记录并将读者表中该读者借阅数量加1,图书表中库存量减1,并返回借书成功信息满足上述条件,则开始一个事务,将借书记录插入到借阅表中读者表中借书数量(Num)加1,在上面语句中已经执行,接着执行图书表中的图书库存量(Invnum)减1;如果所有语句都不出错,则提交事务并返回借书成功信息,否则,回滚事务,并返回错误信息
6.2在数据库MBook203中创建加密的读者还书存储过程,当删除Lend表中一条记录时
①检查借阅表中是否存在该借阅记录,如果不存在则回滚事务;
②将该记录插入到历史借阅表;
③将该记录的还书日期rbbt获取当前系统时间,并插入到对应记录的还书日期字段;
④将该记录的读者借阅数量减1;
⑤将该记录的图书库存量加1;
⑥返回还书成功信息;若有一项为执行不成功,则不允许删除,并回滚事务满足上述条件,则开始一个事务,将还书记录插入到历史借阅表中接着执行
①删除借阅表中的借书记录;
②更新读者表中的借书数量(Num)减1;
③图书表中的图书库存量(Invnum)加1;如果所有语句都不出错,则提交事务并返回还书成功信息,否则,回滚事务,并返回错误信息
6.3超期未归还图书的借书记录(当前借阅表中)、超期未归还图书的还书记录(历史借阅表中),读者的借书证号、姓名、院部、专业、图书I__N号、书名以及借书日期、当前日期(或还书日期)
①列出当前借阅表中超期未归还图书的借书记录(Book_Current_Overdue)
②读者的借阅期为90天
③计算应还书日期用DATEADD或DATEDIFF函数
④getdate函数返回当前数据库系统日期,返回值的类型为datetime
⑤列出历史借阅表中有超期未归还图书的还书记录(Book_History_Overdue)7.备份与恢复设计
(1)设计思想在图书借阅系统中,分为四个用户定义文件组和一个主文件组,其中操作最为频繁的是文件组4(存放历史借阅表)、文件组3(存放借阅表)、其次为,文件组2(存放图书表)、文件组1(存放读者表)但是主文件组又是整个数据库可以启动、运行的基础,所以不可忽视备份操作由授予固定服务器角色dbbackupoperator(允许进行数据库备份的用户)来操作,完全备份时间,在每周二上午,图书馆内务整理时进行,文件组的差异备份与事务日志备份在每天闭馆后进行具体实现综合以上考虑,在本地计算机上,指定一个单独的磁盘,存放每周二进行的数据库完全备份(包括主文件组、用户定义文件组、事务日志),在本地局域网内另设一台主机专门用来存放完全备份,该主机权限只能由系统___登录由属于固定服务器角色dbbackupoperator用户进行完全备份操作文件组差异备份与事务日志备份在每天闭馆后进行主要针对四个用户自定义文件组、主文件组、事务日志进行差异备份,指定备份在本地计算机一个单独的磁盘8.数据库安全设计
(1)设计思想
①在图书借阅系统中,在服务器级别,可以分为系统___(sysadmin)、安全___(securityadmin)、服务器___(serveradmin)、设置___(setupadmin)、进程___(pro__ssadmin)、管理磁盘文件(diskadmin)、数据库创建者(dbcreator)、指定格式__数据文件(bulkadmin)
②在数据库级别,可以分为数据库所有者(db_owner)、数据库访问权限管理者(db_ac__ssadmin)、数据库安全___(db_securityadmin)、数据库DDL___(db_ddladmin)、数据库备份操作员(db_backupoperator)、数据库数据读取者(db_datareader)、数据库数据写入者(db_datawriter)
③此外还包括自定义数据库角色(学生、教师、图书馆普通员工、图书馆借阅处工作人员、图书馆采编部工作人员)、应用程序角色(图书馆__)
④自定义数据库角色都具有对图书表的查询权限、具有对图书ID与I__N对应表的查询权限
⑤学生对与自己的借书记录、还书记录有查询权限、读者信息中的地址(Addr)字段有更新权利、其他字段只允许查询学生借阅数量设置为(0=Num=10),借书期限为90天
⑥教师对与自己的借书记录、还书记录有查询权限、读者信息中的地址(Addr)字段有更新权利、其他字段只允许查询教师借阅数量设置为(0=Num=15),借书期限为120天
⑦图书馆普通员工对与自己的借书记录、还书记录有查询权限、读者信息中的地址(Addr)字段有更新权利、其他字段只允许查询普通员工借阅数量设置为(0=Num=10),借书期限为90天
⑧图书馆借阅处工作人员同时属于普通员工、借阅处工作人员两个角色,新增权限当读者借书、还书时,借阅处工作人员可以提交借书、还书记录对读者表的借阅量字段、图书表的库存量字段,通过应用程序角色可以进行更新
⑨图书馆采编部工作人员同时属于普通员工、采编部工作人员两个角色,新增权限对历史借阅表所有行具有查询权限,可以根据统计数据,决定新增上架图书、下架某些图书,具有对图书表中数据的更新、删除具体实现测试以SQLServer用户201107024218,登录服务器ADMINISTRATOR默认数据库MBook203,数据库用户201107024218,属于角色学生具有权限对图书表(Book)的查询权限执行图书检索存储过程,执行结果如下
五、体会在图书借阅系统数据设计的库综合实验中,由于需求分析不够深入,对图书借阅系统的业务流程,以及所涉及到的角色没有做到深入的了解比如读者,图书馆工作人员、___,他们应该具有详细的角色划分,由此设计数据表、以及对应数据表中的各个字段,比如借阅数量,可以根据角色设置不同的约束条件对于不同的角色也可以分配不同的权限,也方便了___对用户权限的管理在设计表结构时存在一些不足,比如,在历史借阅表中,为了保证实体完整性,而将读者号、图书I__N、图书ID、借书日期、还书日期都设置为了主键,可以考虑加入一个字段作为标志列,用标识列作为主键,可以保证还书记录在历史借阅表中的唯一性,标志列可以唯一的标志一行另外一个是图书ID与I__N的对应表,在该表中同一个I__N对应了不同的ID,表中用图书ID作为主键不太合理在图书表中,图书应该是分类存放,所以应该考虑添加分类标号,这样在图书检索的时候可以提高检索效率,同时图书按类存放,也使得图书表中数据便于维护对于服务器固定角色、数据库固定角色、用户自定义角色、应用程序角色的理解也不够,对于他们应有权限以及权限的分配不清楚,在为图书借阅数据库创建了学生角色后,指定学生角色所有者为dbo,为学生角色授权可以查询图书表,将创建的SQLServer登录用户对应的数据库用户添加到学生角色,使用该用户登录后,对其他表中数据仍然具有查询权限,还可以操作借书、还书存储过程对于读者登录验证,可以单独创建一个表,包含读者号、读者登录__,对于登录__在数据库中可以采用加密存储,保证读者个人信息的安全性___的权限也要有明确的分配,对___的操作也要具有审计功能总体而言,对于数据设计,应该遵循数据库设计的理论指导,需求分析、概念结构设计、逻辑结构设计、物理设计,结合实际系统在数据库设计的每一步都应该认真分析、设计,是后期投入运行的重中之重
六、____SQLServer实用教程(第3版)郑阿奇主编
七、SQL代码/*
1.使用命令方式创建图书管理数据库MBook203*/CREATEDATABASEMBook203ONPRI__RYNAME=MBook203_DATAFILENAME=D:\db\MBook
203.mdfSIZE=10MB__XSIZE=UNLIMITEDFILEGROWTH=10%FILEGROUPMyDB_FG1NAME=MyDB_FG1_Data1FILENAME=D:\db\MyDB_FG1_Data
1.ndfSIZE=10MB__XSIZE=UNLIMITEDFILEGROWTH=10%FILEGROUPMyDB_FG2NAME=MyDB_FG2_Data1FILENAME=D:\db\MyDB_FG2_Data
1.ndfSIZE=10MB__XSIZE=UNLIMITEDFILEGROWTH=10%FILEGROUPMyDB_FG3NAME=MyDB_FG3_Data1FILENAME=D:\db\MyDB_FG3_Data
1.ndfSIZE=10MB__XSIZE=UNLIMITEDFILEGROWTH=10%FILEGROUPMyDB_FG4NAME=MyDB_FG4_Data1FILENAME=D:\db\MyDB_FG4_Data
1.ndfSIZE=10MB__XSIZE=UNLIMITEDFILEGROWTH=10%LOGONNAME=MBook203_LOGfilename=D:\db\MBook
203.ldfsize=10MB__xsize=unlimitedfilegrowth=10%;/*
2.创建数据表读者表、图书表、BookID_I__N、借阅表、历史借阅表分别放在文件组MyDB_FG
1、MyDB_FG
2、MyDB_FG
3、MyDB_FG4读者表(Reader)、图书表(Book)、图书ID与I__N对应表BookID_I__N、借阅表(Lend)和借阅历史表(HistoryLend)*/USEMBook203GOCREATETABLEReaderReaderIDchar12NOTNULLPRI__RYKEYNamevarchar8NOTNULL___bitCHECK___=0OR___=1--1:男0:女BorndatenotnullDeptvarchar20Specvarchar20NumintNOTNULLDEFAULT0Photovarbinary__XNULLAddrxmlNULLONMyDB_FG1GOCREATETABLEBookI__Nvarchar16NOTNULLPRI__RYKEYBnamevarchar40NOTNULLAuthorvarchar16NOTNULLPubvarchar30NOTNULLPri__floatNOTNULLCopnumintNOTNULLDEFAULT0InvnumintNOTNULLDEFAULT0Photovarbinary__XNULLSum__ryxmlNULLONMyDB_FG2GOCREATETABLEBookID_I__NI__Nvarchar16NOTNULLFOREIGNKEYREFEREN__SBookI__NBookIDvarchar10NOTNULLPRI__RYKEYONMyDB_FG2GOCREATETABLELendReaderIDchar12NOTNULLFOREIGNKEYREFEREN__SReaderReaderIDI__Nvarchar16NOTNULLFOREIGNKEYREFEREN__SBookI__NBookIDvarchar10NOTNULLFOREIGNKEYREFEREN__SBookID_I__NBookIDbbtdateNOTNULLPRI__RYKEYReaderIDI__NBookIDONMyDB_FG3GOCREATETABLEHistoryLendReaderIDchar12NOTNULLFOREIGNKEYREFEREN__SReaderReaderIDI__Nvarchar16NOTNULLFOREIGNKEYREFEREN__SBookI__NBookIDvarchar10NOTNULLFOREIGNKEYREFEREN__SBookID_I__NBookIDbbtdateNOTNULLrbbtdateNOTNULLPRI__RYKEYReaderIDI__NBookIDbbtrbbtONMyDB_FG4/*Reader表插入数据*/insertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200807024201王林11992-08-2计算机学院网络工程0null__方式xmlns=http://puser.com姓名=王林e__ilWL@interhis.net/e__il__13900081101/__地址____211101/____省或直辖市江苏省/省或直辖市市或县南京市/市或县详细地址鼓楼区__路3号/详细地址/地址/__方式GOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200807024122张强民11991-03-2计算机学院网络工程0null__方式xmlns=http://puser.com姓名=张强民e__ilZQM@interhis.net/e__il__13900081102/__地址____211100/____省或直辖市江苏省/省或直辖市市或县镇江市/市或县详细地址**区**镇**村/详细地址/地址/__方式GOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200807014202程明119__-06-8计算机学院计算机科学与技术0null__方式xmlns=http://puser.com姓名=程明e__ilCM@interhis.net/e__il__13900081103/__地址____211103/____省或直辖市__市/省或直辖市市或县崇明县/市或县详细地址**村**路**号/详细地址/地址/__方式GOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200807014108李平11993-12-8计算机学院计算机科学与技术0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200807034112王燕01992-10-5计算机学院软件工程0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200806035203__11991-7-8管理学院电子商务0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200806035101林一凡11993-03-2管理学院电子商务0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200805213119孙研01992-12-2电子信息学院电气自动化0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200805213108王敏01991-4-12电子信息学院电气自动化0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200805223205马琳琳01992-4-12电子信息学院通信工程0nullnullGOinsertreaderReaderIDName___BornDeptSpecNumPhotoAddrvalues200805223116李玉梅01984-4-12电子信息学院通信工程0nullnull/*Book表中插入数据*//*book*/insertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues7-5051-1078-0SQLSERVER2000教程吴豪北京希望电子出版社
46.51010nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues4-6081-1062-1数据库原理李敏电子工业出版社361010nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues7-5023-1076-0SQLSERVER2000实用教程刘芬北京希望电子出版社
46.51010nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues4-6012-1067-1数据库原理实用教程张敏电子工业出版社361010nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues4-6081-1063-2数据库原理及应用陈红电子工业出版社
35.588nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues4-6045-1023-4计算机应用王为清华大学出版社3588nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues4-6076-1087-3计算机网络__清华大学出版社331010nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues9-7871-2108-3J__a编程思想Bru__Eckel机械工业出版社3588nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues7-3021-0853-6C程序设计(第三版)谭浩强清华大学出版社261010nullGOinsertbookI__NBnameAuthorPubPri__CopnumInvnumSum__ryvalues9-7878-1124-4S7-300/400可编程控制器原理与应用崔维群孙启法北京____出版社5944null/*BookID_I__N*/insertBookID_I__NI__NBookIDvalues7-5051-1078-07-5051-001GOinsertBookID_I__NI__NBookIDvalues7-5051-1078-07-5051-002GOinsertBookID_I__NI__NBookIDvalues7-5051-1078-07-5051-003GOinsertBookID_I__NI__NBookIDvalues7-5051-1078-07-5051-004GOinsertBookID_I__NI__NBookIDvalues7-5051-1078-07-5051-005--》》》GOinsertBookID_I__NI__NBookIDvalues4-6081-1062-14-6081-001GOinsertBookID_I__NI__NBookIDvalues4-6081-1062-14-6081-002GOinsertBookID_I__NI__NBookIDvalues4-6081-1062-14-6081-003GOinsertBookID_I__NI__NBookIDvalues4-6081-1062-14-6081-004GOinsertBookID_I__NI__NBookIDvalues4-6081-1062-14-6081-005GO--》》》insertBookID_I__NI__NBookIDvalues7-5023-1076-07-5023-001GOinsertBookID_I__NI__NBookIDvalues7-5023-1076-07-5023-002GOinsertBookID_I__NI__NBookIDvalues7-5023-1076-07-5023-003GOinsertBookID_I__NI__NBookIDvalues7-5023-1076-07-5023-004GOinsertBookID_I__NI__NBookIDvalues7-5023-1076-07-5023-005GO--》》》insertBookID_I__NI__NBookIDvalues4-6012-1067-14-6012-001GOinsertBookID_I__NI__NBookIDvalues4-6012-1067-14-6012-002GOinsertBookID_I__NI__NBookIDvalues4-6012-1067-14-6012-003GOinsertBookID_I__NI__NBookIDvalues4-6012-1067-14-6012-004GOinsertBookID_I__NI__NBookIDvalues4-6012-1067-14-6012-005GO--》》》insertBookID_I__NI__NBookIDvalues4-6081-1063-24-6081-001GOinsertBookID_I__NI__NBookIDvalues4-6081-1063-24-6081-002GOinsertBookID_I__NI__NBookIDvalues4-6081-1063-24-6081-003GOinsertBookID_I__NI__NBookIDvalues4-6081-1063-24-6081-004GOinsertBookID_I__NI__NBookIDvalues4-6081-1063-24-6081-005GO--》》》insertBookID_I__NI__NBookIDvalues4-6045-1023-44-6045-001GOinsertBookID_I__NI__NBookIDvalues4-6045-1023-44-6045-002GOinsertBookID_I__NI__NBookIDvalues4-6045-1023-44-6045-003GOinsertBookID_I__NI__NBookIDvalues4-6045-1023-44-6045-004GOinsertBookID_I__NI__NBookIDvalues4-6045-1023-44-6045-005GO--》》》insertBookID_I__NI__NBookIDvalues4-6076-1087-34-6076-001GOinsertBookID_I__NI__NBookIDvalues4-6076-1087-34-6076-002GOinsertBookID_I__NI__NBookIDvalues4-6076-1087-34-6076-003GOinsertBookID_I__NI__NBookIDvalues4-6076-1087-34-6076-004GOinsertBookID_I__NI__NBookIDvalues4-6076-1087-34-6076-005GO--》》》insertBookID_I__NI__NBookIDvalues9-7871-2108-39-7871-001GOinsertBookID_I__NI__NBookIDvalues9-7871-2108-39-7871-002GOinsertBookID_I__NI__NBookIDvalues9-7871-2108-39-7871-003GOinsertBookID_I__NI__NBookIDvalues9-7871-2108-39-7871-004GOinsertBookID_I__NI__NBookIDvalues9-7871-2108-39-7871-005GO--》》》insertBookID_I__NI__NBookIDvalues7-3021-0853-67-3021-001GOinsertBookID_I__NI__NBookIDvalues7-3021-0853-67-3021-002GOinsertBookID_I__NI__NBookIDvalues7-3021-0853-67-3021-003GOinsertBookID_I__NI__NBookIDvalues7-3021-0853-67-3021-004GO--》》》insertBookID_I__NI__NBookIDvalues9-7878-1124-49-7878-001GOinsertBookID_I__NI__NBookIDvalues9-7878-1124-49-7878-002GOinsertBookID_I__NI__NBookIDvalues9-7878-1124-49-7878-003GOinsertBookID_I__NI__NBookIDvalues9-7878-1124-49-7878-004GO/*
3.在数据库MBook203中创建读者加密的借书存储过程,当向Lend表插入一条记录时,
①检查该记录的借书证号ReaderID在Reader表中是否存在,
②检查该记录的图书I__N号是否在Book表中是否存在,
③检查该记录的图书库存量Invnum是否等于0
④检查该记录是否借阅过该图书
⑤检查该记录的图书BookID是否在借阅表Lend中已经存在若有一项为否,则不允许插入,并回滚事务;否则,插入记录,并将读者表中该读者借阅数量加1,图书表中库存量减1,并返回借书成功信息*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Book_BorrowDROPPROCBook_BorrowGOCREATEPRO__DUREBook_Borrow@in_ReaderIDchar12@in_I__Nvarchar16@in_BookIDvarchar10@out_strchar30OUTPUTWITHENCRYPTIONASBEGINIFNOTEXISTSSELECT*FROMReaderWHEREReaderID=@in_ReaderIDBEGINSET@out_str=该读者不存在!RETURN0ENDIFNOTEXISTSSELECT*FROMBookWHEREI__N=@in_I__NBEGINSET@out_str=该图书不存在!RETURN0ENDIFEXISTSSELECT*FROMLendWHEREBookID=@in_BookIDBEGINSET@out_str=该图书已被借阅!RETURN0ENDIFSELECTInvnumFROMBookWHEREI__N=@in_I__N=0BEGINSET@out_str=图书库存量为0!RETURN0ENDIF@in_I__NINSELECTI__NFROMLendWHEREReaderID=@in_ReaderIDBEGINSET@out_str=读者已经借过该书!RETURN0ENDBEGINTRAN/*开始一个事务*/INSERTINTOLendVALUES@in_ReaderID@in_I__N@in_BookIDGETDATEIF@@ERROR0/*如果前面一条SQL语句出错则回滚事务并返回*/BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0END/*更新读者借书数量*/UPDATEReaderSETNum=Num+1WHEREReaderID=@in_ReaderIDIF@@ERROR0BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0END/*更新图书库存量*/UPDATEBookSETInvnum=Invnum-1WHEREI__N=@in_I__NIF@@ERROR=0/*如果所有语句都不出错,则提交事务并返回*/BEGINCOMMITTRANSET@out_str=借书成功!RETURN1ENDELSE/*如果执行出错,则回滚事务并返回*/BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0ENDEND/*
4.在数据库MBook203中创建读者加密的还书存储过程,当删除Lend表中一条记录时
①检查借阅表中是否存在该借阅记录,如果不存在则回滚事务
②将该记录插入到历史借阅表
③将该记录的还书日期rbbt获取当前系统时间,并插入到对应记录的还书日期字段
④将该记录的读者借阅数量加1
⑤检查该记的图书库存量加1
⑥返回还书成功信息若有一项为执行不成功,则不允许删除,并回滚事务*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Book_ReturnDROPPROCBook_ReturnGOCREATEPRO__DUREBook_Return@in_ReaderIDchar12@in_I__Nvarchar16@in_BookIDvarchar10@out_strchar30OUTPUTWITHENCRYPTIONASBEGINIFNOTEXISTSSELECT*FROMLendWHEREReaderID=@in_ReaderIDANDI__N=@in_I__NANDBookID=@in_BookIDBEGINSET@out_str=不存在该借阅记录!RETURN0ENDBEGINTRAN/*开始一个事务*/DECLARE@bbtdateSELECT@bbt=SELECTbbtFROMLendWHEREReaderID=@in_ReaderIDANDI__N=@in_I__NANDBookID=@in_BookID/*将还书记录插入到历史借阅表*/INSERTINTOHistoryLendVALUES@in_ReaderID@in_I__N@in_BookID@bbtGETDATEIF@@ERROR0/*如果前面一条SQL语句出错则回滚事务并返回*/BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0END/*删除借阅表中的借书记录*/DELETEFROMLendWHEREReaderID=@in_ReaderIDANDI__N=@in_I__NANDBookID=@in_BookIDIF@@ERROR0BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0END/*更新读者借阅数量*/UPDATEReaderSETNum=Num-1WHEREReaderID=@in_ReaderIDIF@@ERROR0BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0END/*更新图书库存量数量*/UPDATEBookSETInvnum=Invnum+1WHEREI__N=@in_I__NIF@@ERROR=0/*如果所有语句都不出错,则提交事务并返回*/BEGINCOMMITTRANSET@out_str=还书成功!RETURN1ENDELSE/*如果执行出错,则回滚事务并返回*/BEGINROLLBACKTRANSET@out_str=执行过程中遇到错误!RETURN0ENDEND/*执行向借阅表Lend表插入借书记录的存储过程(借书)*/USEMBook203GODECLARE@out_strchar30EXECBook_Borrow2008070341124-6012-1067-14-6012-001@out_strOUTPUTSELECT@out_str/*执行删除借阅表Lend一条借书记录的存储过程(还书)*/USEMBook203GODECLARE@out_strchar30EXECBook_Return2008070341124-6012-1067-14-6012-001@out_strOUTPUTSELECT@out_str/*
5.列出有超期还书记录的读者的借书证号、姓名及书名 提示
①列出当前借阅表中超期未归还图书的借书记录(Book_Current_Overdue)
②读者的借阅期为90天
③计算应还书日期可用DATEADD函数,其语法格式为 DATEADDdatepartnumberdate 其中datepart是指与number相加的date部分,取值可以是YY、M、D、W等 Number是与指定日期中的datepart相加的一个整数 Date是参加运算的指定日期 例如DATEADDD102013-8-10的运算结果是2013-8-20
④getdate函数返回当前数据库系统日期,返回值的类型为datetime
⑤列出历史借阅表中有超期未归还图书的还书记录(Book_History_Overdue)*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Book_Current_OverdueDROPPROCBook_Current_OverdueGOCREATEPRO__DUREBook_Current_Overdue@Book_Current_Overdue_CursorCURSORVARYINGOUTPUT@out_strchar50OUTPUTWITHENCRYPTIONASBEGINIFEXISTSSELECTR.ReaderIDFROMSELECTReaderIDNameFROMReaderRSELECTReaderIDBookIDI__NbbtFROMLendLSELECTI__NBnameFROMBookBWHERER.ReaderID=L.ReaderIDANDB.I__N=L.I__NANDDATEDIFFDAYL.bbtGETDATE90BEGINSET@out_str=当前借阅表中超期未归还图书的借书记录!SET@Book_Current_Overdue_Cursor=CURSORDYNAMIC/*设置输出游标类型为动态游标*/FORSELECTR.ReaderIDR.NameB.I__NL.BookIDB.BnameL.bbtGETDATE当前日期FROMSELECTReaderIDNameFROMReaderRSELECTReaderIDBookIDI__NbbtFROMLendLSELECTI__NBnameFROMBookBWHERER.ReaderID=L.ReaderIDANDB.I__N=L.I__NANDDATEDIFFDAYL.bbtGETDATE90OPEN@Book_Current_Overdue_Cursor/*打开游标*/RETURN1ENDELSEBEGINSET@out_str=当前借阅表中不存在超期未归还图书的借书记录!RETURN0ENDEND--
⑤列出历史借阅表中有超期未归还图书的还书记录USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Book_History_OverdueDROPPROCBook_History_OverdueGOCREATEPRO__DUREBook_History_Overdue@Book_History_Overdue_CursorCURSORVARYINGOUTPUT@out_strchar50OUTPUTWITHENCRYPTIONASBEGINIFEXISTSSELECTR.ReaderIDFROMSELECTReaderIDNameFROMReaderRSELECTReaderIDBookIDI__NbbtrbbtFROMHistoryLendHSELECTI__NBnameFROMBookBWHERER.ReaderID=H.ReaderIDANDB.I__N=H.I__NANDDATEDIFFDAYH.bbtH.rbbt90BEGINSET@out_str=历史借阅表中超期未归还图书的还书记录!SET@Book_History_Overdue_Cursor=CURSORDYNAMICFORSELECTR.ReaderIDR.NameB.I__NH.BookIDB.BnameH.bbtH.rbbtFROMSELECTReaderIDNameFROMReaderRSELECTReaderIDBookIDI__NbbtrbbtFROMHistoryLendHSELECTI__NBnameFROMBookBWHERER.ReaderID=H.ReaderIDANDB.I__N=H.I__NANDDATEDIFFDAYH.bbtH.rbbt9OPEN@Book_History_Overdue_CursorRETURN1ENDELSEBEGINSET@out_str=历史借阅表中不存在超期未归还图书的还书记录!RETURN0ENDEND/*
6.执行查询当前借阅表中超期未归还图书的借书记录存储过程*/USEMBook203GODECLARE@out_strchar50@MyCursorCURSOREXECBook_Current_Overdue@Book_Current_Overdue_Cursor=@MyCursorOUTPUT@out_str=@out_strOUTPUTSELECT@out_strFETCHNEXTFROM@MyCursorWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROM@MyCursorENDCLOSE@MyCursorDEALLOCATE@MyCursor/*
7.执行查询历史借阅表中超期未归还图书的还书记录存储过程*/USEMBook203GODECLARE@out_strchar50@MyCursorCURSOREXECBook_History_Overdue@Book_History_Overdue_Cursor=@MyCursorOUTPUT@out_str=@out_strOUTPUTSELECT@out_strFETCHNEXTFROM@MyCursorWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROM@MyCursorENDCLOSE@MyCursorDEALLOCATE@MyCursor/*8.用户自定义书籍检索存储过程,用于实现根据图书名称或__姓名的模糊查询返回图书有关信息*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Book_RetrievalDROPPROCBook_RetrievalGOCREATEPRO__DUREBook_Retrieval@in_I__Nvarchar16=null@in_Bnamevarchar40=null@in_Authorvarchar16=null@out_strchar52OUTPUT@Book_Retrieval_CursorCURSORVARYINGOUTPUTWITHENCRYPTIONASBEGINIFEXISTSSELECT*FROMBookWHEREI__NLIKE@in_I__NORBnameLIKE@in_Bname+%ORAuthorLIKE@in_Author+%BEGINSET@out_str=以下为检索到的相关图书信息SET@Book_Retrieval_Cursor=CURSORDYNAMICFORSELECT*FROMBookWHEREI__NLIKE@in_I__NORBnameLIKE@in_Bname+%ORAuthorLIKE@in_Author+%OPEN@Book_Retrieval_CursorRETURN1ENDELSEBEGINSET@out_str=没有为您检索到相关图书信息,请重新输入相关筛选条件!RETURN0ENDEND/*
9.执行书籍检索存储过程,采用模糊匹配*/USEMBook203GODECLARE@out_strchar52@MyCursorCURSOR@Bnamevarchar40SET@Bname=J__AEXECBook_Retrieval@Book_Retrieval_Cursor=@MyCursorOUTPUT@out_str=@out_strOUTPUT@in_Bname=@BnameSELECT@out_strFETCHNEXTFROM@MyCursorWHILE@@FETCH_STATUS-1BEGINFETCHNEXTFROM@MyCursorENDCLOSE@MyCursorDEALLOCATE@MyCursor/*
10.创建存储过程(Reader_Current_Lend),根据MBook203数据库的三个表ReaderLendBook 查询指定读者(指定借书证号或指定姓名等)当前的借书情况*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Reader_Current_LendDROPPRO__DUREReader_Current_LendGOCREATEPRO__DUREReader_Current_Lend@Reader_Current_Lend_CursorCURSORVARYINGOUTPUT@in_ReaderIDchar12=null@in_Namevarchar8=null@out_strchar30OUTPUTWITHENCRYPTIONASBEGINIFEXISTSSELECTR.ReaderIDdeptnameNumB.I__NL.BookIDBnameFROMSELECTReaderIDDeptNameNumFROMReaderWHEREReaderID=@in_ReaderIDRLendLBookBWHERER.ReaderID=L.ReaderIDANDL.I__N=B.I__NBEGINSET@out_str=该读者借阅情况为SET@Reader_Current_Lend_Cursor=CURSORDYNAMICFORSELECTR.ReaderIDDeptSpecNameNumB.I__NL.BookIDBnameFROMSELECTReaderIDDeptSpecNameNumFROMReaderWHEREReaderID=@in_ReaderIDRLendLBookBWHERER.ReaderID=L.ReaderIDANDL.I__N=B.I__NOPEN@Reader_Current_Lend_CursorRETURN1ENDELSEBEGINSET@out_str=没有该读者借阅记录!RETURN0ENDEND/*
11.查询指定读者借阅情况,执行(Reader_Current_Lend)存储过程*/USEMBook203GODECLARE@out_strchar30@MyCursorCURSOR@ReaderIDchar12SET@ReaderID=200807034112EXECReader_Current_Lend@Reader_Current_Lend_Cursor=@MyCursorOUTPUT@out_str=@out_strOUTPUT@in_ReaderID=@ReaderIDSELECT@out_strFETCHNEXTFROM@MyCursorWHILE@@FETCH_STATUS-1BEGINFETCHNEXTFROM@MyCursorENDCLOSE@MyCursorDEALLOCATE@MyCursor/*执行向借阅表Lend表插入借书记录的存储过程(借书)*/--
①测试,当借阅表中存在图书BookID时读者继续借阅该书时USEMBook203GODECLARE@out_strchar30EXECBook_Borrow2008070341124-6012-1067-14-6012-001@out_strOUTPUTSELECT@out_strGO--
②测试,当图书表中图书库存量为0时,I__N号为9-7871-2108-3,J__a编程思想--读者200807014202继续借阅该书时DECLARE@out_strchar30EXECBook_Borrow2008070241229-7871-2108-39-7871-001@out_strOUTPUTSELECT@out_strGODECLARE@out_strchar30EXECBook_Borrow2008070141089-7871-2108-39-7871-002@out_strOUTPUTSELECT@out_strGODECLARE@out_strchar30EXECBook_Borrow2008070242019-7871-2108-39-7871-003@out_strOUTPUTSELECT@out_strGODECLARE@out_strchar30EXECBook_Borrow2008052232059-7871-2108-39-7871-004@out_strOUTPUTSELECT@out_strGODECLARE@out_strchar30EXECBook_Borrow2008070142029-7871-2108-39-7871-005@out_strOUTPUTSELECT@out_strGO/*执行查询借阅表Lend中超期未归还借书记录的存储过程*/--
①测试USEMBook203GODECLARE@out_strchar50@MyCursorCURSOREXECBook_Current_Overdue@Book_Current_Overdue_Cursor=@MyCursorOUTPUT@out_str=@out_strOUTPUTSELECT@out_strFETCHNEXTFROM@MyCursorWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROM@MyCursorENDCLOSE@MyCursorDEALLOCATE@MyCursor/*执行删除借阅表Lend一条借书记录的存储过程(还书)*/--
①测试上述两条超期未归还图书记录,假设现在归还图书--将图书库存量更新,读者借阅量更新,删除借阅表中借书记录,并将其插入到历史借阅表USEMBook203GODECLARE@out_strchar30EXECBook_Return2008070142029-7878-1124-49-7878-001@out_strOUTPUTSELECT@out_strGODECLARE@out_strchar30EXECBook_Return2008070242019-7871-2108-39-7871-003@out_strOUTPUTSELECT@out_strGO/*
12.创建视图将读者表、借阅表、书籍表连接,可方便查看读者借阅记录*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Reader_Current_Lend_ViewDROPVIEWReader_Current_Lend_ViewGOCREATEVIEWReader_Current_Lend_ViewASSELECTR.ReaderID读者号Name名字Dept院部Spec专业Num借书数量B.I__NI__N号L.BookID图书编号Bname图书名称L.bbt借书日期FROMSELECTReaderIDDeptSpecNameNumFROMReaderRLendLSELECTI__NBnameFROMBookBWHERER.ReaderID=L.ReaderIDANDL.I__N=B.I__NGOSELECT*FROMReader_Current_Lend_View/*
13.创建视图,统计图书在给定时间段内的借阅次数*/USEMBook203GOIFEXISTSSELECTnameFROMsys.o__ectsWHEREname=Book_Lend_Times_ViewDROPVIEWBook_Lend_Times_ViewGOCREATEVIEWBook_Lend_Times_ViewASSELECTB.Bname图书名称H.I__NI__N号COUNTH.I__NAS借阅次数FROMSELECTReaderIDI__NFROMHistoryLendHSELECTI__NBnameFROMBookBWHEREH.I__N=b.I__NGROUPBYB.BnameH.I__NGOSELECT*FROMBook_Lend_Times_View/*
14.为图书表的书名、__、库存量(BnameAuthorInvnum)三个字段分别创建非聚集索引*/USEMBook203GOIFEXISTSSELECTnameFROMsys.indexesWHEREname=NIX_Book_Bname_Author_InvnumDROPINDEXBook.IX_Book_Bname_Author_InvnumGOCREATENONCLUSTEREDINDEXIX_Book_Bname_Author_InvnumonBookBnameAuthorInvnumwithFILLFACTOR=60PAD_INDEX=ON;/*
15.为读者表的读者号、姓名、借书量(ReaderIDNameNum)字段创建非聚集索引*/USEMBook203GOIFEXISTSSELECTnameFROMsys.indexesWHEREname=NIX_Reader_ReaderID_Name_NumDROPINDEXBook.IX_Reader_ReaderID_Name_NumGOCREATENONCLUSTEREDINDEXIX_Reader_ReaderID_Name_NumonReaderReaderIDNameNumwithFILLFACTOR=60PAD_INDEX=ON;/*
16.为图书ID与I__N对应表(BookID_I__N)中的的图书I__N字段创建非聚集索引*/USEMBook203GOIFEXISTSSELECTnameFROMsys.indexesWHEREname=NIX_BookID_I__NDROPINDEXBook.IX_BookID_I__NGOCREATENONCLUSTEREDINDEXIX_BookID_I__NonBookID_I__NI__NwithFILLFACTOR=60PAD_INDEX=ON;/*
17.创建学生角色,以及对角色权限的授予*/USEMBook203GOCREATEROLERole_StudentAUTHORIZATIONdboGOUSEMBook203GOGRANTSELECTONBookTORole_Student/*
18.创建教师角色,以及对角色权限的授予*/USEMBook203GOCREATEROLERole_TeacherAUTHORIZATIONdboUSEMBook203GOGRANTSELECTONBookTORole_Teacher/*
19.创建图书馆普通员工角色,以及对角色权限的授予*/USEMBook203GOCREATEROLERole_StaffAUTHORIZATIONdboUSEMBook203GOGRANTSELECTONBookTORole_Staff/*
20.创建图书馆借阅处工作人员角色,以及对角色权限的授予*/USEMBook203GOCREATEROLERole_Borrow_StaffAUTHORIZATIONdboUSEMBook203GOGRANTSELECTONBookTORole_Borrow_StaffGRANTUPDATEONBookInvnumTORole_Borrow_StaffGRANTUPDATEONReaderNumTORole_Borrow_Staff/*
21.创建图书馆采编部工作人员角色,以及对角色权限的授予*/USEMBook203GOCREATEROLERole_Editor_StaffAUTHORIZATIONdboUSEMBook203GOGRANTSELECTONBookTORole_Editor_StaffGOGRANTSELECTONHistoryLendTORole_Editor_StaffGOGRANTUPDATEDELETEONBOOKTORole_Editor_Staff/*创建学生登录用户并为其创建数据库用户*/--有问题?创建SQLServer登录用户时PASSWORD选项加HASHED参数不识别USE__sterGOCREATELOGIN
[201107024218]WITHPASSWORD=070242DEFAULT_DATABASE=MBook203CHECK_EXPIRATION=ONGOUSEMBook203GOCREATEUSER
[201107024218]FORLOGIN
[201107024218]WITHDEFAULT_SCHE__=dboEXECsp_addrolememberRole_Student
[201107024218]--测试现在以SQLServer用户:201107024218登录服务器:ADMINISTRATOR--默认数据库MBook203数据库用户:201107024218属于角色学生SELECT*FROMsys.o__ectsSELECT*FROMReaderSELECT*FROMHistoryLendSELECT*FROMLendSELECT*FROMBookDECLARE@out_strchar30EXECBook_Borrow2011070242184-6076-1087-34-6076-001@out_strOUTPUTSELECT@out_strGODECLARE@out_strchar30@MyCursorCURSOREXECBook_Retrieval@in_Bname=SQL@out_str=@out_strOUTPUT@Book_Retrieval_Cursor=@MyCursorOUTPUTSELECT@out_strFETCHNEXTFROM@MyCursorWHILE@@FETCH_STATUS-1BEGINFETCHNEXTFROM@MyCursorEND/*创建教师登录用户*//*创建普通员工登录用户*//*创建图书馆借阅处工作人员登录用户*//*创建图书馆采编部工作人员登录用户*/--由于在设计之处,未考虑到教师、图书馆普通员工、借阅处工作人员、采编部工作人员--应该为学生、教师、图书馆员工分别创建三个基表所以此处不再创建它们的登录用户与数据库用户。