图书馆借阅系统数据库设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌航空大学实验报告
二016 年3 月28日
课程名称: 数据库原理实验名称:图书馆借阅系统
班级: 14207218 姓名: 胡合达同组人:
指导教师评定:签名:
一、实验环境
1.Windows2000或以上版本;
2.SQLServer 2005。

二、实验目的
了解并掌握数据库设计基本方法
三.系统需求分析
1.设计本系统模拟学生在图书馆借阅图书的内容,能够实现以下功能:
借阅信息的查询功能;
图书信息的多关键字检索查询;
图书的出借、返还及超期罚款;
2、能够提供一定的安全机制,提供数据信息授权访问,防止随意删改、查询。

3.对查询、统计的结果能够列表显示。

4、处理对象:学生,馆藏图书信息,借阅信息,罚款信息,借阅历史
5、安全性要求
系统安全性要求体现在数据库安全性、信息安全性与系统平台的安全性等方面。

安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;系统平台的安全性体现在操作系统的安全性、计算机系统的安全性与网络体系的安全性等方面。

6、完整性要求
系统完整性要求系统中数据的正确性以及相容性。

可通过建立主、外键,使用check约束,或者通过使用触发器与级联更新。

四.概念结构设计
系统开发的总体目标就是实现图书馆管理的系统化与自动化,缩短借阅者的等待时间,减轻工作人员的工作量,方便工作人员对它的操作,提高管理的质量与水平,做到高效、智能化管理,从而达到提高图书管理效率的目的。

概念设计阶段主要就是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程,它就是整个数据库设计的关键。

图书借阅系统的E-R图
1
m
1 n m n
E -R 图各实体的属性如下所示:
图书:Book(BookI D, B ookNo, B ookN ame, B oo kWriter, BookPublish,, B oo
kDate,Boo kClas s,Boo kSta te,
馆室
BookRNo)
读者:Reader(ReaID,ReaName,ReaSex,ReaNo,ReaLBID, ReaDep, ReaGrade, ReaPref, ReaDate,Reasx)
管理员: Maneger (MID,MName,MSex)
馆室: Room(RoomNo,RoomMID,RoomNum,RoomAddre)
借阅信息:Borrow(BookID,ReaderID,BookName,BookWriter, Outdat e,YHdate)
借阅历史:History(BookID,ReaderID,BookName,BookWriter, Outdate,
Indate,YHdate)
罚款信息:Fine (BookID,ReaderID,BookName,Outdate,Indate,Fine, CLState,MI D)
五.逻辑结构设计
以上的概念设计阶段就是独立于任何一种数据模型的,但就是逻辑设计阶段就与选用的DBMS产品发生关系了,系统逻辑设计的任务就就是将概念设计阶段设计好的基本E-R图转换为选用DBMS产品所支持的数据模型相符合的逻辑结构。

具体内容包括数据组织(将E-R图转换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据处理(画出系统功能模块图)两大任务。

将图书借阅E-R图转换为关系模型
图书
列名数据类型可否为空说明
BookID Charnot null 图书编号
BookNo Char notnull 图书的索书号BookName Char not null 图书的书名BookWriter Char not null 图书作者
BookPulish Char not null 图书出版社
Booknum Smallint Not null 图书数量
BookDateDate 出版日期
BookClassChar 图书的分类
Booknums smallint Notnull 图书可借数量
BookStateChar not null 图书就是否可借
BookRNoCharnot null图书所在馆室号
读者
列名数据类型可否为空说明
ReaIDChar notnull 读者编号
ReaName Char notnull 读者姓名
ReaSex Char not null读者性别
ReaNo Char notnull 读者学号ReaDep Char读者所在学院
ReaPref Char 读者所属专业
ReaGrade Char 读者的年级ReaDate Datenot null 办证日期
ReaBs Smallint Not null 已借本数
Reastate CharNotnnll借书状态
Reasx Smallint Not null 借书上限
管理员
列名数据类型可否为空说明MID主键Char notnull 管理员编号
MNameCharnotnull 管理员姓名MSex Char管理员性别
馆室
列名数据类型可否为空说明
RoomNo Char notnull 馆室号RoomMID Char not null 馆室管理员编号Roomnum Char not null 馆室拥有图书数目RoomAddre Char 馆室地址
RoomType,Char 馆室类型
借阅信息
列名数据类型可否为空说明
ReaID Char not null 读者编号BookID Charnotnull 图书编号
BookNameChar not null 图书名
BookWriter Char 作者
Outdate Date notnull 借阅时间
Indate Date 归还时间
YHdateDate not null 应还时间
Fine CharNotnull罚款金额
CLState Char处理状态
MIDChar not null管理员编号
六.数据库的实施
创建数据库及表格
管理员基本信息表的建立:
create tableManeger(
MIDchar(10) primary key,
MNamechar(10) not null,
MSex char(2),
check(MSex='男'orMSex ='女')
)
图书馆室基本信息表的建立:
create tableRoom(
RoomNo char(5)primary key,
RoomMIDchar(10) notnull,
Roomnumchar(5) not null ,
RoomAddre char(20),
RoomTypechar (10),
foreign key(RoomMID) references Maneger(MID)on deletecascadeon update cascade,
)
馆藏图书基本信息表的建立:
create table Book(
BookID char(9) primary key,
BookNo char(20) not null,
BookName char(50) not null,
BookWriterchar(30)not null,
BookPublish char(20) not null,
Booknumsmallint check (Booknum>=0),
BookDate datetime,
BookClass char(20),
Booknums smallintcheck (Booknum>=0),
BookState char(10) default ‘可借’notnull,
BookRNo char(5) not null,
check (Booknum>Booknums ),
foreign key(BookRNo)references Room(RoomNo)on delete cascade on update cascade,
)
读者基本信息表的建立:
create table Reader(
ReaID char(9) primarykey,
ReaName char(10) notnull,
ReaSexchar(2) not null,
ReaNo char(9) notnull,
Reasx smallint not null,
ReaBs smallintnot null,
ReaDep char(20),
ReaGradechar(5),
ReaPrefchar(20),
ReaDateDatetime,
Reastate char(5) not null default ‘可借’ ,
foreignkey(ReaLBID) references ReaderType(LBID)on delete cascade on update cascade ,
check(ReaSex ='男'or ReaSex='女')
)
(6)借阅基本信息表的建立:
create tableBorrow(
BookID char(9),
ReaID char(9),
Outdate Datetimenot null,
YHdate Datetimenot null,
Indate Datetime,
Fine char(5)not null default‘0’,
CLState char(8),
MID char(10) not null,
primary key(BookID,ReaID),
foreignkey(MID) referencesManeger(MID)on deletecascadeon update cascade
)
建立视图
ﻩ(1)用于查询图书基本信息的视图定义如下:
ﻩﻩcreate view Bookview (索书号, 书名, 作者, 出版社, 图书状态)
as
selectBookNo,BookName,BookWriter,BookPublish,BookState
fromBook
(2)用于读者基本信息查询的视图定义如下:
ﻩﻩﻩcreate viewReaderview (读者姓名,类型,学院,专业,办证日期)
as
select ReaName,ReaType,ReaDep,ReaPref,ReaDate
from Reader
(3)用于显示当前借阅基本信息的视图定义如下:
ﻩﻩcreate view Borrowview (读者编号,书名,作者,借阅日期,到期日期) as
select ReaID,BookName,BookWriter,Outdate,YHdate
from Borrow,Book
whereBorrow、BookID=Book、BookIDand Borrow、Indateis null
(4)用于借阅历史信息查询的视图定义如下:
create viewHistoryview(读者编号,书名,借阅日期,归还日期)
as
select ReaID,BookName,Outdate,Indate
from Borrow,Book
where Borrow、BookID=Book、BookID and Borrow、Indate isnot null
(5)用于查询罚款信息的视图定义如下:
ﻩﻩﻩcreate viewFineview (读者编号,书名,借阅日期,归还日期,罚款,处理状态) as
select ReaID,BookName,Outdate,Indate,Fine,CLState
fromBorrow,Book
where Borrow、BookID=Book、BookIDand Fine is not null
建立索引
create clustered indexBookPublish on Book(BookPublish);
createclustered index ReaDepon Reader(ReaDep);
建立触发器
当在中增加一条借阅记录时,书的可借数量减少一本,修改读者,并检查读者状态
create trigger Borrow_insert1
on Borrow
for insert
as
declare @BookID char(9)
declare@ReaID char(9)
select@ReaID=ReaID
from inserted
select @BookID=BookID
from inserted
Select @Reastate=Reastate
From Reader
WhereReaID=@ReaId
If(@Reastate=’不可借’)
Begin
Raiserror (‘该学生状态不可借书’,16,1)
Rollbacktransaction
End
update Book
setBooknums=Booknums-1
where BookID=@BookID
update Reader
set ReaBs=ReaBs+1
where ReaID =@ReaID
当读者达到借书上限,设置借书状态为‘不可借’create trigger Reader _update
on Reader
for update
as
declare @ReaBs smallint
select@ReaBs =ReaBs
from inserted
declare@ReaID char(9)
select@ReaID=ReaID
from inserted
Select@Reasx =Reasx
From Reader
where BookID=@BookID
If(@Reasx =@ReaBs)
Begin
update Reader
set Reastate =’不可借’
whereReaID=@ReaID
End
还书的时候,书的可借数量增加一本,修改读者状态createtriggerBorrow_insert
onBorrow
forinsert
as
declare@BookID char(9)
declare@ReaID char(9)
select @ReaID=ReaID
frominserted
select @BookID=BookID
from inserted
Select @Reastate=Reastate
From Reader
WhereReaID=@ReaId
If(@Reastate =’超期’)
Begin
Raiserror(‘该学生状态借书超期’,16,1)
Rollback transaction
End
update Book
setBooknums=Booknums+1
where BookID=@BookID
update Reader
set ReaBs=ReaBs-1
where ReaID=@ReaID
存储过程
1、Book_Insert的定义:
CREATE PROCEDURE Book_Insert
@BookIDchar(9) ,
@BookNochar(20),
@BookName char(50),
@BookWriter char(30),
@BookPublishchar(20),
@BookDate datetime,
@BookClass char(20),
@Booknums smallint,
@Booknum smallint,
@BookState char(10),
@BookRNo char(5)
as
insertinto Book
values(@BookID,@BookNo,@BookName,@BookWriter ,@BookPublish,@BookDate,@Bo okClass ,@BookState,@BookRNo,@Booknums,@Booknum);
2、Reader_Insert的定义:
CREATE PROCEDURE Reader_Insert
@ReaID char(9),
@ReaName char(10),
@ReaSexchar(2),
@ReaNo char(9),
@ReaDepchar(20),
@ReaGradechar(5),
@ReaPref char(20),
@ReaDate Datetime
@ReaBs smallint,
@Reastatechar(5),
@Reasxsmallint,
as
insert intoReader
values( @ReaID ,@ReaName, @ReaSex,@ReaNo ,@ReaDep ,
@ReaGrade,@ReaPref ,@ReaDate,@ReaBs,@Reastate,@Reasx ;
3、Maneger_Insert的定义:
CREATE PROCEDUREManeger_Insert
@MID char(10),
@MName char(10),
@MSexchar(2),
as
insertinto Maneger
alues(@MID,@MName,@MSex );
4、Borrow_Insert的定义:
CREATE PROCEDURE Borrow_Insert
@BookID char(9),
@ReaIDchar(9),
@Outdate Datetime ,
@YHdateDatetime ,
@Indate Datetime,
@Fine char(5),
@CLState char(8),
@MIDchar(10)
asﻩ
insert intoBorrow
values(@BookID ,@ReaID ,@Outdate,@YHdate,@Indate,@Fine ,@CLSta te ,@MID );
5、Query_Reader_R的定义:
create procedure Query_Reader_R
ﻩ@ReaID char(9)
ﻩas
ﻩselect *
ﻩﻩfrom Readerview
ﻩwhere编号=ltrim(@ReaID);
图书馆借阅系统数据库设计
6. Query_Reader_M的定义:
create procedureQuery_Reader_M
asﻩ
select*
fromReaderview
7、Query_Book_Writer的定义:
create procedure Query_Book_Writer
@BookWriter char(50)
ﻩas
ﻩselect *
from Bookview
where作者like'%'+ltrim(@BookWriter)+'%';
8. Query_Book_Name_Publish的定义:
create procedure Query_Book_Name_Publish
@BookName char(50),
@BookPublish char(20)
as
select *
from Bookview
where书名=ltrim(@BookName) and出版社=ltrim(@BookPublish);
9、Delete_Reader的定义:
create procedure Delete_Reader
@ReaNo char(9)
ﻩﻩas
ﻩdelete
ﻩﻩfrom Reader
where ReaNo =ltrim(@ReaNo);
10、Delete_Book的定义:
create procedure Delete_Book
ﻩ@BookIDchar(9)
ﻩas
ﻩdelete
ﻩfrom Book
whereBookID=ltrim(@BookID);
七.实验小结
这次实验使我熟悉了如何独立的建立一个系统,通过自己所学的知识,综合运用,并了解自己的不足之处。

相关文档
最新文档