数据库设计模块.docx

上传人:b****3 文档编号:4181696 上传时间:2023-05-06 格式:DOCX 页数:18 大小:76.97KB
下载 相关 举报
数据库设计模块.docx_第1页
第1页 / 共18页
数据库设计模块.docx_第2页
第2页 / 共18页
数据库设计模块.docx_第3页
第3页 / 共18页
数据库设计模块.docx_第4页
第4页 / 共18页
数据库设计模块.docx_第5页
第5页 / 共18页
数据库设计模块.docx_第6页
第6页 / 共18页
数据库设计模块.docx_第7页
第7页 / 共18页
数据库设计模块.docx_第8页
第8页 / 共18页
数据库设计模块.docx_第9页
第9页 / 共18页
数据库设计模块.docx_第10页
第10页 / 共18页
数据库设计模块.docx_第11页
第11页 / 共18页
数据库设计模块.docx_第12页
第12页 / 共18页
数据库设计模块.docx_第13页
第13页 / 共18页
数据库设计模块.docx_第14页
第14页 / 共18页
数据库设计模块.docx_第15页
第15页 / 共18页
数据库设计模块.docx_第16页
第16页 / 共18页
数据库设计模块.docx_第17页
第17页 / 共18页
数据库设计模块.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库设计模块.docx

《数据库设计模块.docx》由会员分享,可在线阅读,更多相关《数据库设计模块.docx(18页珍藏版)》请在冰点文库上搜索。

数据库设计模块.docx

数据库设计模块

超市管理系统概要设计说明书

―数据库设计模块

所属项目:

超市管理系统

编写者:

审核者:

1.引言

1.1编写目的

从该阶段开发正式进入软件的实际开发阶段,本阶段完成系统的大致设计并明确系统的数据结构与软件结构。

在软件设计阶段主要是把一个软件需求转化为软件表示的过程,这种表示只是描绘出软件的总的概貌。

本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件总体概貌,把它加工成在程序细节上非常接近于源程序的软件表示。

1.2背景

a.待开发软件系统的名称:

小型超市后台管理系统

b.任务的提出者:

梁永霖老师

c.开发者:

马文勇李耀初郑伟清

1.3参考资料

陶宏才.《数据库原理及设计》.第1版.北京.清华大学出版社.2004年

范立南《SQLServer2000实用教程》第2版.北京.清华大学出版社.2005年

李香敏《SQLServer2000编程员指南》第1版.北京.希望电子出版社

RebeccaM.Riordan《轻松搞定SQLServer2000程序设计》第2版.北京工业出版社.2003年

WattsS.Humphrey《软件工程规范》第1版.清华大学出版社.2004年

2.总体设计

2.1需求规定

A硬件支持

此软件没有进行远程访问的功能,也就是说软件和数据库服务器均运行与一台及其上面,因此,建议机器至少能顺畅运行SQL服务器。

本程序将在以下硬件系统进行测试:

a.处理器芯片为:

IntelCeleron2.66GHz,内存为:

512MB,硬盘为:

80GB。

b.处理器芯片为:

IntelP4,主频1.8GHz,内存为:

256MB,硬盘为:

40GB

c.处理器芯片为:

AMDSempron2500+,内存为:

512MB,硬盘为:

80GB

B软件支持

本软件将在以下环境下编写完成:

操作系统:

WindowsXPprofessional

编程软件:

MicrosoftVisualBasic6.0中文版

SQL服务器:

Microsoft®SQLServer™2000

数据库查询器:

SQL查询分析器

2.2运行环境

操作系统:

Windows98以上系统

测试系统:

WindowsXPSp2

3.接口设计

3.2外部接口

本系统设有人机操作界面,考虑到操作简单,易于管理方面,主要硬件接口设备为PC,鼠标,键盘。

而软件接口主要以Windows平台为基本平台。

系统业务逻辑的独步一时几乎完全封闭在数据存储层实现,中间组件层主要通过调用远程数据库存储过程或用户自定交函数的方式来实现对数据库的访问。

数据库设计时,在sql server2000大型数据库提供的技术下,充分利用约束,视图,存储过程,用户自定义函数及触发器等技术约束业务规则、维护数据完整性和唯一性,并实现市郊的数据存储与访问。

3.3内部接口

程序利用VB下的构造ADO的连接对象的ConnectionString的配置,各cls模块之间相互独立又彼此关联,主要通过函数调用实现各部分的连接。

4.系统数据结构设计

4.1逻辑结构设计要点

针对一般小型超市后台信息管理系统的需求,通过对商品进出过程的内容和数据流程分析,设计如下面所示的数据项和数据结构,各模块标示符说明如下:

 

系统数据库表结构

数据库表索引

表名

中文名

Userifo

系统用户表

Supplier

供货商信息表

GoodsType

商品类型表

Goods

商品信息表

Buy

进货表

Sale

销售表

Spoilage

损坏商品表

自定义数据类型(custem)

字段名

数据类型

长度

主/外键

字段值约束

对应中文名

gcxCaption

Varchar

100

Notnull

实体名称

gxcID

Int

4

P

Notnull

实体号

gxcMoney

Smallmoney

4

Notnull

进货\销售金额

gxcRemark

Varchar

1000

Null

备注说明

gxcTrueName

Varchar

10

Notnull

真实姓名

商品信息表(Goods)

字段名

数据类型

长度

主/外键

字段值约束

对应中文名

GoodsID

gxcID

4

P

Notnull

商品号码

GoodsName

gxcCaption

100

Notnull

商品名称

Amount

Decimal1

9

Notnull

库存数量

UnitName

gxcCaption

100

Notnull

单位名称

TypeID

gxcID

4

Notnull

商品类型号

SupplierID

gxcID

4

Notnull

商品供货商号

Introduce

gxcRemark

1000

Null

商品介绍

Remark

gxcRemark

1000

Null

备注

用户表(UserInfo)

字段名

字段类型

长度

主/外键

字段值约束

对应中文名

UserID

gcxID

4

P

Notnull

用户号

UserName

gxcCaption

100

Notnull

用户名称

Password

gxcCaption

100

Notnull

用户密码

TrueName

gxcTrueName

10

Null

真实姓名

LastLoginTime

Datetime

8

Notnull

最近登录时间

UserType

Bit

1

NotNull

用户类型

销售表(Sale)

字段名

字段类型

长度

主/外键

字段值约束

对应中文名

SaleID

gxcID

4

P

Notnull

销售号

GoodsID

gxcID

1

F

Notnull

商品号

Amount

Decimal

9

Notnull

销售数量

UnitPrice

gxcMoney

4

Notnull

单价

registrarID

gxcID

4

Notnull

录入人员号

regDate

Datetime

8

Null

登记时间

Remark

gxcRemark

1000

1

Null

备注

进货信息表(Buy)

字段名

字段类型

长度

主/外键

字段值约束

对应中文名

BuyID

gxcID

4

P

Notnull

进货编号

GoodsID

gxcID

4

Notnull

商品编号

Amount

Decimal

9

Notnull

数量

UnitPrice

gxcMoney

4

Notnull

进货单价

Deliverer

gxcTrueName

10

Null

送货员

Transactor

gxcTrueName

10

Null

办理员

RegistrarID

gxcID

4

F

Notnull

录入人员号

Regdate

Datetime

8

Notnull

登记时间

Remark

gxcRemark

1000

Null

备注

损坏商品表(Spoilage)

字段名

字段类型

长度

主/外键

字段值约束

对应中文名

SpoilageID

gxcID

4

P

Notnull

损坏事件号

BuyID

gxcID

4

F

Notnull

商品编号

Amout

Decimal

9

Notnull

数量

Reportor

gxcTrueName

10

Notnull

报损人

Reason

gxcRemark

1000

null

损坏原因

RegistrarID

gxcID

4

NotNull

录入人员号

Regdate

datetime

8

Datetime

登记时间

供货商表(Supplier)

字段名

字段类型

长度

主/外键

字段值约束

对应中文名

SupplierID

gxcID

4

P

Notnull

供货商编号

SupplierName

gxcCaption

100

Notnull

供货商名称

Contact

gxcRemark

1000

Null

联系方式

Introduce

gxcRemark

1000

Null

简要介绍

Remakr

gxcRemark

1000

Null

备注

4.2关系图约束设计

数据库关系图如下:

4.3.物理结构设计

系统的存储物理结构由数据库来生成。

以下为几个例子

查看存在ID字段不为某个值但某个字符型字段等于某个值

/*查看某个数据表中*/

CREATEPROCdbo.ExistNameWithoutID

@strTableNamevarchar(255),--表名

@strIDNamevarchar(255),--ID字段名

@intIDValueint,--ID字段值

@strFieldNamevarchar(255),--字符型字段名

@strFieldValuevarchar(50),--字符型字段值

@bitResultbitOUTPUT--输出值,0为不存在,1为存在

AS

SETNOCOUNTON

DECLARE@strSQLvarchar(3000)--主语句

DECLARE@nCountint--返回记录行数

/*创建存储符合条件的记录数的临时表*/

IFOBJECT_ID('dbo.#tmpTable')ISNULL

CREATETABLE#tmpTable(tmpFieldint)--创建临时表

ELSE

TRUNCATETABLE#tmpTable--清空临时表

/*在数据库表中检索符合条件的记录数并存储在临时表中*/

SELECT@strSQL='SELECTCOUNT(['+@strFieldName+'])FROM['+@strTableName+']WHERE['+@strFieldName+']='''+@strFieldValue+''''+'AND'+@strIDName+'<>'+CONVERT(varchar(50),@intIDValue)

SELECT@strSQl='INSERT#tmpTable'+@strSQL

EXEC(@strSQL)

/*在临时表中返回存储的记录数*/

SELECTTOP1@nCount=tmpFieldFROM#tmpTableORDERBYtmpField

/*删除临时表*/

DROPTABLE#tmpTable

/*输出参数*/

IF@nCount>0

SELECT@bitResult=1

ELSE

SELECT@bitResult=0

GO

SETQUOTED_IDENTIFIEROFF

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

SETANSI_NULLSON

GO

添加一条商品信息

/*添加一条商品信息,输出商品编号和执行结果*/

CREATEPROCdbo.GoodsAddNew

@GoodsNamevarchar(100),--商品名称

@Amountdecimal(18,2),--库存数量

@TypeIDint,--类型编号

@UnitNamevarchar(100),--单位

@SupplierIDint,--供货商编号

@Introducevarchar(1000),--商品介绍

@Remarkvarchar(1000),--备注

@IDintOUTPUT,--商品编号

@ReturnValueintOUTPUT--执行结果(VB组件的自定义枚举值)

AS

DECLARE@ErrNoint--保存错误号

BEGINTRANSACTION--开始事务

/*手动维护数据唯一性的代码。

*/

DECLARE@ExistNamebit

EXECExistByName'Goods','GoodsName',@GoodsName,@ExistNameOUTPUT

IF@ExistName=1--当前商品名称已存在

BEGIN

ROLLBACKTRANSACTION--回滚事务

SELECT@ReturnValue=3--返回VB组件的自定义枚举值

RETURN--结束存储过程

END

/*添加记录*/

INSERTINTOGoodsValues(@GoodsName,@Amount,@UnitName,@TypeID,@SupplierID,@Introduce,@Remark)

--记录当前的错误号

SELECT@ErrNo=@@ERROR

/*输出参数*/

IF@ErrNo=0--没有发生错误

BEGIN

SELECT@ID=(SELECTMAX(GoodsID)FROMGoods)

SELECT@ReturnValue=0

END

ELSEIF@ErrNo=2627--违反唯一约束

BEGIN

ROLLBACKTRANSACTION--遇到错误则回滚事务

SELECT@ReturnValue=3

RETURN

END

ELSE--其他未知错误

BEGIN

ROLLBACKTRANSACTION--遇到错误则回滚事务

SELECT@ReturnValue=1

RETURN

END

COMMITTRANSACTION--提交事务

GO

SETQUOTED_IDENTIFIEROFF

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

SETANSI_NULLSON

GO

删除一条商品信息

/*删除一条商品信息,输出执行结果*/

CREATEPROCdbo.GoodsDelete

@GoodsIDint,--商品编号

@ReturnValueintOUTPUT--执行结果(VB组件的自定义枚举值)

AS

DECLARE@ErrNoint--保存错误号

BEGINTRANSACTION--开始事务

/*验证是否存在当前商品编号,若否则不能删除*/

DECLARE@ExistIDbit

EXECExistByID'Goods','GoodsID',@GoodsID,@ExistIDOUTPUT

IF@ExistID=0--当前商品编号不存在

BEGIN

ROLLBACKTRANSACTION--回滚事务

SELECT@ReturnValue=2--返回VB组件的自定义枚举值

RETURN--结束存储过程

END

/*手动维护数据完整性的代码*/

EXECExistByID'Buy','BuyID',@GoodsID,@ExistIDOUTPUT

IF@ExistID=1

BEGIN

ROLLBACKTRANSACTION

SELECT@ReturnValue=3

RETURN

END

/*验证销售信息是否包含当前商品,若是则不能删除*/

EXECExistByID'Sale','SaleID',@GoodsID,@ExistIDOUTPUT

IF@ExistID=1

BEGIN

ROLLBACKTRANSACTION

SELECT@ReturnValue=3

RETURN

END

/*删除记录*/

DELETEFROMGoodsWHEREGoodsID=@GoodsID

--记录当前的错误号

SELECT@ErrNo=@@ERROR

/*输出参数*/

IF@ErrNo=0--没有发生错误

SELECT@ReturnValue=0

ELSEIF@ErrNo=547--发生外键冲突

BEGIN

ROLLBACKTRANSACTION--遇到错误则回滚事务

SELECT@ReturnValue=3

RETURN

END

ELSE--其他未知错误

BEGIN

ROLLBACKTRANSACTION--遇到错误则回滚事务

SELECT@ReturnValue=1

RETURN

END

COMMITTRANSACTION--提交事务

GO

SETQUOTED_IDENTIFIEROFF

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

SETANSI_NULLSON

GO

返回所有供货商

CREATEVIEWdbo.view_Supplier

AS

/*返回所有供货商*/

SELECTSupplierID,SupplierName,Contact,Introduce,RemarkFROMSupplier

GO

SETQUOTED_IDENTIFIEROFF

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIEROFF

GO

SETANSI_NULLSON

GO

CREATEVIEWdbo.view_Buy

AS

SELECTB.BuyID,B.GoodsID,G.GoodsName,

B.UnitPrice,B.Amount,G.UnitName,

B.UnitPrice*B.AmountASTotalPrice,

B.Deliverer,B.Transactor,B.RegistrarID,

B.RegDate,G.TypeID,G.SupplierID,B.Remark

FROMBuyASBLEFTOUTERJOINGoodsASG

ONB.GoodsID=G.GoodsID

GO

SETQUOTED_IDENTIFIEROFF

GO

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

SETANSI_NULLSON

GO

5.运行测试

5.1.运行模块的组合

具体软件的运行模块组合为程序多窗口的运行环境,各个模块在软件运行过程中能较好的交换信息,并能够独立的处理各自的数据。

5.2.测试及问题提出

软件运行时有较友好的界面,基本能够实现用户的数据处理要求。

问题1:

无法进入数据库

问题2:

字段名称与SQL关键字冲突

添加字符型数据的时候,如果该数据饮食了单引号,则会造成字符的意外截断而产生错误。

问题3:

个别触发器无作用

在Buy表上的delete触发器中,不能完成删除商品信息的时候同步更新商品库存的功能。

5.3.问题解决

系统的运行时间基本可以达到用户所提出的要求。

问题解决如下

解决问题1:

'设置服务器名称,数据库名称,登录名(此时假设密码为空)

PublicFunctionConnectToDatabase()AsBoolean

OnErrorGoToErrHandler

Setg_Conn=NewConnection

DimServerNameAsString,DBNameAsString,UserNameAsString,strPasswordAsString

'连接SqlServer的连接字符串设置

ServerName="(local)"

DBName="BuySaleStorage"

UserName="sa"

strPassword=""

'连接到SQLServer数据库

根据DB文件夹中的内容,创建数据库,推荐用MDF文件附加数据库;

\DB\MDF\BuySaleStorage_Data.MDF

\DB\MDF\BuySaleStorage_LOG.LDF

连接参数:

数据库名:

BuySaleStorage

登录名:

sa

密码:

解决问题2:

当添加字符型数据的时候,如果该数据饮食了单引号,则会造成字符的意外截断而产生错误。

解决方法是把字符数据中的单引号替换为两个单引号,使用了RealString函数来过滤单引号。

按照意义对字段命名,很可能使字段名称与SQL的关键字冲突而产生错误,比如名称为User的字段。

解决方法是给字段名称加上中括号“[]”,使字段名称为“[User]”。

解决问题3:

在SQLServer事务中的操作是作为一个整体来执行的。

如果手工约束业务规则和强制数据完整性,心谤腹非把相应的代码与核心操作代码放在一个事务中,这样的才能保持数据的完整性。

对触发器而言,由于它和激活触发器的语句一起被作为单一的事务来对待,所以即使没有显式地BeginTransaction语句,在触发器的定义中也可以RollBackTransaction语句。

6.小结

由于系统较小没有外加维护模块,因为维护工作比较简单,仅靠数据库的一些基本维护措施即可。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2