《数据库原理及应用》课程设计报告Word文档格式.docx
《《数据库原理及应用》课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《《数据库原理及应用》课程设计报告Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
![《数据库原理及应用》课程设计报告Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/25/59c443cf-11fc-4d10-8106-1e5e29f20c6f/59c443cf-11fc-4d10-8106-1e5e29f20c6f1.gif)
存放位置
State
Notnull
当前状态
表1-2 Reader读者信息表格
RID
读者借书证号
Name
读者姓名
Tel
读者电话
Email
读者邮箱
BNumber
Int
可借书数
表1-3Manager管理员信息表格
MID
工号
姓名
RoomID
馆室号
表1-4 CIP书目信息表
Varchar
Notnull(主键)
bookname
Notnull
书籍名称
Author
Null
书籍作者
Pyear
Char
出版年月
Publisher
出版者
Number
册数
表1-5 Borrow借阅记录信息表
Notnull(外主键)
读者借阅证编号
书籍编号
BDate
Datetime
读者借书时间
SRDate
Datetime
应还日期
Varcher
Notnull(外键)
索书号
表1-6 History借阅历史信息表
RDate
datetime
读者还书时间
BDate
Notnull
读者借书日期
表1-7 fine罚款记录信息表
读者借书证编号
ClState
null
是否缴纳罚金
Fine
罚款金额
NotNull
借阅时间
MID
工号
RDate
还书日期
表1-8 room馆室信息表
馆室编号
RoomName
馆室名
表1-9 Appiontmnet预约信息表
读者编号
借阅日期
Notnull(外键)
Applimit
预约时间限制
Null
归还日期
二、概念结构设计
可以用E/R模型表述该模型的设计,E/R图如图所示。
三、逻辑结构设计
通过E/R模型到关系模型的转化,可以得到如下关系模式:
(一)各E-R图各实体的属性如下所示
1、图书:
Book(BookID,ISBN,SPlace,State)
2、读者:
Reader(RID,Name,Tel,Email,BNumeber)
3、管理员:
Manager(MID,Name,RoomID)
4、书目:
CIP(ISBN,BookName,Author,Publisher,Pyear,Number)
5、馆室:
Room(RoomID,RoomName)
(二)各E-R图中联系的属性如下所示:
6、借阅信息:
Borrow(BookID,RID,BDate,SRDate)
7、借阅历史:
History(BookID,RID,BDate,RDate)
8、罚款信息:
Fine(RID,BookID,BDate,RDate,Fine,CLState,MID)
9、预约信息:
Appiontmnet(RID,ISBN,RDate,AppLimit,MID)
3.1.1将E-R图转换为关系模型
实体型转换为关系模式。
实体的属性就是关系的属性,实体的码就是关系的码。
对于实体间的联系则有以下不同的情况:
一个m:
n联系转换为一个关系模式。
与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
一个1:
n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
一个1:
1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合具有相同码的关系模式可合并。
由于图书与CIP、资料室与图书的联系方式是1:
n(一对多),可以将其之间的联系与n端实体CIP、图书合并,管理员与图书之间的维护联系也是1:
n(一对多),同样也将其之间的联系与n端实体合并,而读者与图书之间的借阅和归还联系方式则是n:
m(多对多),这样要把它们之间的联系转化为独立的关系模式,读者与管理员之间的罚款联系是m:
n(多对多),将其联系也转化成独立的关系模式,具体的基本E-R图向关系模型的转化如下:
图书:
Book(BookID,ISBN,SPlace,State)
读者:
Reader(RID,Name,Tel,Email,BNumeber)
管理员:
Manager(MID,Name,RoomID)
书目:
CIP(ISBN,BookName,Author,Publisher,Pyear,Number)
馆室:
Room(RoomID,RoomName,)
借阅信息:
Borrow(BookID,RID,BDate,SRDate)
借阅历史:
History(BookID,RID,BDate,RDate)
罚款信息:
Fine(RID,BookID,BDate,SRDate,RDate,Fine,CLState,MID)
预约信息:
Appiontmnet(RID,ISBN,RDate,AppLimit,MID)
(注:
标有直线下划线的为主属性,标有波浪线下划线的是外键属性,主属性与外键属性一起构成主码)
3.2.1模型优化
关系模式Book,Reader,Room,Maneger,CIP,Room不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF,但是借阅关系模式、借阅历史关系模式、罚款关系模式及预约信息模式(Borrow,History,Fine,Appontment)中存在着一些数据冗余,现将四个关系模型进行合并,消除冗余,优化为:
借阅信息:
Borrow(BookID,RID,ISBN,BDate,RDate,SRDate,Fine,AppLimitCLStaete,MID)
四、系统实现(SQL编程)
4.1.1建立视图
1、建立Book表
CREATETABLEBook
(
BookIDvarchar(20)PRIMARYKEY,
ISBNvarchar(50)NOTNULL,
SPlacevarchar(50)NOTNULL,
Statechar
(2)
);
2、建立Reader表
CREATETABLEReader
RIDvarchar(10)PRIMARYKEY,
Namevarchar(18)NOTNULL,
Telvarchar(18)NOTNULL,
Emailvarchar(18)NOTNULL,
BNumberintcheck(BNumber<
=10andBNumber>
=0)default10,--可借书的数量
3、建立CIP表
CREATETABLECIP
ISBNvarchar(10)PRIMARYKEY,
BookNamevarchar(20)NOTNULL
Authorvarchar(20)
Publishervarchar(50),
Pyearchar(8)
Numberintcheck(Number>
=0)
4、建立Manager表
CREATETABLEManager
MIDvarchar(8)PRIMARYKEY,
RoomIDvarchar(18)
CONSTRAINTFK_Manager_RoomID
FOREIGNKEY(RoomID)REFERENCESRoomID(RoomID),
5、建立Room表
CREATETABLERoom
RoomIDvarchar(8)PRIMARYKEY,
RoomNamevarchar(18)NOTNULL,
6、建立Borrow表
CREATETABLEBorrow
BookIDvarchar(20)NOTNULL,
RIDvarchar(10)NOTNULL,
ISBNvarchar(50)NOTNULL,
BDatedatetimeNOTNULL,
SRDatedatetimeNOTNULL,
primarykey(BookID,RID),
CONSTRAINTFK_Borrow_BookID
FOREIGNKEY(BookID)REFERENCESBook(BookID),
CONSTRAINTFK_Borrow_ISBN
FOREIGNKEY(ISBN)REFERENCESCIP(ISBN),
CONSTRAINTFK_Borrow_RID
FOREIGNKEY(RID)REFERENCESReader(RID)
7、建立History表
CREATETABLEHistory
BookIDvarchar(20)NOTNULL,
RDatedatetimeNOTNULL,
CONSTRAINTFK_History_BookID
CONSTRAINTFK_History_RID
8、建立Fine表
CREATETABLEFine
RIDvarchar(20)NOTNULL,
MIDvarchar(8)NOTNULL,
BookIDvarchar(20)NOTNULL,
BDatedatetimeNOTNULL,
Finevarchar(20)
CLStatechar(8),
CONSTRAINTFK_Fine_RID
FOREIGNKEY(RID)REFERENCESReader(RID),
CONSTRAINTFK_Fine_MID
FOREIGNKEY(MID)REFERENCESManager(ID),
CONSTRAINTFK_Fine_BookID
FOREIGNKEY(BookID)REFERENCESBook(BookID)
9、建立Appiontmnet表
CREATETABLEAppiontmnet
RIDvarchar(8)NOTNULL,
MIDvarchar(6)NOTNULL,
ISBNvarchar(20)NOTNULL,
RDatedatetime
BDatedatetime
AppLimitvarchar(20)default‘10’
primarykey(ISBN,RID),
CONSTRAINTFK_Appiontment_RID
FOREIGNKEY(RID)REFERENCESReader(ID),
CONSTRAINTFK_Appiontment_MID
CONSTRAINTFK_RETURN_ISBN
FOREIGNKEY(ISBN)REFERENCESCIP(ISBN)
4.1.2建立视图
(1)用于查询图书基本信息的视图定义如下:
createviewBookview(索书号,书号,书名,出版社,册数,存放位置,当前状态)
as
selectCIP.ISBN,BookID,BookName,Publisher,Number,Splace,State
fromCIP,Book
whereCIP.ISBN=Book.ISBN
(2)用于读者基本信息查询的视图定义如下:
createviewReaderview(读者姓名,编号,电话,邮箱)
selectName,RID,Tel,Email
fromReader
(3)用于显示当前借阅基本信息的视图定义如下:
createviewBorrowview(读者编号,书名,作者,借阅日期,到期日期)
selectRID,BookName,Author,BDate,SRDate
fromBorrow,CIP
whereBorrow.ISBN=CIP.ISBN
(4)用于借阅历史信息查询的视图定义如下:
createviewHistoryview(读者编号,书名,借阅日期,应还日期)
selectBorrow.RID,BookName,BDate,SRDate
fromBorrow,CIP,Reader
whereBorrow.RID=Reader.RID
(5)用于查询罚款信息的视图定义如下:
createviewFineview(读者编号,书名,借阅日期,归还日期,罚款,处理状态)
selectBorrow.RID,BookName,Borrow.BDate,RDate,Fine,CLState
fromBorrow,CIP,Fine
whereBorrow.ISBN=CIP.ISBNandFineisnotnull
(6)用于预定信息的视图如下:
CreateviewAppiontmentview(读者编号,索书号,预约时间,预约期限天)
As
SelectAppiontment.RID,Appiontment.ISBN,BDate,Applimit
FromAppiontment,CIP
WhereAppiontment.ISBN=CIP.ISBNand
CIP.Numberisnull/*当某书目可借书数量为零时*/
4.1.3建立触发器
本系统创建了三个触发器,它们分别实现删除图书、统计图书可借数量、借阅图书信息的功能。
其代码如下。
1创建删除图书的触发器
createtriggerdeletebook
onBookinsteadofdelete
deletefromBorrowwhereRIDin(selectRIDfromdeleted)
deletefromBookwhereidin(selectBookIDfromdeleted)
2创建统计图书可借数量的触发器
createtriggerReadercountable
onBorrowafterinsert
updateReadersetBNumber=BNumber-1whereRIDin(selectRIDfrominserted)
--借书后用户的可借数量减1—
3创建借阅图书信息功能的触发器
/*借书管理,当在中增加一条借阅记录时,使该图书的状态由“未借”变为“已借出*/
createtriggerBorrow_insert1
onBorrow
forinsert
as
declare@BookIDchar(9)
select@BookID=BookID
frominserted
updateBook
setState='
已'
/*已借出*/
whereBookID=@BookID
/*验证*/
insertintoBorrowvalues('
07'
'
04'
806'
2012-2-4'
2012-4-4'
)
4还书管理
/*还书管理(举实例论证,预约功能在上一触发器中实现)*/
BEGINTRANSACTION
INSERTINTOHistory(BookID,RID,BDate,RDate)
VALUES('
11'
02'
2012-4-6'
2012-4-8'
UPDATEBOOKSETState='
0'
WHEREBookID='
COMMIT;
5自动计算罚金公式
/*若超过时间限制,计算罚金公式*/
/*1.把没归还日期的归还日期改为系统时间*/
UPDATEHistorySETRDate=getdate()whereRDateisnulll
/*2.假设有个可借天数字段天*/
updateFinesetfine=(datediff(day,'
2012-3-1'
2012-6-3'
)-60)*0.2
/*没有可借天数的话把-可借天数以及外面的一对括号删除*/
4.1.4管理员操作
1)入库管理:
/*入库管理,新书入库*/
insertintoCIP(ISBN,BookName,Number,Author,Publisher,Pyear)
values(813,'
中外通史'
5,'
方严'
高教'
2007.5'
/*旧书入库*/
updateCIP
setNumber=Number+1
whereISBN='
805'
2)增加读者:
INSERTINTOReader(RID,Name,Tel,Email,BNumber)VALUES(#RID,#Name,#Tel,#BNumber);
3)删除读者:
DELETEFROMReaderWHERE(RID=#RID);
4)修改读者信息:
UPDATEReaderSETName=#Name,Tel=#TelWHERE(RID=#RID);
5)增加书籍:
INSERTINTOCIP(ISBN,BookName,Author,Publisher,Pyear,Number)VALUES(#ISBN,#BookName,#Author,#Publisher,#Pyear,#Number);
6)删除书籍:
DELETEFROMBookWHERE(BookID=#BookID);
7)修改书籍信息:
UPDATEBookSETBookName=#BookName,Author=#Author,Publisher=#Publisher,
Pyear=#Pyear,Number=#NumberWHERE(BookID=#BookID);
8)学生借阅图书:
INSERTINTOBorrow(RID,BookID,SRDate,BDate)
VALUES(#RID,#BookID,#SRDate,#BDate);
UPDATEBOOKSETState=’2’WHEREBookID=#BookID
9)学生归还图书:
INSERTINTOHistory(RID,BookID,RDate,BDate)
VALUES(#RID,#BookID,#RDate,#BDate);
UPDATEBOOKSETState=’0’WHEREBookID=#BookID
(说明:
要知道图书当前的状态,是图书馆存放,还是被借阅等,需要再Book模式中增加对应项用以表示图书当前的状态。
比如我们增加State,并且约定取值和状态的对应关系如下:
0:
在图书馆中并且没有被