6.1.5 建立触发器
1.当删除Reader表中某一读者基本信息时,触发Borrow表,删除相应的记录 create trigger Reader_delete on Reader for delete as
delete Borrow from deleted
where Borrow.ReaID=deleted.ReaID
2.当在中增加一条借阅记录时,使该图书的状态由“可借”变为“不可借” create trigger Borrow_insert1 on Borrow for insert as
declare @BookID char(9) select @BookID=BookID from inserted update Book
set BookState='不可借' where BookID=@BookID
6.2数据入库
系统包括图书基本信息管理、读者基本信息管理、管理员信息管理、借阅信息管理、
查询信息管理等四大功能模块,共有6张基本表,采用事先在Excel中录入数据,然后使用SQL Server 2000数据导入/导出向导功能,直接将数据导入到相应的基本表中。
6.3创建各个功能的存储过程
系统共创建了10个存储过程,具体列表如下:
表3.1 创建的存储过程列表:
编号
P-1 P-2 P-3 P-4
存储过程名称
Book_Insert Reader_Insert Maneger_Insert Borrow_Insert
定义
详见附录1-1 详见附录1-2 详见附录1-3 详见附录1-4
作用
在Book中插入一元组 在Reader中插入一元组 在Maneger中插入一元组 在Borrow中插入一元组
-22-
P-5 P-6 P-7 P-8 P-9 P-10
Delete_Book Delete_Reader Query_Reader_R Query_Reader_M Query_Book_Writer
Query_Book_Name_Publish
详见附录1-10 详见附录1-9 详见附录1-5 详见附录1-6 详见附录1-7 详见附录1-8
从Book中删除一元组 从Reader中删除一元组 读者在Reader中查询本人信息 管理员在Reader中查询全部读者 在Book,按作者查询
在Book中,按书名和出版社查询
(其它表的查询、修改、删除与以上各表的存储过程定义大致相同,这里不再具体列出)
7.系统调试和测试
对该图书管理系统进行测试,验证每个功能是否符合要求,具体的测试如下: (1)通过视图查看各个基本表和视图中的数据(见附录2) (2)检测各个存储过程的功能:(见附录2)
8.实习心得
1. 这次课程设计使我熟悉了系统设计的整体步骤。系统设计大体可分为需求分析、概念设计、逻辑设计、物理设计、数据库的实施及调试测试六大步骤。其中,让我感触最深的是需求分析阶段,在这个阶段,必须对所要设计的系统有总体的构思和了解,知道自己要做什么,要实现什么,并且要实际的进行相关的调查,不能凭想象或自己的了解,这样会在后续的工作中遇到很多的问题。
2. 这次课程设计加深了我对数据库系统概论相关知识和SQL SERVER相关功能的理解。例如对建立基本表、视图、索引、存储过程、触发器等,都比以前更加的熟练。并在解决遇到的各种问题的过程中,学到了很多新的知识。比如在导入\\导出数据时,由于外键约束的存在,经常会出现错误,这就要注意各个表导入的顺序问题。一般是先导入主键表,后导入外键表,这样可以避免很多的错误。
3. 我进一步掌握了相关的SQL语句方面的知识。不但纠正了以前的错误认识和理解,而且学会了建立存储过程和触发器。通过查阅资料,我还明白了存储过程是编译后放在服务器端的程序,它可以被别的模块调用,且不需要重新编译,这样就大大减轻了客户端的负担,且有效的提高了系统执行的效率。
4 . 当然,在实习的过程中也存在一些问题。由于需求分析阶段的工作完成的不是很充分,
在后面的设计过程中,前后时常会出现矛盾,不一致现象,因此要反复的修改前面的结果,导致整个工作进行的不是很顺利。
9.存在的问题及建议
1.我觉得在这次课程设计中,需求分析阶段是致关重要的,但由于同学们都是第一次做这
样的系统设计,都不是很熟悉需求分析的主要方法和主要任务,所以都很盲目,认为随
-23-
便从网上搜点相关的知识就可以了,但其实,这直接影响着后面的各个阶段的工作的进行。所以希望老师在实习前能给我们对需求分析阶段的工作进行一定的指导。 2.在实习过程中,虽然我们每个班都配备了两到三名指导老师,可各指导老师轮流上班,
当我们遇到问题时,有时在身边找不到老师,而浪费了一些宝贵的时间,或者是本班的指导老师在给别班的学生指导,所以也可能会耗费一定的等待时间。
3.但总的说来,这次实习的各个指导老师都是知识渊博,经验丰富,并且十分热情的,我
们请教的任何问题,老师都会耐心而认真的为我们解决,老师不但帮我们解决了问题,同时也教会了我们解决此类问题的方法,这对我们今后的学习是十分有益的。
-24-
致谢
在这次数据库课程设计的整个过程中,都受到了指导教师杨丽丽老师、陈勇老师、武苏里老师细心的指导和关怀,同时蔚继承老师、杨晓辉老师、孙建敏老师也给予了我很大的帮助。对此,表示忠心的感谢!没有老师的耐心指导,我根本不可能顺利完成此次课程设计的任务。在这里,我尤其要真诚的感谢杨丽丽老师和蔚继承老师,两位老师丰富的知识和编程经验帮我解决了不少的难题,同时也给我传授了不少新的知识和技巧。
同时也感谢给过我帮助和鼓励的同学,是他们的帮助与鼓励,在我遇到困难时,为我点亮了希望的灯塔;在我灰心丧气时,带给我力量和信心。
参考文献
[1] 萨师煊 王珊,数据库系统概论(第三版),北京:高教出版社,2000 [2] 软件开发与指导;人民邮电出版社
[3] Delpehi数据库开发毕业设计指导及实例;机械工业出版社,2004
-25-
附录1 存储过程定义
1.Book_Insert的定义:
CREATE PROCEDURE Book_Insert
@BookID char(9) , @BookNo char(20), @BookName char(50), @BookWriter char(30), @BookPublish char(20), @BookPrice char(7), @BookDate datetime, @BookClass char(20), @BookMain char(200), @BookPrim char(30), @BookCopy char(5), @BookState char(10), @BookRNo char(5) as
insert into Book
values(@BookID ,@BookNo,@BookName,@BookWriter ,@BookPublish ,@BookPrice,
@BookDate,@BookClass ,@BookMain ,@BookPrim ,@BookCopy ,@BookState , @BookRNo);
2.Reader_Insert的定义:
CREATE PROCEDURE Reader_Insert
@ReaID char(9), @ReaName char(10), @ReaSex char(2), @ReaNo char(9), @ReaLBID char(5), @ReaType char(20), @ReaDep char(20), @ReaGrade char(5), @ReaPref char(20), @ReaDate Datetime as
insert into Reader
values( @ReaID , @ReaName, @ReaSex,@ReaNo ,@ReaLBID,@ReaType,@ReaDep , @ReaGrade ,@ReaPref ,@ReaDate);
-26-