1、《数据库系统》实验报告 课 程:数据库系统 院 系:计算机学院 班 级:08065801 成 绩:100 学号: 姓名: 学号: 姓名: 指导教师:李波 日期: 年 月 日 目 录 1 数据库设计3 1。1 需求分析3 1。2 概念模式设计3 1。3 关系模式设计3 2 数据库编程3 2。1 表的创建3 2.2 数据的修改3 2。3 查询4 2.4统计4 2。5视图及索引4 2.6约束及触发器4 3 应用程序设计(选做)4 4 小结4 1 数据库设计 1。
2、1 需求分析 图书馆可以利用本系统实现对图书馆信息的管理,本系统的主要功能为管理有关读者,出版社,书记,借阅者以及管理者的信息. 1。数据需求分析 a)读者信息;包括借书证号,姓名,联系方式,借书的数目. b)借阅信息, 包括借阅日期,应归还日期,所借图书的编号,以及证件号码。 c)管理者信息,管理者名称,管理者编号,以及管理者联系方式。 根据以上分析,本系统要有读者信息表,出版社信息表,书籍信息表,借阅信息表以及管理者信息表。 2。事务需求分析 a)读者信息管理部分,应完成以下功能 i)可以浏览读者信息,并且可以对读者信息进行维护。 ii) 可以删除添加及更改读者信息.
3、 b)书籍信息管理部分应完成以下功能 i) 可以浏览书籍信息 ii) 可以删除添加以及更改图书信息 c) 图书管理系统部分应完成以下功能 i) 可以浏览当前管理者的信息 ii) 可以更改删除以及添加管理者的信息 1。2 概念模式设计本节中给出所设计的ER图 cardnum name Phonenum ID type Reader amount deadline own readername cardnum money Borrowcard iflost borrowdate
4、 returndate booknum name Booklost Bookborrow cardnum borrowcard booknum finaldate readroom name Bookplace Belong to booknum BOOK type booknum bookshelf publish manage ID publishtime gender name iflendable author manager 1。3 关系模式设计 Book表
5、属性名 数据类型 是否主键 是否允许为空 缺省值 说明 booknum Char(20) yes NOT NULL 书号 name Char(20) no NOT NULL 书名 type Char(20) no NOT NULL 书的类型 publish Char(20) no NOT NULL 出版社 publishtime datetime no NOT NULL 出版时间 author Char(10) no NOT NULL 书的作者 iflendable boolean no NO
6、T NULL true 是否可借 Manager表 属性名 数据类型 是否主键 是否允许为空 缺省值 说明 ID Char(20) yes NOT NULL 管理员编号 name Char(10) no NOT NULL 管理员姓名 gender Char(10) no NULL 管理员性别 Reader表 属性名 数据类型 是否主键 是否允许为空 缺省值 说明 ID Char(20) yes NOT NULL 读者证件号 name Char(10) no NOT NULL 读者姓名 car
7、dnum Char(20) no NOT NULL 借书证号 type Char(10) no NOT NULL 读者类型 Phonenum Char(15) no NULL 联系号码 deadline datetime no NOT NULL 有效期 Bookplace表 属性名 数据类型 是否主键 是否允许为空 缺省值 说明 readroom Char(10) no NOT NULL 阅览室 bookshelf Char(10) no NOT NULL 书架号 booknum Char(20
8、 yes NOT NULL 书号 Borrowcard表 属性名 数据类型 是否主键 是否允许为空 缺省值 说明 cardnum Char(20) yes NOT NULL 借书证号 readername Char(10) no NOT NULL 读者姓名 amount int no NOT NULL 借书数目 money float no NOT NULL 卡内余额 iflost boolean no NOT NULL false 是否丢失 Bookborrow表 属性名 数据类型 是否主键
9、 是否允许为空 缺省值 说明 cardnum Char(20) yes NOT NULL 借书证号 booknum Char(20) yes NOT NULL 所借书号 name Char(20) no NOT NULL 书名 borrowdate datetime yes NOT NULL 借书日期 finaldate datetime no NOT NULL 截止日期 returndate datetime no NULL NULL 还书日期 Booklost表 属性名 数据类型 是否主键 是
10、否允许为空 缺省值 说明 booknum Char(20) yes NOT NULL 丢失书号 borrowcard Char(20) no NOT NULL 借书证号 2 数据库编程 2。1 表的创建 CREATE TABLE Book ( ”booknum" char(20) PRIMAR KEY; ”name” char(20) NOT NULL; ”type” char(20) NOT NULL; ”publish” char(20)
11、 NOT NULL; "publishtime” datatime NOT NULL; ”author" char(10) NOT NULL; ”iflendable” boolean NOT NULL; ) CREATE TABLE Manager ( ”ID" char(20) PRIMAR KEY; ”name” char(10) NOT NULL; ”gender” char(10) NOT NULL; ) CREATE
12、 TABLE Reader ( ”ID” char(20) PRIMAR KEY; ”name” char(10) NOT NULL; ”cardnum” char(20) NOT NULL; ”type" char(10) NOT NULL; ”Phonenum” char(15) NULL; ”deadline” datatime NOT NULL; ) CREATE TABLE Bookplace ( ”readroom" c
13、har(10) NOT NULL; ”bookshelf” char(10) NOT NULL; "booknum" char(20) PRIMAR KEY; ) CREATE TABLE Borrowcard ( ”cardnum" char(20) PRIMAR KEY; ”booknum" char(20) PRIMAR KEY; "name" char(20) NOT NULL; ”borrowdate” datatime PRIMAR KEY; ”finaldate” data
14、time NOT NULL; ”returndate” datatime NOT NULL; ) CREATE TABLE Booklost ( ”booknum” char(20) PRIMAR KEY; ”borrowcard” char(20) NOT NULL; ) 2。2 数据的修改 1) 读者信息的修改(添加、删除、修改) 添加读者: INSERT INTO reader(ID,name,cardnum,type,phonenum,deadline) VALUES(’3605021990',’吴斐嘉’
15、’s08010078','本科生’,'15959595959’,’2011—07—01’); 删除读者: DELETE FROM reader where ID=’3605021990’; 修改读者: UPDATE reader SET phonenum=’15912345678' WHERE ID='3605021990'; 2) 借书证的挂失、补办、充值 挂失: UPDATE borrowcard SET iflost=true WHERE cardnum=’s08010078'; 补办: INSERT INTO borrowcard(cardnum,reade
16、rname,amount,money,iflost) VALUES('s08060077','吴斐嘉’,0,0。00,false); 充值: UPDATE borrowcard SET money=5.77 WHERE cardnum=’s08010078’; 3) 书籍信息的修改 增加图书馆从未有的新书: INSERT INTO book VALUES(’978—7—5366—01’,’说谎','小说’,’重庆出版社’,'2006—10—17',‘李伯曼’,true); 增加已经有的书: INSERT INTO book VALUES('978—7—5366—02',
17、’说谎’,'小说',’重庆出版社’,'2006—10—17’,‘李伯曼',true); 报废某一本书: DELETE FROM book WHERE booknum='978-7-5366—02’; 馆藏位置的修改 增加新的阅览室或书架: INSERT INTO bookplace(readroom,bookshelf) VALUES(’第三借阅室','3—67'); 修改书籍的馆藏地址: UPDATE bookplace SET readroom=’第三借阅室’,bookshelf=’3—67' WHERE booknum='978—7-5366—02’; 4) 图书
18、的借阅及归还 借阅: INSERT INTO bookborrow(cardnum,booknum,name,borrowdate,finaldate) VALUES(’s08010078’,’978—7—5366—02’,’说谎’,'2010-06—07’,’2010—07—07’); UPDATE book SET iflendable=false WHERE booknum='978—7—5366-02'; UPDATE borrowcard SET amount=amount+1 WHERE cardnum='s08010078’; 归还: UPDATE book
19、 SET iflendable=true WHERE booknum=’978-7-5366—02’; UPDATE bookborrow SET returntime=’2010-07-04' WHERE cardnum='s08010078’ AND booknum=’978—7—5366-02’ AND borrowdate='2010-06—07’; UPDATE borrowcard SET amount=amount-1 WHERE cardnum='s08010078’; 6) 图书损坏或丢失的处理 图书损坏: UPDATE book SET ifl
20、endable=false WHERE booknum='978-7—5366—02'; UPDATE borrowcard SET money=money—5; 图书丢失: DELETE FROM book WHERE WHERE booknum=’978—7-5366—02’; INSERT INTO booklost(booknum,cardnum) VALUES(’978—7-5366—02','s08010078'); UPDATE borrowcard SET money=money-15; 2.3 查询 本节中至少包含实现以下查询的相应的SQL语句和运行结
21、果: 1) 读者信息查询(可随意给定一个读者证件号,以下查询类似.具体内容包括证件号、姓名、读者条码号、读者类型、联系方式、有效期等) SELECT * FROM reader WHERE ID=’3605021990’; 2) 读者当前借阅明细查询(包括当前借阅书籍的条码号、书名、借阅日期、应还日期、馆藏地) SELECT bookborrow。booknum,name,borrowdate,finaldate,readroom,bookshelf FROM bookborrow,bookplace WHERE bookborrow。bo
22、oknum=bookplace。booknum AND cardnum=’s08010078’ AND finaldate〉=GETDATE(); 3) 读者历史借阅明细查询(包括历史上所有借阅书籍的条码号、书名、借阅日期、归还日期、馆藏地) SELECT bookborrow。booknum,name,borrowdate,returndate,readroom,bookshelf FROM bookborrow,bookplace WHERE bookborrow。booknum=bookplace.booknum AND cardnu
23、m='s08010078'; 4) 过期未还的图书及相关读者信息的查询 SELECT * FROM bookborrow,reader WHERE bookborrow。cardnum=reader.cardnum AND returndate>=finaldate; 5) 读者的图书遗失记录查询 SELECT * FROM book WHERE booknum IN (SELECT booknum FROM booklost WHERE cardnum='s08
24、010078'); 6) 书籍的各类检索(包括书籍的类型、书名、作者、出版社、出版年份、馆藏数量、在馆数量,且得出结果根据某属性排序) SELECT * FROM book,bookplace WHERE book。booknum=bookplace。booknum AND name='说谎’ ORDER BY book.booknum; 在馆数量: SELECT COUNT(*) FROM book WHERE name='说谎’ AND iflendable=true GROUP BY name
25、 ORDER BY name; 7) 所有毕业生应归还图书情况查询 SELECT booknum FROM reader,bookborrow WHERE reader.cardnum=bookborrow.cardnum AND deadline〈=finaldate; 2。4 统计 本节中至少包含实现以下查询的相应的SQL语句和运行结果: 1) 2010年5月每日图书借出册数 SELECT COUNT(*) FROM bookborrow WHERE borrowdate BETWEEN '2010—05-01' AND ’2
26、010-05—31' GROUP BY borrowdate; 2) 2010年5月热借图书排行榜 SELECT name,COUNT(*) FROM bookborrow WHERE borrowdate BETWEEN ’2010—05-01' AND ’2010—05—31’ GROUP BY name ORDER BY COUNT(*) DESC; 3) 各类读者平均持有(借而未还)图书数量 SELECT AVG(amount) FROM borrowcard,reader WHERE borrowcard.cardn
27、um=reader。cardnum AND reader.cardnum IN (SELECT cardnum FROM bookborrow WHERE returndate=NULL ) GROUP BY type; 如有其它功能,可做出相应补充。 2.5 视图及索引 本节中定义必要的视图及索引。 视图 CREATE VIEW science AS SELECT booknum,name,autjor FROM Book WHERE type="science”; CREATE
28、 VIEW student AS SELECT ID name FROM Reader WHERE type=”student”; CREATE VIEW s08010078 AS SELECT booknum,name,amout FROM Bookborrow,Borrowcard WHERE cardnum="s08010078”; 索引 CREATE INDEX KeyIndex ON Book(booknum,name) CREATE INDEX Ke
29、yIndex ON Reader(ID,name) CREATE INDEX TimeIndex ON Bookborrow(borrowdate,finaldate,returndate) 2。6 触发器 本节中定义必要的触发器,如:读者可借阅的书刊数量不能超过其读者类型所限制的数量。读者还书时应同时改变书的状态及该类图书的在馆数量。读者还书时如果超出应还日期应按一定原则罚款. 3 应用程序设计(选做) 使用DELPHI 或JAVA 实现图书查询功能的编程,要求:根据输入的查询信息,如:书名、作者名、出版社、出版时间等,完成图书的查询,显示查询结果,包括图书的基本信息,馆藏数量,当前在馆数量。将设计好的程序运行界面贴在这里并对实现技术作必要的说明. 4 小结 在整个设计过程中的心得体会. 10






