Web图书馆管理系统数据库设计

时间:2022-10-06 12:13:35

Web图书馆管理系统数据库设计

摘要:数据库设计是基于Web的图书馆管理系统开发的基础。分析数据库的逻辑设计,详细描述存储过程的创建,对图书馆管理系统的开发有一定借鉴意义。

关键词:逻辑设计;存储过程;数据访问

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)03-0437-06

1 数据库设计

1.1数据库逻辑设计

1)用户表(Users)

2)图书表(Book)

3)图书借阅表(Borrow)

4)权限表(Power)

1.2 数据关系图

为保证数据的完整性和有效性,为Borrow数据表增加两个外键关系,并设置外键关系对复制、插入、更好的强制关系,而且级联更新和删除相关字段。

2 创建存储过程

2.1什么是存储过程

存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。在本系统中大量使用了存储过程,实现对信息的添加、修改、查询、删除等操作,提高了数据库执行速度,可以很好地优化系统。这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序:

1) 变量说明

2) ANSI兼容的SQL命令(如Select、Update….)

3) 一般流程控制命令(if…else…、while….)

4) 内部函数

其中每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。

2.2详细存储过程

1)Proc_BookAdd

功能:往Book表中插入新的图书信息。过程操作面向总图书管理员。

CREATE PROCEDURE [Proc_BookAdd]

(@BookName [varchar](50),

@BookISBN [varchar](50),

@BookAuthor [varchar](50),

…… \\依次插入各字段,此处已省略

@BookDescription [text])

AS INSERT INTO [MyLibrary].[dbo].[Book]

([BookName],

[BookISBN],

[BookAuthor],

…… \\依次插入各字段,此处已省略

[BookDescription])

VALUES

(@BookName,

@BookISBN,

@BookAuthor,

…… \\依次插入各字段,此处已省略

@BookDescription)

GO

2) Proc_BookDelete

功能:删除Book表中指定的图书信息。过程操作面向总图书管理员。

create PROCEDURE [Proc_BookDelete]

(@BookID [int])

AS DELETE [MyLibrary].[dbo].[Book]

WHERE

( [BookID] = @BookID)

GO

3)Proc_BookList

功能:查询Book表中的所有图书信息,并以书号排序。过程面向总图书管理员。

create PROCEDURE [Proc_BookList]

AS SELECT *

FROM [dbo].[Book]

ORDER BY BookID

GO

4)Proc_BookModify

功能:对Book表中的某本图书的信息进行修改。过程操作面向总图书管理员。

AS UPDATE [MyLibrary].[dbo].[Book]

SET [BookName] =@BookName,

[BookISBN] =@BookISBN,

[BookAuthor] =@BookAuthor,

…… \\依次输入各条信息的修改,此处已省略

[BookDescription] =@BookDescription

WHERE

( [BookID] = @BookID)

3 数据访问层

本层只包含一个类Database,基本都是使用存储过程来操作数据。

3.1配置数据库连接

在Web.config文件中指定了数据库连接字符串配置信息,具体实现为,在Web.config文件中添加如下代码:

providerName="System.Data.SqlClient" />

3.2 DataBase类成员一览

DataBase类完成所有的数据操作,位于MyLibrary.DataAcceessLayer空间下。其类图如图2所示。

图2

DataBase类的成员说明

[ 属性/方法\& 功能说明\&Connection\&私有变量,数据库连接SqlConnection对象\&ConnectionString\&私有变量,数据库连接串\&Open\&打开数据库连接\&Close\&关闭数据库连接\&Dispose\&释放数据库连接资源\&GetRecord\&公有方法,根据Sql语句,返回是否查询到记录\&GetRecordCount\&公有方法,返回Sql语句获得的数据值\&AdvancedSearch\&公有方法,根据XWhere更新数据表XTableName中的某些纪录\&CreateCommand\&私有方法,获得一个用来调用存储过程的SqlCommand\&MakeParam\&公有方法,实例化一个用于调用存储过程的参数\&MakeInParam\&公有方法,实例化一个用于调用存储过程的输入参数\&RunProc\&公有方法,调用存储过程(不带参数)\&RunProc\&公有方法,调用存储过程(带参数)\&RunProcGetReader\&公有方法,调用存储过程(不带参数)\&RunProcGetReader\&公有方法,调用存储过程(带参数)\&RunProcGetCount\&公有方法,调用存储过程(带参数)\&GetDataSet\&公有方法,调用存储过程(不带参数)\&GetDataSet\&公有方法,调用存储过程(不带参数)\&]

3.3 实现DataBase类

下面介绍主要方法的实现:

1)GetRecord(string XSqlString)方法

功能:根据传递过来的SQL语句,查询要查询的记录是否存在,如果查询到,返回真,否则返回假。实现代码参考如下:

//公有方法,根据Sql语句,返回是否查询到记录

public bool GetRecord(string XSqlString)

{

Open();//连接数据库

SqlDataAdapter adapter = new SqlDataAdapter(XSqlString, Connection);

//实例化一个SQLDataAdapter对象

DataSet dataset = new DataSet();//创建一个数据集实例

adapter.Fill(dataset);//向数据集中填充数据

Close();//关闭数据库

if (dataset.Tables[0].Rows.Count > 0)//判断是否查询到记录,如果查询到返回真,否则返回假

{

return true;

}

else

{

return false;

}

2)AdvancedSearch(string XTableName, Hashtable XHT)方法

AdvancedSearch方法使用一个哈希表结构,从指定的数据库中查询记录。方法流程如图所示:

图3

public DataSet AdvancedSearch(string XTableName, Hashtable XHT)

{

int Count = 0;

string Fields = "";

foreach(DictionaryEntry Item in XHT)

{

if (Count != 0)

{

Fields += " and ";

}

Fields += Item.Key.ToString(); //模糊查询

Fields += " like '%";

Fields += Item.Value.ToString();

Fields += "%'";

Count++;

}

Fields += " ";

string SqlString = "select * from " + XTableName + " where " + Fields;

Open();

SqlDataAdapter Adapter = new SqlDataAdapter(SqlString, Connection);

DataSet Ds = new DataSet();

Adapter.Fill(Ds);

Close();

return Ds;

}

3)RunProc方法

该方法执行传递过来的存储过程,执行存储过程时有需要参数的情况,也有不需要参数的情况,所以对该方法进行重载,执行存储过程,返回执行结果。

public int RunProc(string ProcName)

{

int Count = -1;

SqlCommand Cmd = CreateCommand(ProcName, null);

Count = Cmd.ExecuteNonQuery();

Close();

return Count;

}

4)GetDataSet方法

该方法根基传递过来的存储过程,从数据库中查询记录,返回查询结果的数据库,传递过来的存储过程也有两种情况:带参数和不带参数,对应方法有两种形式。

public DataSet GetDataSet(string ProcName)

{

Open();

SqlDataAdapter adapter = new SqlDataAdapter(ProcName, Connection);

DataSet dataset = new DataSet();

adapter.Fill(dataset);

Close();

return dataset;

}

参考文献:

[1] 刘捷,张琳,温才 2.0+SQL Server动态网站开发从基础到实践[M].北京:电子工业出版社,2007.

[2] 刘亚姝,许小荣,张玉梅.ASP动态网站开发技术与实践[M].北京:电子工业出版社,2007.

上一篇:采用微电流安全检测与自适应精确检测技术的导... 下一篇:会计专业实习指导教师工作研究