物资管理数据库设计说明书.docx
《物资管理数据库设计说明书.docx》由会员分享,可在线阅读,更多相关《物资管理数据库设计说明书.docx(17页珍藏版)》请在冰豆网上搜索。
物资管理数据库设计说明书
物资管理系统数据库设计说明书
1.引言2
1.1编写目的2
2.支持软件2
3.结构设计2
3.1概念结构设计2
3.1.1标识实体及关系2
3.1.2ER图3
3.2逻辑结构设计4
3.3物理结构设计5
4.运用设计6
4.1辅助设计6
4.1.1触发器6
4.1.2存储过程7
4.2安全保密设计12
1.引言
1.1编写目的
本文档针对物资管理系统需要使用的物资管理库的外部设计,结构设计,物理结构设计,以及数据库内的定义约定,以及建立的触发器等进行了详细的描述和分析,方便其他开发人员日后对酶系统的理解与维护。
1.2背景
待开发数据库的名称:
物资信息管理数据库
使用此数据库的软件系统的名称:
物资管理系统
此次所开发的物资管理系统由于涉及到大量的物资信息需要管理,所以需要开发一个物资管理数据库对系统经行进行支持。
2.支持软件
开发本数据库采用的软件为MicrosoftSQLServer,外部使用ASP.Net连接数据库和对数据库进行访问。
3.结构设计
3.1概念结构设计
3.1.1标识实体及关系
此系统用于仓库的物资管理,因为仓库管理的大概流程,一般人都有所了解,所以在这不再作详细的阐述。
经过分析,得出此系统具有以下几个实体:
仓库,物资,库存。
为了加强物资管理系统的安全性,所以必须对使用本系统的人员进行控制和身份验证。
所以必须保存管理员的基本信息。
因此,标识出管理员实体。
对于仓库物资管理,执行最多的动作是物资的入库和出库的处理。
所以,可以标识出仓库和物资基本信息有入库和出库两种关系。
而库存也受入库和出库的动作的影响,增加和减少库存。
下表为实体的具体描述:
实体名
描述
别名
事件
仓库
物资存放的仓房
仓房
一个仓库可以存0到n种物资
物资
仓库里存放的各种产品
产品,货物
一种物资可以被存放到0到n个仓库中
管理员
管理仓库活动以及维护系统信息的负责人
负责人
一个管理员根据他的权限管理一个或多个仓库
标识出关系并确定多样性约束如下表所示:
实体
多样性
关系
多样性
实体
仓库
0,n
入库/出库记录
0,n
物资
仓库
0,n
库存
0,n
物资
管理员
0,n
管理
1,n
仓库
标识实体以及有关属性如下所示:
管理员(id,名字,密码,电话,权限)
仓库(仓库号,名称,地址,面积)
物资(物资编号,物资名称,规格型号,种类,计量单位,单价,最小库存量,最大库存量)
关系以及有关属性如下所示:
入库/出库记录(物资编号,仓库号,批号,库存量,负责人,时间)
库存(物资编号,仓库号,库存量)
3.1.2ER图
经过设计,得出最终ER图为:
物资信息中的种类属性其属性值是限定的几个值,以保证归纳种类的统一性。
这部门由应用程序进行限制处理。
3.2逻辑结构设计
经过对实体和关系的分析,将ER模型映射成表。
映射规则遵循实体,关系与表实行一一对应的规则。
但由于入库出库记录虽然属性都一样,但处理的事务完全不同,所以将其映射成入库记录和出库记录两张表,便于信息的维护和管理。
映射后表结构如下:
仓库(仓库号,名称,地址,面积)
PrimaryKey仓库号
管理员(id,名字,密码,电话,权限)
PrimaryKeyid
物资基本信息(物资编号,物资名称,规格型号,种类,计量单位,单价,最小库存量,最大库存量)
PrimaryKey物资编号
入库记录(物资编号,仓库号,批号,库存量,负责人,时间)
PrimaryKey物资编号,仓库号,批号
ForeignKey物资编号references物资基本信息
ForeignKey仓库号references仓库
出库记录(物资编号,仓库号,批号,库存量,负责人,时间)
PrimaryKey物资编号,仓库号,批号
ForeignKey物资编号references物资基本信息
ForeignKey仓库号references仓库
库存(物资编号,仓库号,库存量)
PrimaryKey物资编号,仓库号
ForeignKey物资编号references物资基本信息
ForeignKey仓库号references仓库
3.3物理结构设计
对于同一品牌,同一规格型号的物资可以必须使用统一物资编号。
如:
可以采用产品的条形码。
只需将系统装上一个条形码扫描仪,获得产品的条形码号传给系统。
入库出库时需要登记负责人,负责人必须是在管理员中有登记并有幸应权限的管理员。
入库与出库是必须登记一个批号。
同一批号可以对应多条入库(出库)信息。
因为在同一批货物处理中,可以有不同的物资,这些物资也可以存放在不同的仓库中。
批号由系统自动生成。
生成十位字符型批号,生成规则如下所示:
第一位是入库出库标志位(o代表出库,i代表入库),二到七位是日期标志,两位表示年,两位表示月,两位表示日,三到十位是表示此批货物是当天处理的第几批货物。
如2006年6月18日出库处理的一批货物,这批货物是当天处理的第三批货物。
则按规则生成的批号为:
o060618003。
4.运用设计
4.1辅助设计
4.1.1触发器
当对仓库进行入库出库处理的时候,需要同时对仓库中的货物库存信息进行同步的更新。
所以应此要求,设立触发器,对入库出库操作触发动态更新库存的的动作,使处理自动化,避免了手动更新数据库,以及手动更新过程中带来的错误。
此设计增加了系统的自动化特性和安全性。
触发器设计如下:
插入出库记录时动态更新库存:
createtrigger出库更新库存on出库记录
afterinsert
as
declare@仓库号int,@物资编号bigint
select@仓库号=仓库号,@物资编号=物资编号frominserted
update库存
set库存量=库存量-(select数量frominserted)
where仓库号=@仓库号and物资编号=@物资编号
插入入库记录时动态更新库存:
createtrigger入库更新库存on入库记录
afterinsert
as
declare@仓库号int,@物资编号bigint
select@仓库号=仓库号,@物资编号=物资编号frominserted
if(selectcount(*)from库存
where仓库号=@仓库号and物资编号=@物资编号)=1
update库存
set库存量=库存量+(select数量frominserted)
else
insertinto库存(物资编号,仓库号,库存量)(select物资编号,仓库号,数量frominserted);
修改出库数量时级联更新库存:
createtrigger出库级联更新on出库记录
afterupdate
as
declare@仓库号int,@物资编号char(10),@数量int
select@仓库号=仓库号,@物资编号=物资编号,@数量=数量frominserted
update库存
set库存量=库存量+(select数量fromdeleted)-@数量
where仓库号=@仓库号and物资编号=@物资编号
修改入库数量时级联更新库存:
createtrigger入库级联更新on入库记录
afterupdate
as
declare@仓库号int,@物资编号char(10),@数量int
select@仓库号=仓库号,@物资编号=物资编号,@数量=数量frominserted
update库存
set库存量=库存量-(select数量fromdeleted)+@数量
where仓库号=@仓库号and物资编号=@物资编号
删除出库记录时动态更新库存:
createtrigger删除出库记录on出库记录
afterdelete
as
declare@仓库号int,@物资编号bigint
select@仓库号=仓库号,@物资编号=物资编号fromdeleted
update库存
set库存量=库存量+(select数量fromdeleted)
where仓库号=@仓库号and物资编号=@物资编号
删除入库记录时动态更新库存:
createtrigger删除入库记录on入库记录
afterdelete
as
declare@仓库号int,@物资编号bigint
select@仓库号=仓库号,@物资编号=物资编号fromdeleted
update库存
set库存量=库存量-(select数量fromdeleted)
where仓库号=@仓库号and物资编号=@物资编号
4.1.2存储过程
为了实现物资管理系统的各种功能,需要对数据库的某些数据进行访问和特定处理。
因为外部程序访问数据库速度较慢而且麻烦,所以编写了部分存储过程辅助外部用用程序实现特定数据的访问和处理。
✧显示所有管理员信息
CREATEPROCEDURE[UserList]
ASSELECT[dbo].[管理员].[id],
[dbo].[管理员].[名字],
[dbo].[管理员].[电话],
[dbo].[管理员].[权限]
FROM[dbo].[管理员]
GO
✧添加管理员信息
CREATEPROCEDURE[UsersAdd]
(@UID[varchar](50),
@UPassword[varchar](50),
@UPower[int],
@UName[varchar](50),
@UTel[varchar](50))
ASINSERTINTO[物资管理].[dbo].[管理员]
([id],[密码],[权限],[名字],[电话])
VALUES(@UID,@UPassword,@UPower,@UName,@UTel)
GO
✧删除管理员信息
CREATEPROCEDURE[usersdelete]
(@UID[varchar](50))
ASDELETE[物资管理].[dbo].[管理员]
WHERE
([id]=@UID)
GO
✧查询某个管理员的详细信息
CREATEPROCEDURE[UsersDetail]
@UID[varchar](50)
ASSELECT[dbo].[管理员].[id],
[dbo].[管理员].[名字],
[dbo].[管理员].[权限],
[dbo].[管理员].[电话]
FROM[dbo].[管理员]
WHEREid=@UID
GO
✧修改管理员基本信息
CREATEPROCEDURE[UsersModify]
(@UID[varchar](50),
@UPower[int],
@UName[varchar](50),
@UTel[varchar](50))
ASUPDATE[物资管理].[dbo].[管理员]
SET[权限]=@UPower,
[名字]=@UName,
[电话]=@UTel
WHERE([id]=@UID)
GO
✧修改管理员密码
CREATEPROCEDURE[UsersPasswdModify]
(@UID[varchar](50),
@UPassword[varchar](50))
ASUPDATE[物资管理].[dbo].[管理员]
SET[密码]=@UPassword
WHERE([id]=@UID)
GO
✧显示所有物资基本信息
CREATEPROCEDURE[wzList]
ASSELECT[dbo].[物资基本信息].[物资编号],
[dbo].[物资基本信息].[物资名称],
[dbo].[物资基本信息].[规格型号],
[dbo].[物资基本信息].[种类],
[dbo].[物资基本信息].[单价]
FROM[dbo].[物资基本信息]
GO
✧添加物资基本信息
CREATEPROCEDURE[wzadd]
(@Gid[bigint],@Gname[char](20),@Gguige[char](10),
@Gkind[char](10),@Gdanwei[char](4),@Gprice[money])
ASINSERTINTO[物资管理].[dbo].[物资基本信息]
([物资编号],[物资名称],[规格型号],[种类],[计量单位],[单价])
VALUES
(@Gid,@Gname,@Gguige,@Gkind,@Gdanwei,@Gprice)
GO
✧删除物资基本信息
CREATEPROCEDURE[wzDelete]
(@GID[int])
ASDELETE[物资管理].[dbo].[物资基本信息]
WHERE
([物资编号]=@GID)
GO
✧查询某物资的详细信息
CREATEPROCEDURE[wzdetail]
@GIDBIGINT
ASSELECT[dbo].[物资基本信息].[物资编号],
[dbo].[物资基本信息].[物资名称],
[dbo].[物资基本信息].[规格型号],
[dbo].[物资基本信息].[种类],
[dbo].[物资基本信息].[计量单位],
[dbo].[物资基本信息].[单价]
FROM[dbo].[物资基本信息]
WHERE[dbo].[物资基本信息].[物资编号]=@GID
GO
✧修改物资基本信息
CREATEPROCEDURE[wzmodify]
(@Gid[bigint],
@Gname[char](20),
@Gguige[char](10),
@Gkind[char](10),
@Gdanwei[char](4),
@Gprice[money])
ASUPDATE[物资管理].[dbo].[物资基本信息]
SET
[物资编号]=@Gid,[物资名称]=@Gname,[规格型号]=@Gguige,
[种类]=@Gkind,计量单位]=@Gdanwei,[单价]=@Gprice
WHERE
([物资编号]=@Gid)
GO
✧查看物资余额信息
CREATEPROCEDURE[yelist]AS
SELECT*
FROM[dbo].[余额详单]
GO
✧查询某个物资的余额信息
CREATEPROCEDURE[yelookup]
(@id[bigint])
AS
SELECT*
FROM[dbo].[余额详单]
WHERE
([物资编号]=@id)
GO
✧查看入库记录
CREATEPROCEDURE[outlist]AS
SELECT*
FROM[dbo].[出库记录]
GO
✧查看出库记录
CREATEPROCEDURE[inlist]AS
SELECT*
FROM[dbo].[入库记录]
GO
✧查看存放规则信息
CREATEPROCEDURE[gzlist]AS
SELECT[dbo].[物资基本信息].[物资编号],
[dbo].[物资基本信息].[物资名称],
[dbo].[物资基本信息].[规格型号],
[dbo].[物资基本信息].[计量单位],
[dbo].[物资基本信息].[最大库存量],
[dbo].[物资基本信息].[最小库存量]
FROM[dbo].[物资基本信息]
GO
✧修改存放规则
CREATEPROCEDURE[gzmodify]
(@ID[int],
@MAX[int],
@MIN[int])
ASUPDATE[物资管理].[dbo].[物资基本信息]
SET[最大库存量]=@MAX,
[最小库存量]=@MIN
WHERE([物资编号]=@ID)
GO
✧添加仓库信息
CREATEPROCEDURE[ckadd]
(@WID[int],
@WName[varchar](20),
@WArea[float],
@WAddress[varchar](50))
ASINSERTINTO[物资管理].[dbo].[仓库]
([仓库号],
[名称],
[面积],
[地址])
VALUES
(@WID,
@WName,
@WArea,
@WAddress)
GO
✧删除仓库信息
CREATEPROCEDURE[ckdelete]
(@WID[int])
ASdelete[物资管理].[dbo].[仓库]
WHERE
([仓库号]=@WID)
GO
✧查询仓库信息
CREATEPROCEDURE[ckList]AS
SELECT[dbo].[仓库].[仓库号],
[dbo].[仓库].[名称],
[dbo].[仓库].[面积],
[dbo].[仓库].[地址]
FROM[dbo].[仓库]
GO
✧修改仓库信息
CREATEPROCEDURE[ckmodify]
(@WID[int],
@WName[varchar](20),
@WArea[int],
@WAddress[varchar](50))
ASUPDATE[物资管理].[dbo].[仓库]
SET[名称]=@WName,
[面积]=@WArea,
[地址]=@WAddress
WHERE
([仓库号]=@WID)
GO
4.1.3视图
✧余额详单
createview余额详单
as
selecta.物资编号,a.物资名称,a.规格型号,b.名称,c.库存量
from物资基本信息a,仓库b,库存c
wherea.物资编号=c.物资编号andb.仓库号=c.仓库号
✧需求详单
CREATEview需求详单
as
selecta.物资编号,a.物资名称,a.规格型号,a.计量单位,a.单价,(a.最大库存量-a.最小库存量)/2-b.库存量as需求数量,(1-(b.库存量-a.最小库存量)/(a.最大库存量-a.最小库存量)*1.0)*100.0as紧急度
from物资基本信息a,库存b
wherea.物资编号=b.物资编号andb.库存量<(a.最大库存量-a.最小库存量)/2
4.2安全保密设计
在管理员的信息中,设置了权限标志。
不同的访问级别对应不同的的访问内容。
具体由应用程序物资管理系统进行控制。