学号:实训报告教学院计算机学院课程名称Oracle数据库系统实训题目高校图书馆管理信息系统的数据设计与实现专业网络工程班级姓名同组人员指导教师24日日2014年6月月一、需求分析1.背景随着计算机科学日渐成熟,科学技术的不断提高,图书馆希望设计一个图书管理系统,用于管理读者的登记,图书的购入、借出、归还以及注销等。
并且方便管理人员还查阅某位读者、某本图书的借阅情况。
并可加快对当前借阅情况统计的效率,以全面掌握图书的流通情况、提高工作效率、加快信息反馈,为读者提供满意的借阅环境,减轻图书信息管理人员的劳动强度,提高工作效率和质量,从而使图书和读者的管理更加合理化和科学化。
2.实体与属性图书 : 每本图书的编号、价格、书名、作者、出版时间、采订时间。
图书分类:类别编号、类别名称、该类总数。
书库:书库编号、书库名称、位置。
地址:地区编号、地区名称、父编号。
出版社:出版社编号、出版社名称。
读者:读者号、姓名、民族、性别、籍贯、身份证号、注册时间、读书证过期时间、借书数目。
系别:系别名、系别编号。
专业:入学时间、专业代码、专业名称、学年制。
借阅记录:借出时间、归还时间、应还时间。
3.实体之间在联系图书 n :1 出版社图书 n :1 分类图书 n :1 书库图书 n : 1读者图书 1 :n 借阅记录借阅记录 n :1 读者出版社 n :1 地址读者(籍贯) n :1 地址读者 n : 1 系别读者 n : 1 学历读者 n : 1 专业二、概念结构设计1.E-R 图根据概念模型设计的E-R 图,提供了实体型、属性和联系。
2.数据项清单category_book Relationship_7BookInfo图书编号价格书名作者出版时间出版社代码1<pi>Characters (12)Decimal (6,1)Characters (30)Characters (20)Date Characters (12)<M>bookzhujian ...<pi>PublishInfo出版社代码出版社名称出版社地址<pi>Characters (12)Characters (20)Characters (40)<M>Identifier_1...<pi>BookStorageInfo书库编号书库名称书库位置图书编号3<pi>Characters (12)Characters (30)Characters (40)Characters (12)<M>Identifier_1...<pi>unitInfo单位代码单位名称<pi>Characters (12)Characters (30)<M>Identifier_1...<pi>readerInfo读者号读者姓名性别贯籍出生年月民族政治面貌单位代码1专业代码1职别代码1角色职位信息<pi>Integer Characters (20)Characters (2)Characters (20)Date Characters (2)Characters (4)Characters (12)Characters (12)Characters (12)Integer Characters (40)<M>Identifier_1...<pi>majorInfo年级专业代码专业名称<pi>Characters (20)Characters (12)Characters (30)<M>Identifier_1...<pi>BorrowReaderInfo 借阅时间归还时间Date Datecategory类编号分类号类型名图书编号4<pi>Characters (12)Characters (12)Characters (30)Characters (12)<M>Identifier_1...<pi>bookindex索引号<pi>Characters (12)<M>Identifier_1<pi>3.相关表信息三、逻辑、物理结构设计为减少数据冗余,避免更新异常、插入异常和删除异常,该系统的关系模式被规范到3NF 。
系统数据库设计如下图所示。
<<DBCreateAfter (computed)>><<DBCreateAfter (computed)>><<DBCreateAfter (computed)>><<DBCreateAfter (computed)>><<DBCreateAfter (computed)>>BookInfo图书编号类编号书库编号价格书名作者出版时间出版社代码1...CHAR(12)CHAR(12)CHAR(12)NUMBER(6,1)CHAR(30)CHAR(20)DATECHAR(12)<pk><fk2><fk1>PublishInfo出版社代码图书编号出版社名称出版社地址...CHAR(12)CHAR(12)CHAR(20)CHAR(40)<pk><fk>BookStorageInfo 书库编号书库名称书库位置图书编号...CHAR(12)CHAR(30)CHAR(40)CHAR(12)<pk>unitInfo单位代码读者号单位名称CHAR(12)INTEGER CHAR(30)<pk><fk>readerInfo读者号专业代码读者姓名性别贯籍出生年月民族政治面貌单位代码1专业代码1职别代码1角色职位信息...INTEGER CHAR(12)CHAR(20)CHAR(2)CHAR(20)DATE CHAR(2)CHAR(4)CHAR(12)CHAR(12)CHAR(12)INTEGER CHAR(40)<pk><fk>majorInfo年级专业代码专业名称CHAR(20)CHAR(12)CHAR(30)<pk>BorrowReaderInfo 读者号索引号借阅时间归还时间INTEGER CHAR(12)DATE DATE<pk,fk1><pk,fk2>category类编号分类号类型名图书编号...CHAR(12)CHAR(12)CHAR(30)CHAR(12)<pk>bookindex索引号图书编号CHAR(12)CHAR(12)<pk><fk>ReaderInfo_view*readerInfo unitinfo majorInfoBookInfo_View *"BookInfo""PublishInfo""BookStorageInfo""category"...GetBoorwRecordGetReaderInfoGetBookInfoInsertReaderInfoInsertBorrowRecord unit_reader读者姓名政治面貌职位信息单位名称"unitInfo""readerInfo"...book_Storage 图书编号书名作者价格出版社代码1书库名称"BookStorageInfo""BookInfo"...四、数据库实施1.创建表create table "Books" ("Bno" CHAR(10) not null, "Cno" CHAR(10),"Sno" CHAR(10),"Pnumber" CHAR(10),"Bprice" INTEGER,"Bname" CHAR(20),"Bauthor" CHAR(20),"Bptime" DATE,"Bctime" DATE,constraint PK_BOOKS primary key ("Bno"))create table "Borrowing" ("Rnumber" CHAR(10) not null, "Bno" CHAR(10) not null, "BOtime" DATE,"BOretime" DATE,"BOshtime" DATE,"BOfine" CHAR(2),"BOyesorno" CHAR(2),constraint PK_BORROWING primary key ("Rnumber", "Bno"))create table "Major" ("Mno" CHAR(10) not null, "Mname" CHAR(20),"Myears" CHAR(1),constraint PK_MAJOR primary key ("Mno"))create table "Publisher" ("Pnumber" CHAR(10) not null, "Adminid" CHAR(10),"Pname" CHAR(20),constraint PK_PUBLISHER primary key ("Pnumber"))create table "Readers" ("Rnumber" CHAR(10) not null, "Dno" CHAR(5),"Adminid" CHAR(10),"DEno" CHAR(5),"Mno" CHAR(10),"Rname" CHAR(20),"Rnation" CHAR(20),"Rsex" CHAR(2),"Rprovence" CHAR(10),"RIDcard" CHAR(18),"Rretime" DATE,"Rcount" CHAR(2),"Rintime" DATE,constraint PK_READERS primary key ("Rnumber"))2.创建索引create index "Relationship_1_FK" on "Books" ("Pnumber" ASC)create index "Relationship_2_FK" on "Books" ("Cno" ASC)create index "Index_readerno" on "Borrowing" ("Rnumber" ASC)create index "Index_majorno" on "Readers" ("Mno" ASC)create index "Index_readername" on "Readers" ("Rname" ASC)3.创建视图create or replace view "Rnumber_Department" asselect Readers.Rnumber,Major.Mname,Department.Departmentfrom Readers,Major,Departmentwhere Readers.Mno=Major.Mno and Readers.DEno=Department.DEno;with read onlycreate or replace view unit_reader asselectreaderInfo.readerName,readerInfo.readerPoliticsStatus,readerInfo.officePoistion,unitInfo.uintNamefromunitInfo,readerInfowherereaderInfo.readerId2 = unitInfo.readerId2with read only4.创建储存过程create or replace procedure "AddBooks"(<arg> in out <type>) as(name ame%TYPE)asbeginif(exists(select * from Classification where Cname=name)) update Classification set Ccount=Ccount+1 where Cname=name;elseinsert into Classification(Cname) values(name);update Classification set Ccount=Ccount+1 where Cname=name;end if;end AddBooks;create or replace procedure "AddorUpdateMajor"(<arg> in out <type>) as(mno Major.Mno%TYPE,mname Major.Mname%TYPE,myear Major.Myears%TYPE)asbeginif(exists(select * from Major where Mno=mno))update Major set Mname=mname,Myears=myear where Mno=mno;elseinsert into Major(Mno,Mname,Myears) values(mno,mname,myear);end if;end AddorUpdateMajor;create or replace procedure "DeleteBook"(<arg> in out <type>) as (no Books.Bno%TYPE)asbegindelete from Books where Bno=no;end DeleteBook;create or replace procedure "DeleteBorrowing"(<arg> in out <type>) as(rno Borrowing.Rnumber%TYPE,bno Borrowing.Bno%TYPE,btime Borrowing.BOtime%TYPE)asbegindelete Borrowing where Rnumber=rno and Bno=bno and BOtime=btime;end DeleteBorrowing;create or replace procedure "SelectBook"(<arg> in out <type>) as (no Bname_Saddress.Bno%TYPE)asbeginselect Sname,Saddress,Bname,Bauthor from Bname_Saddress where Bno=no;end SelectBook;create or replace procedure "SelectBorrowing"(<arg> in out <type>) as(rno Borrowing.Rnumber%TYPE,bno Borrowing.Bno%TYPE)asbeginselect * from Borrowing where Rnumber=rno and Bno=bno;end SelectBorrowing;五、总结经过这段时间的Oracle数据库实训,让我学到了很多有用的知识,包括建表,索引,视图,存储过程等。