图书馆借阅系统数据库设计.docx
《图书馆借阅系统数据库设计.docx》由会员分享,可在线阅读,更多相关《图书馆借阅系统数据库设计.docx(19页珍藏版)》请在冰豆网上搜索。
图书馆借阅系统数据库设计
南昌航空大学实验报告
二
016
年
3
月
28
日
课程名称:
数据库原理
班级:
14207218
指导教师评定:
实验名称:
姓名:
图书室借阅系统
胡合达同组人:
署名:
一、实验环境
1.Windows2000或以上版本;
2.SQLServer2005。
二、实验目的
认识并掌握数据库设计基本方法
三.系统需求剖析
1.设计本系统模拟学生在图书室借阅图书的内容,可以实现以下功能:
借阅信息的查问功能;
图书信息的多重点字检索查问;
图书的出借、返还及超期罚款;
2.可以供给必定的安全体制,供给数据信息受权接见,防备任意修改、查问。
3.对查问、统计的结果可以列表显示。
4.办理对象:
学生,馆藏图书信息,借阅信息,罚款信息,借经历史
5.安全性要求
系统安全性要求表此刻数据库安全性、信息安全性和系统平台的安全性等方面。
安全性先经过视图体制,不一样的用户只好接见系统受权的视图,这样可供给系统数据必定程度上的安全性,再经过分派权限、设置权限级别来差别对待不一样操作者对数据库的操作来提升数据
库的安全性;系统平台的安全性表此刻操作系统的安全性、计算机系统的安全性和网络系统的安全性等方面。
6.完好性要求
系统完好性要求系统中数据的正确性以及相容性。
可经过成立主、外键,使用
拘束,或许经过使用触发器和级联更新。
check
四.观点构造设计
系统开发的整体目标是实现图书室管理的系统化和自动化,缩短借阅者的等候时间,减
轻工作人员的工作量,方便工作人员对它的操作,提升管理的质量和水平,做到高效、智能
化管理,进而达到提升图书管理效率的目的。
观点设计阶段主假如将需求剖析阶段获得的用户需求抽象为信息构造(观点模型)的过
程,它是整个数据库设计的重点。
图书借阅系统的E-R图
读者
n
罚款
m
管理员
m
1
管理
馆室借阅
1m
1nmn
属于
送还
n
图书
n
m
读者
E-R图各实体的属性以下所示:
图书:
Book(BookID,BookNo,BookName,
BookWriter,
BookPublish,,
BookDate,BookClass,BookState,
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,Outdate,YHdate)
借经历史:
History(BookID,ReaderID,BookName,BookWriter,Outdate,
Indate,YHdate)
罚款信息:
Fine(BookID,ReaderID,BookName,Outdate,Indate,Fine,CLState,MID)
五.逻辑构造设计
以上的观点设计阶段是独立于任何一种数据模型的,可是逻辑设计阶段就与采用的
DBMS产品发生关系了,系统逻辑设计的任务就是将观点设计阶段设计好的基本E-R图变换
为采用DBMS产品所支持的数据模型相切合的逻辑构造。
详细内容包含数据组织(将E-R图
变换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据办理(画出系统功
能模块图)两大任务。
将图书借阅E-R图变换为关系模型
图书
列名
数据种类
能否为空
说明
BookID
Char
notnull
图书编号
BookNo
Char
notnull
图书的索书号
BookName
Char
notnull
图书的书名
BookWriter
Char
notnull
图书作者
BookPulish
Char
notnull
图书第一版社
Booknum
Smallint
Notnull
图书数目
BookDate
Date
第一版日期
BookClass
Char
图书的分类
Booknums
smallint
Notnull
图书可借数目
BookState
Char
notnull
图书能否可借
BookRNo
Char
notnull
图书所在馆室号
读者
列名
数据种类
能否为空
说明
ReaID
Char
notnull
读者编号
ReaName
Char
notnull
读者姓名
ReaSex
Char
notnull
读者性别
ReaNo
Char
notnull
读者学号
ReaDep
Char
读者所在学院
ReaPref
Char
读者所属专业
ReaGrade
Char
读者的年级
ReaDate
Date
notnull
办证日期
ReaBs
Smallint
Notnull
已借本数
Reastate
Char
Notnnll
借书状态
Reasx
Smallint
Notnull
借书上限
管理员
列名
数据种类
能否为空
说明
MID主键
Char
notnull
管理员编号
MName
Char
notnull
管理员姓名
MSex
Char
管理员性别
馆室
列名
数据种类
能否为空
说明
RoomNo
Char
notnull
馆室号
RoomMID
Char
notnull
馆室管理员编号
Roomnum
Char
notnull
馆室拥有图书数目
RoomAddre
Char
馆室地点
RoomType,
Char
馆室种类
借阅信息
列名
数据种类
能否为空
说明
ReaID
Char
notnull
读者编号
BookID
Char
notnull
图书编号
BookName
Char
notnull
图书名
BookWriter
Char
作者
Outdate
Date
notnull
借阅时间
Indate
Date
送还时间
YHdate
Date
notnull
应还时间
Fine
Char
Notnull
罚款金额
CLState
Char
办理状态
MID
Char
notnull
管理员编号
六.数据库的实行
创立数据库及表格
管理员基本信息表的成立:
createtableManeger(
MID
char(10)
primarykey,
MNamechar(10)
notnull,
MSex
char
(2),
check(MSex='男'orMSex='女')
)
图书室室基本信息表的成立:
createtableRoom(
RoomNochar(5)primarykey,
RoomMIDchar(10)notnull,
Roomnumchar(5)notnull,
RoomAddrechar(20),
RoomTypechar(10),
foreignkey(RoomMID)referencesManeger(MID)ondeletecascade
)
onupdatecascade,
馆藏图书基本信息表的成立:
createtableBook(
BookIDchar(9)primarykey,
BookNochar(20)notnull,
BookNamechar(50)notnull,
BookWriterchar(30)notnull,
BookPublishchar(20)notnull,
Booknumsmallintcheck(Booknum>=0),
BookDatedatetime,
BookClasschar(20),
Booknumssmallintcheck(Booknum>=0),
BookStatechar(10)default‘可借’notnull,
BookRNochar(5)notnull,
check(Booknum>Booknums),
foreignkey(BookRNo)referencesRoom(RoomNo)ondeletecascade
onupdatecascade,
)
读者基本信息表的成立:
createtableReader(
ReaID
char(9)
primarykey,
ReaName
char(10)notnull,
ReaSex
char
(2)
notnull,
ReaNo
char(9)
notnull,
Reasxsmallintnotnull,
ReaBssmallintnotnull,
ReaDep
char(20),
ReaGrade
char(5),
ReaPref
char(20),
ReaDate
Datetime,
Reastate
char(5)notnulldefault
‘可借’,
foreignkey(ReaLBID)referencesReaderType(LBID)ondeletecascade
onupdatecascade,
check(ReaSex='男'orReaSex='女')
)
(6)借阅基本信息表的成立:
createtableBorrow(
BookID
char(9),
ReaID
char(9),
Outdate
Datetimenotnull,
YHdate
Datetimenotnull,
Indate
Datetime,
Fine
char(5)notnulldefault
‘0’,
CLState
char(8),
MID
char(10)notnull,
primarykey(BookID,ReaID),
foreignkey(MID)referencesManeger(MID)ondeletecascade
onupdatecascade
)
成立视图
(1)用于查问图书基本信息的视图定义以下:
createviewBookview(索书号,书名,作者,第一版社,图书状态)
as
selectBookNo,BookName,BookWriter,BookPublish,BookStatefromBook
(2)用于读者基本信息查问的视图定义以下:
createviewReaderview(读者姓名,种类,学院,专业,办证日期)
as
selectReaName,ReaType,ReaDep,ReaPref,ReaDate
fromReader
(3)用于显示目前借阅基本信息的视图定义以下:
createviewBorrowview(读者编号,书名,作者,借阅日期,到期日期)
as
selectReaID,BookName,BookWriter,Outdate,YHdate
fromBorrow,Book
whereBorrow.BookID=Book.BookIDandBorrow.Indateisnull
(4)用于借经历史信息查问的视图定义以下:
createviewHistoryview(读者编号,书名,借阅日期,送还日期)
as
selectReaID,BookName,Outdate,Indate
fromBorrow,Book
whereBorrow.BookID=Book.BookIDandBorrow.Indateisnotnull(5)用于查问罚款信息的视图定义以下:
createviewFineview(读者编号,书名,借阅日期,送还日期,罚款,办理状态)
as
selectReaID,BookName,Outdate,Indate,Fine,CLState
fromBorrow,Book
whereBorrow.BookID=Book.BookIDandFineisnotnull
成立索引
createclusteredindexBookPublishonBook(BookPublish);
createclusteredindexReaDeponReader(ReaDep);
成立触发器
当在中增添一条借阅记录时,书的可借数目减少一本,改正读者,并检查读者状态
createtriggerBorrow_insert1
onBorrow
forinsert
as
declare@BookIDchar(9)
declare@ReaIDchar(9)
select@ReaID=ReaID
frominserted
select@BookID=BookID
frominserted
Select@Reastate=Reastate
FromReader
WhereReaID=@ReaId
If(@Reastate=’不行借’)
Begin
Raiserror(‘该学生状态不行借书’,16,1)
Rollbacktransaction
End
updateBook
setBooknums=Booknums-1
whereBookID=@BookID
updateReader
setReaBs=ReaBs+1
whereReaID=@ReaID
当读者达到借书上限,设置借书状态为‘不行借’
createtriggerReader_update
onReader
forupdate
as
declare@ReaBssmallint
select@ReaBs=ReaBs
frominserted
declare@ReaIDchar(9)
select@ReaID=ReaID
frominserted
Select@Reasx=Reasx
FromReader
whereBookID=@BookID
If(@Reasx=@ReaBs)
Begin
updateReader
setReastate=’不行借’
whereReaID=@ReaID
End
还书的时候,书的可借数目增添一本,改正读者状态
createtriggerBorrow_insert
onBorrow
forinsert
as
declare@BookIDchar(9)
declare@ReaIDchar(9)
select@ReaID=ReaID
frominserted
select@BookID=BookID
frominserted
Select@Reastate=Reastate
FromReader
WhereReaID=@ReaId
If(@Reastate=’超期’)
Begin
Raiserror(‘该学生状态借书超期’,16,1)
Rollbacktransaction
End
updateBook
setBooknums=Booknums+1
whereBookID=@BookID
updateReader
setReaBs=ReaBs-1
whereReaID=@ReaID
储存过程
1.Book_Insert的定义:
CREATEPROCEDUREBook_Insert
okClass
@BookIDchar(9),
@BookNochar(20),
@BookNamechar(50),
@BookWriterchar(30),
@BookPublishchar(20),
@BookDatedatetime,
@BookClasschar(20),
@Booknumssmallint,
@Booknumsmallint,
@BookStatechar(10),
@BookRNochar(5)
as
insertintoBook
values(@BookID,@BookNo,@BookName,@BookWriter
@BookState,@BookRNo,@Booknums,@Booknum);
@BookPublish
@BookDate,@Bo
2.Reader_Insert的定义:
CREATEPROCEDUREReader_Insert
@ReaIDchar(9),
@ReaNamechar(10),
@ReaSexchar
(2),
@ReaNochar(9),
@ReaDepchar(20),
@ReaGradechar(5),
@ReaPrefchar(20),
@ReaDateDatetime
@ReaBssmallint,
@Reastatechar(5),
@Reasxsmallint,
as
insertintoReader
values(@ReaID,@ReaName,@ReaSex,@ReaNo,@ReaDep,@ReaGrade,@ReaPref,@ReaDate,@ReaBs,@Reastate,@Reasx;
3.Maneger_Insert的定义:
CREATEPROCEDUREManeger_Insert
@MIDchar(10),
@MNamechar(10),
@MSexchar
(2),
as
insertintoManeger
alues(@MID,@MName,@MSex);
4.Borrow_Insert的定义:
CREATEPROCEDUREBorrow_Insert
@BookIDchar(9),
@ReaIDchar(9),
@OutdateDatetime,
@YHdateDatetime,
@IndateDatetime,
@Finechar(5),
@CLStatechar(8),
@MIDchar(10)
as
insertintoBorrow
values(@BookID,@ReaID,@Outdate,@YHdate,@Indate,@Fine,@CLState,@MID);
5.Query_Reader_R的定义:
createprocedureQuery_Reader_R
@ReaIDchar(9)
as
select*
fromReaderview
where编号=ltrim(@ReaID);
6.Query_Reader_M的定义:
createprocedureQuery_Reader_M
as
select*
fromReaderview
7.Query_Book_Writer的定义:
createprocedureQuery_Book_Writer
@BookWriterchar(50)
as
select*
fromBookview
where作者like'%'+ltrim(@BookWriter)+'%';
8.Query_Book_Name_Publish的定义:
createprocedureQuery_Book_Name_Publish
@BookNamechar(50),
@BookPublishchar(20)
as
select*
fromBookview
where书名=ltrim(@BookName)and第一版社=ltrim(@BookPublish);
9.Delete_Reader的定义:
createprocedureDelete_Reader
@ReaNochar(9)
as
delete
fromReader
whereReaNo=ltrim(@ReaNo);
10.Delete_Book的定义:
createprocedureDelete_Book
@BookIDchar(9)
as
delete
fromBook
whereBookID=ltrim(@BookID);
七.实验小结
此次实验使我熟习了怎样独立的成立一个系统,经过自己所学的知识,综合运用,并认识自己的不足之处。