资源描述
修正&标记表
文档变更历史
日期
作者
版本
变更描述
2011-05-28
舒睿
V01
数据库说明书创建
2011-06-13
舒睿
V01.1
数据库各表功能说明创建
2011-06-20
舒睿
V02
数据库各项细节功能完成
审核结果
审核人
通过版本
审核认职位
日期
文档属性
项目
描述
文档名称
功能说明书
作者
舒睿
创建日期
5/28/2011
最后更新日期
1.1 目的
本文为图书馆管理课程设计SQL Server功能规范说明书。本说明书将:
l 描述数据库设计的目的
l 说明数据库设计中的主要组成部分
l 说明数据库设计中各功能的实现
1.2 内容
本文档主要内容包括对数据库设计结构的总体描述,对数据库中各种对象的描述(包括对象的名称、对象的属性、对象和其他对象直接的关系)。本文档中包含对以下数据库内容的描述:
l 数据表
l 视图
l 存储过程
l 触发器
l 约束
在数据库主要对象之外,本文还将描述数据库安全性设置、数据库属性设置和数据库备份策略,为数据库管理员维护数据库安全稳定地运行提供参考。
1.3 与其他项目的关联
本项目的数据库设计与本项目(Web部分和Windows部分)功能密切相关。本案例项目的数据库将按照项目程序部分的功能需求而设计,数据库设计将配合设计案例的程序部分,以实现一个功能完备的真实环境内的应用。
表
1.4 表设计概述
根据设计的系统功能,数据库将以图书信息为中心存储相关数据,配合 SQL Server 数据库系统中提供的数据管理,实现图书的借阅、归还、续借及系统设置等业务功能。
数据库设计将以存储读者信息的读者表为基础,连接多张相关表以实现对以下关系的支持:
l 读者借书记录
l 读者还书记录
l 读者续借记录
l 读者罚款记录
l 读者对图书的评价
l 读者对图书和图书馆的建议及留言
数据库系统主要的实体关系如图 01所示。
图 01
1.5 读者用户信息表(ReaderInfo)
概述
读者用户信息表用于记录读者基本信息,并作为基础表与其他表连接。
表定义
读者用户信息表定义如表 01所示。
表 01
字段
类型
可否为空
备注
Username
nvarchar(10)
否
ID
int
否
Passwd
char(8)
否
Name
nvarchar(10)
可
Sex
char(2)
否
Age
int
可
StuNum
Numeric
可
PlaceStrand
nvarchar(50)
可
PlaceClass
nvarchar
可
ValidCard
nvarchar(50)
否
BookCard
nvarchar(10)
可
CreateTime
datetime
可
ExpiredTime
datetime
可
主键
读者用户信息表的主键是读者用户信息表编号字段,类型为整型,设置自动增量。
。
约束
无
索引
主键用户信息ID具有自动创建的聚集索引。
1.6 管理员用户信息表(UserInfo)
概述
管理员用户信息表用于记录系统管理员的各项资料。表中都记录了管理员的账号和密码,是各用户的详细记录。。
表定义
管理员用户信息表定义如表 02所示。
表 02
字段
类型
可否为空
备注
ID
Numeric
不否
Username
nvarchar(10)
不否
Passwd
char(8)
不否
Type
nvarchar(14)
不否
主键
管理员用户信息表的主键是管理员用户ID号,类型为整型,设置自动增量。
约束
无其他约束。
索引
主键字段管理员编号具有自动创建的聚集索引。
读者类别表(ReaderType)
读者类别表用于记录读者信息,包括读者ID、名字等。读者类别表通过读者编号与借书表关联。
表定义
读者类别表定义如表 03所示。
表 03
字段
类型
可否为空
备注
ID
int
否
Name
nvarchar(10)
否
ReaderID
int
否
Canborrow
int
可
缺勤扣除
整型
可
其他薪资
整型
可
主键
读者类别表的主键是读者表ID字段,类型为整型,设置自动增量。
约束
无其他约束。
索引
主键字段薪资编号具有自动创建的聚集索引。
图书信息表(BookInfo)
图书信息表用于记录图书信息(图书名称、图书状态等),通过字段图书类别号与图书类别表关联。
表定义
图书信息表定义如表 04所示。
表 04
名称
类型
可否为空
备注
ID
nvarchar(20)
否
Name
nvarchar(50)
否
Typeid
int
可
State
binary
可
Creattime
datetime
否
Price
money
可
Press
nvarchar(50)
否
IsCancellation
binary
可
IDCancellation
int
可
Note
nvarchar(50)
可
Author
nvarchar(10)
可
Page
int
可
主键
图书信息表的主键是图书编号字段,类型为整型。
约束
图书信息表中的图书编号不可相同;图书信息表中的状态类型字段只能取“被借”、“续借”、“以还”。
索引
主键字段考勤编号具有自动创建的聚集索引。
图书类别表(BookType)
图书类别表用于记录图书的类别。图书类别表中的基本信息包括:图书的类别、申请状态、借书开始的时间和借书归还的时间等。通过类别ID字段与员工表关联。
表定义
图书类别表定义如表 05所示。
表 05
字段
类型
可否为空
备注
Typeid
int
否
Typename
nvarchar(50)
否
主键
图书类别表的主键是Typeid字段,类型为整型,设置自动增量。
约束
请假开始时间应小于请假结束时间;申请状态字段的取值可以是:“已提交”、“已取消”、“已批准”、“已否决”。
索引
主键字段请假申请编号具有自动创建的聚集索引。
1.7 图书库存表(BookStock)
概述
图书库存表用于图书总库存的记录。库存表中的基本信息包括:库存ID,图书ID。通过字段,图书ID与图书信息表关联。
表定义
图书库存表定义如表 06所示。
表 06
字段
类型
可否为空
备注
ID
int
否
BookID
nvarchar(20)
否
主键
图书库存表的主键是图书库存ID字段,类型为整型,不设置自动增量。
索引
主键字段加班申请编号具有自动创建的聚集索引。
1.8 借书表(BookBorrowReturn)
借书表用于保存借书状态信息。借书表中的基本信息包括:借书表ID标识号、图书编号、证件号、借书时间、还书时间等。通过图书ID编号与图书信息表关联。
表定义
借书表定义如
表 07所示。
表 07
字段
类型
可否为空
备注
ID
Numeric
否
BookID
nvarchar(20)
否
CardID
Numeric
可
BorrowTime
datetime
否
ReturnTime
datetime
否
IsReturn
nvarchar(10)
否
主键
借书表的主键是图书借书表ID字段,类型为整型,不设置自动增量。
约束
还书时间要大于借书时间
索引
主键字段业绩评定编号具有自动创建的聚集索引。
1.9 罚款表(BookFines)
概述
罚款表对超期或者丢失的书籍进行评定罚款以及记录。表BookFines中的基本信息包括:书籍ID、读者ID、罚款ID等。通过对书籍罚款的记录以及分类,可以清晰的看出书籍的情况。
表定义
罚款表定义如表 08所示。
表 08
字段
类型
可否为空
备注
ID
Numeric
否
ReaderID
int
可
BookID
nvarchar(20)
否
FinesTime
datetime
可
FinesAmount
money
FinesType
nVarchar(10)
FinesReason
nVarchar
主键
系统配置表的主键是罚款ID字段,类型为整型,设置自动增量。
约束
罚款类别只有三类,0,1,2各为丢失、超期、挂失
索引
主键字段具有自动创建的聚集索引。
1.10 评价表(Evaluate)
概述
评价表用于保存读者对书籍看法的记录。评价表中的基本信息包括:评价ID、图书ID、书籍ID、评价等。
表定义
评价表定义如表 09所示。
表 09
字段
类型
可否为空
备注
ID
int
否
BookID
int
否
ReaderID
nvarchar(20)
否
Evaluate
nvarchar(50)
主键
评价表的主键是评价编号字段,类型为整型,设置自动增量。
约束
无其他约束。
索引
主键字段评价编号具有自动创建的聚集索引。
1.11 借阅室表(LendRoom)
概述
借阅室表用于将库存书籍分类出若干借阅室的记录。借阅室表的基本信息包括:借阅室编号,借阅室名称、和借阅书架的编号。
表定义
借阅室表定义如表 010所示。
表 010
字段
类型
可否为空
备注
ID
int
否
Name
nvarchar(10)
否
LendRoomBookID
nvarchar(20)
主键
借阅室表的主键是借阅室编号字段,类型为整型,设置自动增量。
约束
无其他约束。
索引
主键字段借阅室表编号具有自动创建的聚集索引。
1.12 借阅室书籍表(LendRoomBook)
概述
借阅室书籍表用于记录借阅室书籍表类型。借阅室书籍表的基本信息包括:借阅室书籍ID和书籍ID、书籍状态、书籍总和。
表定义
借阅室书籍表定义如表 011所示。
表 011
字段
类型
可否为空
备注
ID
nvarchar(20)
否
BookID
int
否
BookCount
int
BookState
binary
主键
借阅室表的主键是借阅室书籍表编号字段,类型为整型,设置自动增量。。
约束
无
索引
主键字段借阅室书籍表编号具有自动创建的聚集索引。
1.13 图书证表(BookCard)
概述
图书证表用于记录图书证ID信息。图书证表的基本信息包括:图书证表编号、读者编号等。
表定义
图书证表定义如表 012所示。
表 012
字段
类型
可否为空
备注
ID
Numeric
否
ReaderID
int
否
Borrowed
int
否
主键
图书证表的主键是图书证ID编号字段,类型是整型,设置自动增量。
约束
无。
索引
主键字段图书证表编号具有自动创建的聚集索引。
1.14 留言表(Message)
概述
留言表用于记录读者对图书和图书馆相关的留言。留言表包含的主要内容有:留言表编号、读者编号。
表定义
留言表定义如表 013所示。
表 013
名称
类型
可否为空
说明
备注
ID
int
否
业绩评定子项目编号
ReaderID
nvarchar(20)
否
业绩评定编号
details
nvarchar
否
项目内容
主键
留言表编号。
约束
无其他约束。
索引
主键字段留言表编号具有自动创建的聚集索引。
1.15 系统设置表(SystemSet)
概述
系统设置表用于系统各详细设置信息。系统设置表包含的主要内容有:用户权限设置、赔偿价格参照、公告、证件相关各信息和备份恢复等。
表定义
系统设置表定义如表 013所示。
表 014
名称
类型
可否为空
说明
备注
ID
int
否
UserPermissionSet
nvarchar(10)
否
Overdatepoint
money
否
lostPrice
money
可
RenewTime
datetime
可
BackupSet
datetime
Announce
nvarchar(50)
CardReCost
money
Cardfillprice
money
CardReTime
datetime
ModifyPerson
nvarchar(10)
Modifytime
datetime
主键
系统设置表编号。
约束
无其他约束。
索引
主键字段系统设置表编号具有自动创建的聚集索引。
1.16 各表SQL代码示例
管理员用户信息表(UserInfo)
create table UserInfo
(
ID Numeric identity(1001,1) not null,
Username nvarchar(10) not null,
Passwd char(8) not null,
Type nvarchar(14) check(Type ='图书管理员' or Type ='系统管理员') not null,
constraint pk_UserInfo_id primary key(ID)
)
读者用户信息表(ReaderInfo)(普通用户)
create table ReaderInfo
(
Username nvarchar(10) not null,
ID int not null,
Passwd char(8) not null,
Name nvarchar(10) not null,
Sex char(2) check(Sex ='男' or Sex ='女')not null,
Age int ,
StuNum Numeric ,
PlaceStrand nvarchar(50),
PlaceClass nvarchar(50),
ValidCard nvarchar(50),
BookCard nvarchar(10),
CreateTime datetime not null,
ExpiredTime datetime not null,
constraint pk_ReaderInfo_id primary key (ID)
)
读者类别表(ReaderType)
Create table ReaderType
(
ID int ,
Name nvarchar(10),
ReaderID int not null,
Canborrow int,
constraint pk_ReaderType_id primary key (ID)
)
alter table ReaderType
add constraint fk_ReaderType_ReaderInfo foreign key (ReaderID)
references ReaderInfo (ID);
*图书信息表(BookInfo)
create table BookInfo
(
ID nvarchar(20) not null,
Name nvarchar(50) ,
Typeid int,
State binary ,
Creattime datetime ,
Price money ,
Press nvarchar(50) ,
IsCancellation binary ,
IDCancellation int ,
Note nvarchar(50) ,
Author nvarchar(10) ,
Page int ,
constraint pk_BookInfo_id primary key (ID)
)
alter table BookInfo
add constraint fk_BookInfo_BookType foreign key (Typeid)
references BookType (Typeid);
图书类别表(BookType)
create table BookType
(
Typeid int ,
Typename nvarchar(50),
constraint pk_BookType_id primary key(Typeid)
)
图书库存表(BookStock)
Create table BookStock
(
ID int ,
BookID nvarchar(20) not null,
constraint pk_BookStock_id primary key (ID)
)
alter table BookStock
add constraint fk_BookStock_BookInfo foreign key (BookID)
references BookInfo (ID);
借书表(BookBorrow)
create table BookBorrow
(
ID Numeric,
BookID nvarchar(20),
CardID Numeric,
BorrowTime datetime,
ReturnTime datetime,
IsReturn nvarchar(10),
constraint pk_BookBorrow_id primary key (ID)
)
alter table BookBorrow
add constraint fk_BookBorrow_BookInfo foreign key (BookID)
references BookInfo (ID);
罚款表(BookFines)
create table BookFines
(
ID Numeric not null,
ReaderID int not null,
BookID nvarchar(20) not null,
FinesTime datetime ,
FinesAmount money ,
FinesType nVarchar(10) ,
FinesReason nVarchar(50) ,
constraint pk_BookFines_id primary key (ID)
)
alter table BookFines
add constraint fk_BookFines_ReaderInfo foreign key (ReaderID)
references ReaderInfo (ID);
alter table BookFines
add constraint fk_BookFines_BookInfo foreign key (BookID)
references BookInfo (ID);
评价表(Evaluate)
create table Evaluate
(
ID int not null,
BookID int not null,
ReaderID nvarchar(20) not null,
Evaluate nvarchar(50),
constraint pk_Evaluate_id primary key (ID)
)
alter table Evaluate
add constraint fk_Evaluate_ReaderInfo foreign key (ReaderID)
references ReaderInfo (ID);
alter table Evaluate
add constraint fk_Evaluate_BookInfo foreign key (BookID)
references ReaderInfo (ID);
借阅室表LendRoom
(
ID int ,
Name nvarchar(10),
LendRoomBookID nvarchar(20) ,
constraint pk_LendRoom_id primary key (ID)
)
alter table LendRoom
add constraint fk_LendRoom_LendRoomBook foreign key (BookID)
references BookInfo (BookID);
借阅室书籍表LendRoomBook
Create table LendRoomBook
(
ID nvarchar(20) not null,
BookID int not null,
BookCount int ,
BookState binary ,
constraint pk_LendRoomBook_id primary key (ID)
)
alter table LendRoomBook
add constraint fk_LendRoomBook_BookInfo foreign key (BookID)
references BookInfo (ID);
图书证表BookCard
Create table BookCard
(
ID Numeric ,
ReaderID int not null,
Borrowed int ,
constraint pk_BookCard_id primary key (ID)
)
alter table BookCard
add constraint fk_BookCard_ReaderInfo foreign key (ReaderID)
references ReaderInfo (ID);
留言表Message
create table Msssage
(
ID int ,
ReaderID nvarchar(20) not null,
details nvarchar(50) not null,
constraint pk_Msssage_id primary key (ID)
)
alter table Msssage
add constraint fk_Msssage_ReaderInfo foreign key (ReaderID)
references ReaderInfo (ID);
系统设置表SystemSet
Create table SystemSet
(
ID int
UserPermissionSet nvarchar(10)
Overdatepoint money
lostPrice money
RenewTime datetime
BackupSet datetime
Announce nvarchar(50)
CardReCost money
Cardfillprice money
CardReTime datetime
ModifyPerson nvarchar(10)
Modifytime datetime
constraint pk_SystemSet_id primary key (ID)
)
视图
1.17 系统设置表(SystemSet)
概述
l 此视图通过左外连接员工和部门表得到了员工的详细信息,其中包括员工的基本信息、员工的部门信息和员工经理信息。
l Web用户具有查看的权限。
基表
l BookInfo
l LendRoomBook
视图包含字段
l dbo.BookInfo.ID
l dbo.BookInfo.Name
l dbo.LendRoomBook.Times
l dbo.BookInfo.Typeid
l dbo.BookInfo.Price
l dbo.BookInfo.Press
l dbo.BookInfo.Note
l dbo.BookInfo.Author
l dbo.BookInfo.State
l dbo.BookInfo.Page
l dbo.BookInfo.Creattime
代码示例:
SELECT dbo.BookInfo.ID, dbo.BookInfo.Name, dbo.LendRoomBook.Times, dbo.BookInfo.Typeid, dbo.BookInfo.Price, dbo.BookInfo.Press, dbo.BookInfo.Note,
dbo.BookInfo.Author, dbo.BookInfo.State, dbo.BookInfo.Page, dbo.BookInfo.Creattime
FROM dbo.BookInfo INNER JOIN
dbo.LendRoomBook ON dbo.BookInfo.ID = dbo.LendRoomBook.BookID
存储过程
1.18 数据库备份
概述
l 系统备份到D盘
USE [LMS_xili]
GO
/****** Object: StoredProcedure [dbo].[backup00] Script Date: 06/17/2011 08:53:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[backup00]
as
BACKUP DATABASE LMS_xili
TO DISK = 'd:\dbBackTest.bak'
1.19 数据库还原
l 系统从D盘备份中还原数据库
USE [LMS_xili]
GO
/****** Object: StoredProcedure [dbo].[restore00] Script Date: 06/17/2011 08:53:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[restore00]
as
restore DATABASE LMS_xili
from DISK = 'd:\dbBackTest.bak'
1.20 清空表
l 清空bookborrowreturn这张表
USE [LMS_xili]
GO
/****** Object: StoredProcedure [dbo].[sp_clearBookBorrowReturn] Script Date: 06/17/2011 08:53:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[sp_clearBookBorrowReturn]
as
truncate table BookBorrowReturn
1.21 清空表
l 清空BookInfo这张表
USE [LMS_xili]
GO
/****** Object: StoredProcedure [dbo].[sp_clearBookInfo] Script Date: 06/17/2011 08:53:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[sp_clearBookInfo]
as
truncate table BookInfo
1.22 清空表
l 清空LendRoomBook这张表
USE [LMS_xili]
GO
/****** Object: StoredProcedure [dbo].[sp_clearLend] Script Date: 06/17/2011 08:53:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[sp_clearLend]
as
truncate table LendRoomBook
1.23 清空表
l 清空ReaderInfo这张表
USE [LMS_xili]
GO
/****** Object: StoredProcedure [dbo].[sp_clearReaderInfo] Script Date: 06/17/2011 08:53:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[sp_clearReaderInfo]
as
truncate table ReaderInfo
触发器
1.24 向公告表中插入数据则自动修改其字段状态
概述
当向announce表中插入数据时,修改其另一字段状态为1
触发器影响范围
公告表
USE [LMS_xili]
GO
/****** Object: Trigger [dbo].[an_update] Script Date: 06/17/2011 08:54:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[an_update] on [dbo].[Announce]
for insert
as
declare @id int
begin
select @id = id from inserted;
update announce set pustate = 0 where id = @id - 1 ;
end
1.25 借书表中插入数据则更新借书书架上书的状态
概述
当向借书表中插入数据时,则表示书本被借,这时修改被借书书架上书籍的状态从0到1
触发器影响范围
BookBorrowReturn/Lendroombook
USE [LMS_xili]
GO
/****** Object: Trigger [dbo].[aaa] Script Date: 06/17/2011 08:55:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[aaa] on [dbo].[BookBorrowReturn]
for insert
AS
declare @bookid numeric(18, 0)
begin
select @bookid = bookid from inserted;
update Lendroombook set LendRoomBook.BookState = 1 where LendRoomBook.BookID =
(select BookID from inserted);
END
1.26 还书表中插入数据则更新借书书架上书的状态
概述
当向还书表中插入数据时,则表示书本已归还,这时修改被还书书架上书籍的状态从1到0
触发器影响范围
BookBorrowReturn/lendroombook
USE [LMS_xili]
GO
/****** Object: Trigger [dbo].[lrstate] Script Date: 06/17/2011 08:55:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[lrstate] on [dbo].[BookBorrowReturn]
for update
as
declare @bookid numeric(18, 0)
begin
select @bookid = bookid from inserted;
update lendroombook set lendroombook.bookstate = 0
where lendroombook.bookid=(select bookid from BookBorrowReturn where BookBorrowReturn.state = 0 and BookBorrowReturn.bookid=@bookid) ;
End
1.27 还书表中插入数据则更新借书书架上书的状态
概述
当向还书表中插入数据时,则表示书本已归还,这时修改被还书书架上书籍的状态从1到0
触发器影响范围
BookBorrowReturn/lendroombook
USE [LMS_xili]
GO
/****** Object: Trigger [dbo].[l
展开阅读全文