《数据库技术及应用》课程大作业2014(共38页).doc
精选优质文档-倾情为你奉上 数据库技术及应用课程大作业学院(系:管理与经济学部专业:信息管理与电子政务学生姓名:学号:完成日期: 目录1.系统背景介绍 (31.1系统名称 (31.2系统概况 (31.3信息需求描述 (32.概念模型设计 (33.数据模型设计 (44.数据定义语言 (74.1基本表及其完整性定义 (74.2 视图定义 (84.3 索引定义 (85. 数据库操作 (95.1嵌套查询 (95.2连接查询 (105.3聚合查询 (115.4数据记录增加 (125.5数据记录删除 (135.6数据记录修改 (156.数据库管理及控制 (176.1建立触发器 (176.2 事务练习 (217.数据库连接实现 (227.1数据库连接配置 (227.2数据库访问实例 (258.小结 (27 1.系统背景介绍1.1系统名称图书管理系统1.2系统概况在网络技术日益发达的今天,对于任何一所高校而言采用一套行之有效的图书管理系统来管理书籍,会带来很大的便捷。不仅有助于图书管理员能够更加轻松高效的管理书籍,与此同时对于学生借书来说也更加方便。基于这个问题,本文设计了图书管理系统,实现了借还书的方便、高效性、有效性和及时性。阐述了高校图书管理软件中所应具有的基本功能、设计、实现。该系统的建立不但给管理者带来了方便,也节省了工作时间从而提高了工作效率。图书管理系统的设计主要包括学生、管理员、书籍的借阅与归还、图书的采购与入库等相关信息。本系统的设计,主要为了方便借书者借书前可以提前通过登陆图书管理系统搜索自己想要借阅的书籍,可以明确的知道所借图书的库存量以及书籍的借期和还期。通过本系统,图书管理员可以方便的进行相对应的图书管理工作。1.3信息需求描述图书馆是收藏图书、刊物及各类音像和文字资料,并供读者借阅的单位。其主要业务包括图书的采购,编目,入库,流通(借阅、归还,读者管理,以及阅览室管理等。细分其功能,可以分为:登陆、查询、流通管理、采编管理、读者管理。学生可以用自己学号登陆图书管理系统,搜索自己需要的书籍以及图书的藏书总量和库存量。图书管理员通过自己的ID号和登陆密码可以查看相应的借书记录以及需要管理的书籍。2.概念模型设计根据前面的信息需求描述,本图书管理系统一共涉及四张表Administrator, Book,Borrow和Student。Student表主要是记录了学生的信息,包括学生的学号、姓名、性别以及专业。Administrator表主要是记录管理员的一些信息,包括管理员ID、性别、登陆密码,以及管理员的真实姓名和联系方式。Book表主要是记录了图书馆相应藏书的信息,包括书号、类别、书名、出版社、作者、价格、总藏书量和库存。Borrow 表是记录借书信息的表,包含有借书人的学号、所借书的书号、借书日期、还书日期。 图书管理系统的E-R图如下: 关系描述:图书实体包括:书名、书号、价格、藏书总数、库存量、图书类别、作者、出版社等属性。借书记录实体包括:书号、学号、借期、还期等属性。管理员实体包括:管理员ID、管理员密码、联系方式、姓名、性别等属性。学生实体包括:姓名、性别、学号、专业等实体、一个学生可以有多条借书记录,一条借书记录只能对应一个学生。因此,建立学生和借书记录之间的一对多的联系“借书”。一本书可以有多条借书记录,一条借书记录只能对应一本书。因此,建立图书和借书记录之间的一对多的联系“被借”。一个管理员可以管理多本图书,一本图书在同一时间只能被一个管理员管理。因此,建立管理员和图书之间的联系“管理”。3.数据模型设计学生表(Student 主码:学号(stu_id外码:无表级完整性约束:实体完整性约束:PRIMARY KEY stu_id索引数据项为:学生姓名(name管理员表(Administrator 主码:管理员ID(admini_id外码:无表级完整性约束:实体完整性约束: PRIMARY KEY admini_id 索引数据项为:管理员姓名(name图书表(Book 主码:书号(book_id外码:管理员ID(admini_id表级完整性约束:实体完整性约束: PRIMARY KEY book_id参照完整性:图书表中的admini_id属性参照依赖于管理员表中的admini_idFOREIGN KEY (admini_id REFERENCES Administrator (admini_id;索引数据项为:图书名(title借书记录表(Borrow 主码:学号(stu_id和书号(book_id外码:学号(stu_id或者书号(book_id表级完整性约束:实体完整性约束:PRIMARY KEY(stu_id,book_id参照完整性约束:FOREIGN KEY (stu_id REFERENCES Student(stu_id;FOREIGN KEY (book_id REFERENCES Book (book_id;索引数据项为:学号(stu_id 4.数据定义语言4.1基本表及其完整性定义(1学生表(StudentCREATE TABLE Student(stu_id bigint (8 NOT NULL UNIQUE, name char(10 NOT NULL,sex char(4CHECK(sex IN ('男','女',major varchar(20 NOT NULL,PRIMARY KEY (stu_id;(2管理员表(AdministratorCREATE TABLE Administrator (admini_id char (10 NOT NULL UNIQUE, name char(10 NOT NULL,sex char(4CHECK(sex IN ('男','女',admini_pass char(10 NOT NULL,contact char(11,PRIMARY KEY (admini_id;(3 图书表(BookCREATE TABLE Book (book_id char (10 NOT NULL UNIQUE, title varchar(20 NOT NULL,category char(10,press varchar(20,author char(10,price char(5,2,total int(4 NOT NULL,stock int(4 NOT NULL, PRIMARY KEY (book_id,FOREIGN KEY (admini_id REFERENCES Administrator (admini_id;(4借书记录表(BorrowCREATE TABLE Borrow (stu_id bigint(8 NOT NULL UNIQUE,book_id char(10 NOT NULL UNIQUE,borrow_date date NOT NULL,return_date date NOT NULL,PRIMARY KEY (stu_id,PRIMARY KEY (book_id,FOREIGN KEY (stu_id REFERENCES Student(stu_id, FOREIGN KEY (book_id REFERENCES Book(book_id;4.2 视图定义1、创建视图显示借书者的学号、书号、书名、借期、还期。CREATE VIEW IS_Borrow(stu_id,book_id,title,borrow_date,return_dateASSELECT stu_id,book_id,title,borrow_date,return_dateFROM Book,Student,BorrowWHERE Student.stu_id=Borrow.stu_id ANDBook.book_id=Borrow.book_id;2、创建视图显示可借图书的书号、书名、作者、出版社、图书价格。CREATE VIEW IS_Book(book_id,title,author,press,priceASSELECT book_id,title,author,press,priceFROM Book;4.3 索引定义(1为图书表添加索引,索引数据项为:图书名(titleCREATE UNIQUE INDEX PK_ Book ON Book(title;(2为借书记录表添加索引,索引数据项为:学号(stu_idCREATE UNIQUE INDEX PK_ Borrow ON Borrow(stu_id; 5. 数据库操作5.1嵌套查询实例1:查询与李明一个专业的同学SELECT name,stu_id,majorFrom studentWHERE major IN(SELECT majorFrom studentWHERE name='李明' 实例2:查询与数据库系统概论属于相同类别的图书SELECT book_id,title,category,press,price From bookWHERE category IN(SELECT categoryFrom bookWHERE category='计算机' 5.2连接查询实例1:查询所有信息管理与电子政专业学生借的图书SELECT name,major,titleFrom book,student,borrowWHERE student.major='信息管理与电子政务'AND student.stu_id=borrow.stu_id ANDbook.book_id=borrow.book_id; 实例2:查询所有小说当前的借阅记录SELECT title,name,major,borrow_date,return_date From book,student,borrowWHERE book.category='小说'ANDbook.book_id=borrow.book_id; 5.3聚合查询实例1:求各个类别图书借出数量的总数SELECT category as类别,COUNT(distinct nameas总数From book,borrow,studentWHERE student.stu_id=borrow.stu_id ANDbook.book_id=borrow.book_idGROUP BY category; 实例2:求各个类别图书借出书籍的总价钱SELECT category as类别,SUM(distinct priceas总价From book,borrow,studentWHERE student.stu_id=borrow.stu_id ANDbook.book_id=borrow.book_idGROUP BY category; 5.4数据记录增加实例1:将一个新图书元组(book_id:0021,title:高等数学,category:数学,press:清华大学出版社,author:王娜,price:30,total:10,stock:6;插入到图书表中. INSERTINTO book(book_id,title,category,press,author,price,total,stockVALUES('0021','高等数学','数学','清华大学出版社','王娜','30','10','6' 实例2:将一个新的管理员元组(admini_id:,name:刘洋,sex:女, admini_pass:,contact:183*插入到Administrator表中。INSERTINTO administrator(admini_id,name,sex,admini_pass,contact VALUES('','刘洋','女','','183*' 5.5数据记录删除实例1:从借书记录中删除book_id为0007的借阅记录DELETEFROM borrowWHERE book_id='0007' 实例2:从图书管理员记录中删除admini_id为的记录DELETEFROM administratorWHERE admini_id='' 5.6数据记录修改实例1:将图书表中所有图书的藏书量增加10 UPDATE bookSET total=total+10; 实例2:将管理员表中admini_id为的管理员的admini_pass改为: UPDATE administratorSET admini_pass=WHERE admini_id='' 6.数据库管理及控制6.1建立触发器1、当在借书记录表中增加一条借书记录时,使图书表中相应图书的库存量减少1。ALTER triggerdbo.Borrow_insert1ondbo.borrowfor insertasdeclareBookID char(9selectBookID=book_idfrom insertedupdate bookset book.stock=book.stock-1where book_id=BookID;INSERTINTO borrow(stu_id,book_id,borrow_date,return_dateVALUES('','0002','2015-01-10','2015-03-10' 插入之前: 插入之后: 2、当在借书记录表中删除一条借书记录时,使图书表中相应的图书的库存量增加1。CREATE TRIGGER borrow_deleteON borrowFOR DELETEASDECLAREBookID CHAR(10SELECTBookID=book_idFROM DELETEDUPDATE bookSET book.stock=book.stock+1WHERE book_id=BookID;DELETEFROM borrowWHERE book_id='0008' 删除前 删除后: 6.2 事务练习将图书表中的计算机类图书的藏书总量都增加30本,如果有计算机类图书的总藏书量超过了55本,则放弃本次操作。begin transactionuse libraryupdate bookset total=total+30where category='计算机'if(select max(totalfrom book where category='计算机'>55beginprint'总藏书量不能超过55本'print'事务回滚'rollback transactionendelsebeginprint'trsaction commited'commit transactionend 7.数据库连接实现在本次大作业中,我采用了Visual Basic 6.0 和数据库管理系统 SQL Server 2008进行数据库连接测试。访问实例,我利用VB连接数据库,访问了数据库中的student 表中的数据。7.1数据库连接配置Visual Basic中使用ADO控件进行数据库连接。首先,新建Visual Basic工程,在“工程”菜单中选择“部件”,选择ADO控件,如下图所示。 然后,点击确定。这时,会在左侧的工具栏中出现ADO控件。接着在工程的表单中新建一个ADO对象。最后对其属性进行相应的配置。 首先,在属性页的“通用”选项中选择“使用连接字符串”,如下图所示进行数据库连接配置。 以下是对要连接的数据库进行选择,以及连接数据库所需要的身份信息验证。在所有配置工作都准备好之后,可以点击下面的“测试连接”。如果成功,则会弹出“测试连接成功”消息框。 7.2数据库访问实例连接的代码如下:Private Sub Form_Load(Adodc1.Visible = FalseAdodc1.RecordSource = "select * from student" Adodc1.RefreshSet DataGrid1.DataSource = Adodc1.Recordset DataGrid1.RefreshEnd Sub连接实例截图:大连理工大学 Dalian University of Technology 26 大连理工大学 Dalian University of Technology 8.小结 经过了自己一周左右的不懈努力以及同学的鼓励和帮助下,终于完成了本门课程的 大作业。回过头来想想,在整个大作业的完成过程中,自己收获了很多。由于本科没有 学习过相关的数据库课程,在做作业的过程中难免会遇到一些困难,但这些困难最终都 在同学的帮助和自己耐心的努力的被克服了。 通过本次数据库大作业的完成,我对老师您上课所讲到的内容有了更加深入的理解 和学习。上课过程中有些知识点虽然听明白了,但毕竟还是理论上听懂了。数据库真正 的意义在于实践操作。整个过程中,让我感触最深的是需求分析阶段,在这个阶段,必 须对所要设计的系统有总体的构思和了解,知道自己要做什么,要实现什么,并且要实 际的进行相关的调查,不能凭想象或自己的了解。通过自己亲手实践,加深了我对数据 库系统相关知识和 sql server 相关功能的理解。例如对建立基本表、视图、索引、触 发器、事务等,都比以前更加的熟练。 最后,要对仲老师送上一句最真诚的感谢:谢谢您的耐心授课和教导。通过本门课 程让我收获了很多知识。此外,还要感谢在我做作业遇到困难时,耐心帮助的同学,谢 谢你们的鼓励和帮助。在我遇到困难的时候,是你们给了我勇气和信心。与此同时,通 过这次大作业的完成,我发现自己实践能力还是不足,在今后的学习过程中我会尽力弥 补自己这方面的不足。 27 专心-专注-专业