数据库设计模块Word格式.docx
- 文档编号:6499324
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:18
- 大小:76.97KB
数据库设计模块Word格式.docx
《数据库设计模块Word格式.docx》由会员分享,可在线阅读,更多相关《数据库设计模块Word格式.docx(18页珍藏版)》请在冰点文库上搜索。
c.处理器芯片为:
AMDSempron2500+,内存为:
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
实体号
gxcMoney
Smallmoney
进货\销售金额
gxcRemark
1000
Null
备注说明
gxcTrueName
10
真实姓名
商品信息表(Goods)
GoodsID
商品号码
GoodsName
gxcCaption
商品名称
Amount
Decimal1
9
库存数量
UnitName
单位名称
TypeID
商品类型号
SupplierID
商品供货商号
Introduce
商品介绍
Remark
备注
用户表(UserInfo)
字段类型
UserID
gcxID
用户号
UserName
用户名称
Password
用户密码
TrueName
LastLoginTime
Datetime
8
最近登录时间
UserType
Bit
1
NotNull
用户类型
销售表(Sale)
SaleID
销售号
F
商品号
Decimal
销售数量
UnitPrice
单价
registrarID
录入人员号
regDate
登记时间
进货信息表(Buy)
BuyID
进货编号
商品编号
数量
进货单价
Deliverer
送货员
Transactor
办理员
RegistrarID
Regdate
损坏商品表(Spoilage)
SpoilageID
损坏事件号
Amout
Reportor
报损人
Reason
null
损坏原因
datetime
供货商表(Supplier)
供货商编号
SupplierName
供货商名称
Contact
联系方式
简要介绍
Remakr
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['
]='
'
+@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
SELECT@bitResult=0
GO
SETQUOTED_IDENTIFIEROFF
SETANSI_NULLSON
SETQUOTED_IDENTIFIERON
添加一条商品信息
/*添加一条商品信息,输出商品编号和执行结果*/
CREATEPROCdbo.GoodsAddNew
(
@GoodsNamevarchar(100),--商品名称
@Amountdecimal(18,2),--库存数量
@TypeIDint,--类型编号
@UnitNamevarchar(100),--单位
@SupplierIDint,--供货商编号
@Introducevarchar(1000),--商品介绍
@Remarkvarchar(1000),--备注
@IDintOUTPUT,--商品编号
@ReturnValueintOUTPUT--执行结果(VB组件的自定义枚举值)
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--没有发生错误
SELECT@ID=(SELECTMAX(GoodsID)FROMGoods)
SELECT@ReturnValue=0
ELSEIF@ErrNo=2627--违反唯一约束
ROLLBACKTRANSACTION--遇到错误则回滚事务
SELECT@ReturnValue=3
RETURN
ELSE--其他未知错误
SELECT@ReturnValue=1
COMMITTRANSACTION--提交事务
删除一条商品信息
/*删除一条商品信息,输出执行结果*/
CREATEPROCdbo.GoodsDelete
@GoodsIDint,--商品编号
/*验证是否存在当前商品编号,若否则不能删除*/
DECLARE@ExistIDbit
EXECExistByID'
GoodsID'
@GoodsID,@ExistIDOUTPUT
IF@ExistID=0--当前商品编号不存在
SELECT@ReturnValue=2--返回VB组件的自定义枚举值
/*手动维护数据完整性的代码*/
Buy'
BuyID'
IF@ExistID=1
ROLLBACKTRANSACTION
/*验证销售信息是否包含当前商品,若是则不能删除*/
Sale'
SaleID'
IF@ExistID=1
SELECT@ReturnValue=3
/*删除记录*/
DELETEFROMGoodsWHEREGoodsID=@GoodsID
ELSEIF@ErrNo=547--发生外键冲突
返回所有供货商
CREATEVIEWdbo.view_Supplier
/*返回所有供货商*/
SELECTSupplierID,SupplierName,Contact,Introduce,RemarkFROMSupplier
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
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.小结
由于系统较小没有外加维护模块,因为维护工作比较简单,仅靠数据库的一些基本维护措施即可。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 设计 模块