SQL service 数据库 某工厂的物料管理系统数据库设计与实现

  1. 实现物料的分类管理;
  2. 实现部门和员工信息管理;
  3. 实现物料的入库和领用管理;
  4. 实现物料的转仓管理;
  5. 创建触发器,实现物料入库和领用时相应物料库存的自动更新;
  6. 创建触发器,实现转仓时转入仓库物料增加、转出仓库物料减少;
  7. 创建存储过程统计各仓库各种物料的现存数量;
  8. 创建存储过程统计指定时间段内各种物料的入库数量和领用数量;
  9. 建立数据库相关表之间的参照完整性约束;

系统功能结构:

数据流程图:

逻辑结构设计

 局部E-R图

实体 部门部门号,部门名

员工员工号,姓名,性别,电话,职称

仓库仓库号,仓库名 

物料物料编号,物料名称,类型 

实体联系

员工和部门一个员工属于一个部门,一个部门可以有多个员工,属于多对一的关系

员工和物料物料由员工领用,一个员工可以领到多种物料,不同的物料也可以有不同的员工来领,它们属于多对多的关系

仓库和物料;一个仓库可以有多种物料,一种物料可在多个仓库,属于对多的关系

全局E-R图

 

数据字典

员工表(S)

字段名称

类型

约束控制

字段含义

SNo

Char(10)

primary key

员工号

SN

Char(20)

not null

员工姓名

Sex

char(1)

not null

性别

TNo

Char(17)

not null

员工电话

Dept

Char(20)

not null

职称

 

部门表(B)

字段名称

类型

约束控制

字段含义

BNo

Char(10)

primary key

部门号

BN

Char(20)

not null

部门名

 

仓库表(D)

字段名称

类型

约束控制

字段含义

DNo

Char(10)

primary key

仓库号

DN

Char(20)

not null

仓库名

 

物料表(A)

字段名称

类型

约束控制

字段含义

ANo

Char(10)

primary key

物料号

AN

Char(20)

not null

物料名

Class

Char(20)

not null

物料类型

 

部门员工表(BS)

字段名称

类型

约束控制

字段含义

BNo

Char(10)

primary key

部门号

SNo

Char(10)

primary key

员工号

 

物料仓库表(AD)

字段名称

类型

约束控制

字段含义

DNo

Char(10)

primary key

仓库号

ANo

Char(10)

primary key

物料号

Num

int

not null

物料数量

 

员工物料领取表(SA)

字段名称

类型

约束控制

字段含义

Id

int

primary key

自增编号

SNo

Char(10)

foreign key

员工号

ANo

Char(10)

foreign key

物料号

getNum

int

not null

领取数量

getTime

datetime

default

领取时间

 

物料出入库表(ioD)

字段名称

类型

约束控制

字段含义

Id

int

primary key

自增编号

ANo

Char(10)

foreign key

物料号

DNo

Char(10)

foreign key

仓库号

InOut

int

1'或'0'

出入标志1入0出

inoutTime

datetime

default

出入库时间

 

物料转仓表(RD)

字段名称

类型

约束控制

字段含义

ANo

Char(10)

foreign key

物料号

DNo1

Char(10)

foreign key

转出仓库号

DNo2

Char(10)

foreign key

转入仓库号

remNum

int

not null

转仓数量

 

物理结构设计

--创建数据库AMS
create database AMS
on
( name=AMS_Data,
  filename='C:\AMSData.mdf',
  size=10,
  maxsize=500,
  filegrowth=10)
log on
( name=AMS_Log,
  filename='C:\AMSLog.ldf',
  size=5,
  maxsize=500,
  filegrowth=5)

--创建数据表及约束
use AMS
go
--创建员工表
create table S
(  SNo char(10) not null constraint SNo_Prim primary key,
   SN  char(20) not null constraint SN_Uniq unique,
   Sex char(2)  not null constraint Sex_Che check(Sex='男' or Sex='女'),
   TNo char(20) null,
   Dept char(20) null)
go
--创建部门表
create table B
( BNo char(10) not null constraint BNo_Prim primary key,
  BN  char(20) not null )
go
--创建仓库表
create table D
( DNo char(10) not null constraint DNo_Prim primary key,
  DN char(20) not null )
go
--创建物料表
create table A
( ANo char(10) not null constraint ANo_Prim primary key,
  AN char(20) not null,
  Class char(20) not null )
go
--部门员工表
create table BS
( BNo char(10) not null constraint BS_ForeB foreign key references B(BNo),
  SNo char(10) not null constraint BS_ForeS foreign key references S(SNo),
  constraint BS_Prim primary key(BNo,SNo) )
go
--物料仓库表
create table AD
( DNo char(10) not null constraint AD_ForeD foreign key references D(DNo),
  ANo char(10) not null constraint AD_ForeA foreign key references A(ANo),
  Num int not null,
  constraint AD_Prim primary key(DNo,ANo))
go
--员工物料领取表
create table SA
( Id int not null identity,
  SNo char(10) not null constraint SA_ForeS foreign key references S(SNo),
  ANo char(10) not null constraint SA_ForeA foreign key references A(ANo),
  DNo char(10) not null constraint SA_ForeD foreign key references D(DNo),
  getNum int not null,
  getTime datetime default (getdate()) not null,
  constraint SA_Prim primary key(Id))
go
--物料出入库表
create table ioD
( Id int not null identity,
  ANo char(10) not null ,
  DNo char(10) not null ,
  inoutNum int not null,
  InOut int not null constraint InOut_Che check(InOut=1 or InOut=0),
  inoutTime datetime default (getdate()) not null,
  constraint ioD_Prim primary key(Id))
--物料转仓表
create table RD
( ANo char(10) not null constraint RD_ForeA foreign key references A(ANo),
  DNo1 char(10) not null constraint RD_ForeD1 foreign key references D(DNo),
  DNo2 char(10) not null constraint RD_ForeD2 foreign key references D(DNo),
  remNum int not null)

--创建触发器

--ioD表只能插入删除操作
use AMS
go
create trigger delete_ioD on ioD
instead of delete 
as 
print '禁止对此表进行删除操作!'
rollback ---将对表全部锁定禁止操作
go
create trigger update_ioD on ioD
instead of update 
as 
print '禁止对此表进行修改操作!'
rollback ---将对表全部锁定禁止操作

--创建触发器
--ioD表只能插入操作
use AMS
go
create trigger delete_ioD on ioD
instead of delete 
as 
print '禁止对此表进行删除操作!'
rollback ---将对表全部锁定禁止操作
go
create trigger update_ioD on ioD
instead of update 
as 
print '禁止对此表进行修改操作!'
rollback ---将对表全部锁定禁止操作

/*创建触发器,实现物料入库物料库存的自动更新;*/
--插入触发器
use AMS
go
create trigger insert_AD on AD 
after insert
as
declare @ano char(10),@dno char(10),@num int
select @ano=ANo,@dno=DNo,@num=Num from inserted
if not exists(select ANo from A where ANo=@ano)
     begin
	 print '不存在'+@ano+'物料不能入库!'rollback 
	 end
     else if not exists(select DNo from D where DNo=@dno)
	      begin
	      print '不存在'+@dno+'仓库物料不能入库!'rollback 
	      end
		  else   begin
		         insert into ioD(ANo,DNo,inoutNum,InOut) values(@ano,@dno,@num,1)
				 print @ano+'物料入库! 仓库:'+@dno+'数量:'+convert(varchar(10),@num)
		         end
--更新触发器
go
create trigger update_AD on AD 
after update
as
declare @ano1 char(10),@dno1 char(10),@num1 int,
@ano2 char(10),@dno2 char(10),@num2 int
select @ano1=ANo,@dno1=DNo,@num1=Num from deleted
select @ano2=ANo,@dno2=DNo,@num2=Num from inserted
if(@ano1=@ano2 and @dno1=@dno2)
    begin
	if(@num1>@num2) 
		begin 
		insert into ioD(ANo,DNo,inoutNum,InOut) values(@ano1,@dno1,@num1-@num2,0)
		print @ano1+'物料出库!仓库:'+@dno1+'数量:'+convert(varchar(10),@num1-@num2)
		end
	else  
		begin 
		insert into ioD(ANo,DNo,inoutNum,InOut) values(@ano2,@dno2,@num2-@num1,1)
		print @ano1+'物料入库!仓库:'+@dno1+'数量:'+convert(varchar(10),@num2-@num1)
		end
	end
	else if not exists(select ANo from A where ANo=@ano2)
		 begin
		 print '不存在'+@ano2+'物料,修改错误!' rollback
		 end
		 else if not exists(select DNo from D where DNo=@dno2)
			  begin
			  print '不存在'+@dno2+'仓库物料,修改错误!' rollback
			  end
			  else  begin
					insert into ioD(ANo,DNo,inoutNum,InOut) values(@ano1,@dno1,@num1,0)
					print @ano1+'物料出库!仓库:'+@dno1+'数量:'+convert(varchar(10),@num1)
					insert into ioD(ANo,DNo,inoutNum,InOut) values(@ano2,@dno2,@num2,1)
					print @ano2+'物料入库!仓库:'+@dno1+'数量:'+convert(varchar(10),@num2)
					end

--删除触发器
go
create trigger delete_AD on AD 
after delete
as
declare @ano char(10),@dno char(10),@num int
select @ano=ANo,@dno=DNo,@num=Num from deleted
insert into ioD(ANo,DNo,inoutNum,InOut) values(@ano,@dno,@num,0)
print @ano+'物料销毁!\n仓库:'+@dno+'数量:'+convert(varchar(10),@num)

/*创建触发器,实现物料领用时相应物料库存的自动更新*/
--插入触发器
go
create trigger insert_SA on SA 
after insert
as
declare @sno char(10),@ano char(10),@dno char(10),@getnum int
select @sno=SNo,@ano=ANo,@dno=DNo,@getnum=getNum from inserted
if not exists(select SNo from S where SNo=@sno)
     begin
	 print '该工厂不存在'+@sno+'员工!'rollback 
	 end
     else if not exists(select ANo from AD where ANo=@ano and DNo=@dno)
			begin
			print @dno+'仓库没有'+@ano+'物料!'rollback 
			end
			else if(select Num from AD where ANo=@ano and DNo=@dno)<@getnum
			       begin
				   print @dno+'仓库的'+@ano+'物料库存不足!'rollback 
				   end
				   else begin
						update AD set Num=Num-@getnum where ANo=@ano and DNo=@dno
						print @sno+'员工领取'+@ano+'物料成功!仓库:'+@dno+'数量:'+convert(varchar(10),@getnum)
				        end


--更新触发器
go
create trigger update_SA on SA 
after update
as
declare @sno1 char(10),@ano1 char(10),@dno1 char(10),@getnum1 int,
@sno2 char(10),@ano2 char(10),@dno2 char(10),@getnum2 int
select @sno1=SNo,@ano1=ANo,@dno1=DNo,@getnum1=getNum from deleted
select @sno2=SNo,@ano2=ANo,@dno2=DNo,@getnum2=getNum from inserted
if(@sno1=@sno2 and @ano1=@ano2 and @dno1=@dno2)
    begin
	if(@getnum1>@getnum2) 
	     begin 
		 update AD set Num=Num+@getnum1-@getnum2 where ANo=@ano1 and DNo=@dno1
		 print @sno1+'员工领取'+@ano1+'物料修改成功!仓库:'+@dno1+'数量:'+convert(varchar(10),@getnum1-@getnum2)
		 end
		 else begin
		       if(select Num from AD where ANo=@ano1 and DNo=@dno1)<(@getnum2-@getnum1)
			       begin
				   print @dno1+'仓库的'+@ano1+'物料库存不足!'rollback
				   end
						   begin
						   update AD set Num=Num+@getnum1-@getnum2 where ANo=@ano1 and DNo=@dno1
						   print @sno1+'员工领取'+@ano1+'物料修改成功!仓库:'+@dno1+'数量:'+convert(varchar(10),@getnum2-@getnum1)
						   end
			   end
    end
	else  
	      begin
	      if not exists(select SNo from S where SNo=@sno2)
			 begin
			 print '该工厂不存在'+@sno2+'员工!'rollback 
			 end
			 else if not exists(select ANo from AD where ANo=@ano2 and DNo=@dno2)
					begin
					print @dno2+'仓库没有'+@ano2+'物料!'rollback 
					end
					else if(select Num from AD where ANo=@ano2 and DNo=@dno2)<@getnum2
						   begin
						   print @dno2+'仓库的'+@ano2+'物料库存不足!'rollback 
						   end
						   else begin
								update AD set Num=Num+@getnum1 where ANo=@ano1 and DNo=@dno1
								update AD set Num=Num-@getnum2 where ANo=@ano2 and DNo=@dno2
								print @sno2+'员工领取'+@ano2+'物料修改成功!仓库:'+@dno2+'数量:'+convert(varchar(10),@getnum1)
								end
	      end
--删除触发器
go
create trigger delete_SA on SA 
after delete
as
declare @sno char(10),@ano char(10),@dno char(10),@getnum int
select @sno=SNo,@ano=ANo,@dno=DNo,@getnum=getNum from deleted
update AD set Num=Num+@getnum where ANo=@ano and DNo=@dno
print @sno+'员工领取物料归还成功!仓库:'+@dno+'数量:'+convert(varchar(10),@getnum)

/*创建触发器,实现转仓时转入仓库物料增加、转出仓库物料减少*/
--插入触发器
go
create trigger insert_RD on RD  
after insert
as
declare @ano char(10),@dno1 char(10),@dno2 char(10),@remnum int
select @ano=ANo,@dno1=DNo1,@dno2=DNo2,@remnum=remNum from inserted
if(@dno1=@dno2)
    begin
    print '相同仓库不能转库!'rollback 
    end
	else if (select Num from AD where DNo=@dno1 and ANo=@ano)<@remnum
		begin
		print @ano+'物料转库数量不足!'rollback 
		end
	    else  begin
			  update AD set Num=Num-@remnum where ANo=@ano and DNo=@dno1
			  if exists(select ANo from AD where ANo=@ano and DNo=@dno2)
					update AD set Num=Num+@remnum where ANo=@ano and DNo=@dno2
			  else  insert into AD(DNo,ANo,Num) values(@dno2,@ano,@remnum)
			  print @ano+'物料转库成功!转出仓库:'+@dno1+'转入仓库:'+@dno2+'数量:'+convert(varchar(10),@remnum)
			  end

--更新触发器	   
go
create trigger update_RD on RD  
instead of update
as
print '禁止对此表进行修改操作!'
rollback ---将对表全部锁定禁止操作

--删除触发器   
go
create trigger delete_RD on RD  
after delete
as
print '禁止对此表进行修改操作!'
rollback ---将对表全部锁定禁止操作

--创建存储过程
/*创建存储过程统计各仓库各种物料的现存数量;*/
use AMS
--统计各仓库各种物料的现存数量
go
create procedure findAD 
as
select D.DN as 仓库名,A.AN as 物料名,Num as 现存数量
from AD,A,D
where AD.ANo=A.ANo and AD.DNo=D.DNo


--查询某仓库各种物料存储情况
go
create procedure findAD_D 
( @dno char(10))
as
select D.DN as 仓库名,A.AN as 物料名,Num as 现存数量
from AD,A,D
where AD.ANo=A.ANo and AD.DNo=D.DNo and AD.DNo=@dno


----查询各仓库某种类型物料存储情况
go
create procedure findAclass
(@class char(20))
as
select D.DN as 仓库名,A.AN as 物料名,Class as 类型,Num as 现存数量
from AD,A,D
where AD.ANo=A.ANo and AD.DNo=D.DNo and Class=@class

/*创建存储过程统计指定时间段内各种物料的入库数量和领用数量;*/
go
--指定时间段内各种物料的入库数量
create procedure findTime
(@time1 datetime,
 @time2 datetime)
as
select DN as 仓库名,AN as 物料名称,inoutNum as 入库数量,inoutTime as 入库时间
from ioD,A,D
where inoutTime between @time1 and @time2 and 
      InOut=1 and ioD.ANo=A.ANo and ioD.DNo=D.DNo

go
--指定时间段内各种物料的领用数量
create procedure findGettime
(@time1 datetime,
 @time2 datetime)
as
select SN as 领取人,AN as 物料名,DN as 仓库名,getNum as 领取数量,getTime as 领取时间
from SA,A,D,S
where getTime between @time1 and @time2 and
      SA.SNo=S.SNo and SA.ANo=A.ANo and SA.DNo=D.DNo

数据库学习记录,仅供参考!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

包含文档,各种源码 一、 课程设计目的和要求………………………………………………….…3 二、课程设计过程…………………………………………………………….4 数据库设计的基本步骤如下:……………………………………………….4 1.需求分析阶段……………………………………………………………..4 1.1 应用背景……………………………………………………………4 1.2系统需求分析……………………………………….........................5 1.3系统可行性分析。………………………………………………….6 1.4系统E-R图……………………………………………………........6 2.概要设计…………………………………………………........................7 2.1开发系统的目的…………………………………………………….7 2.2系统模块的划分…………………………………………………….7 2.2.1基础信息管理…………………………………………............7 2.2.2库存管理..……………………………………………………..7 2.2.3商品销售………………………………………………………8 2.2.4查询统计………………………………………………………8 2.2.5往来管理………………………………………………………8 2.2.6系统设置……..………………………………………………..8 2.3数据库实施………………………………………………………….8 2.3.1CreateDatabase创建数据库…………………………………...8 2.3.2 Create Table 创建表…………………………………………9 3.前端设计………………………………………………………………..18 3.1详细实现…………………………………………………………….18 3.2 数据库的连接访问………………………………………………18 3.3用户登录模块设计………………………………………………….20 3.4系统首页设计……………………………………………………….23 3.5主要功能展示……………………………………………………….23 三、课程设计心得…………………………………………………………….26 参考文献:…………………………………………………………………….27
库存物资管理系统数据库设计过程 1. 数据库需求分析 1.1 需求分析 1、需求调查 21世纪以来,人类经济高速发展,人们发生了日新月异的变化,特别是计算机的应用 及普及到经济和社会生活的各个领域。使原本的旧的管理方法越来越不适应现在社会的 发展。为了适应现代社会人们高度强烈的时间观念,库存物资管理系统为企事业单位带 来了极大的方便。 设计一个数据库系统,首先必须确认数据库系统的用户和用途。由于数据库系统是一 个组织部门的模拟,数据库系统设计者必须对一个组织部门的基本情况有所了解,比如 该组织部门的组织机构、各部门的联系、有关事物和活动以及描述它们的数据、信息流 程、政策和制度、报表及其格式和有关的文档等。收集和分析这些资料的过程称为需求 分析。需求分析的目标是给出应用领域中数据项、数据项之间的关系和数据操作任务的 详细定义,为数据库系统的概念设计、逻辑设计和物理设计奠定基础,为优化数据库系 统的逻辑结构和物理结构提供可靠依据。设计人员应用户密切合作,用户则应积极参 ,从而使设计人员对用户需求有全面、准确的理解。 需求分析的过程是对现实世界深入了解的过程,数据库系统能否正确的反映现实世界 主要取决于需求分析,需求分析人员既要对数据库技术有一定的了解,又要对组织部门 的情况比较熟悉,一般由数据库系统设计人员和本组织部门的有关工作人员合作进行。 需求信息的收集又称为系统调查。为了充分地了解用户可能提出的要求,在调查研究 之前,要做好充分的准备工作,要明确调查的目的、调查的内容和调查的方式 想要把收集到的信息(如文件、图表、票据、笔记等)转化为下一设计阶段可用形式 的信息,必须对需求信息做分析整理工作。 2、数据流图 1.2 数据字典 1、数据项 (货品入库信息表) (供应商信息表) 2、数据结构 "编号 "数据结构名"属性 " "1 "入库信息 "供应商编号、供应商名称、入库编号、货品名称、货品" " " "规格、计量单位、数量、单价、入库日期 " "2 "货品信息 "货品名称、生产厂家、型号、规格 " "3 "供应商信息"供应商编号、名称、业务联系人、联系电话、传真 " "4 "出入库单据"商品名称、厂家、型号、规格、数量、出/入库日期、 " " " "出/入库单位、送/提货人 " "5 "库存报表 "货品名称、货品规格、计量单位、单价、数量 " "6 "出库报表 "货品编号、货品名称、计量单位、数量、单价、金额、" " " "出库日期、提货人、经手人 " 2. 概念结构设计 2.1 E-R图 1、期初库存设置模块E-R图 2、货品管理模块E-R图 3、库存物资管理系统总体E-R图 2.2 相应的实体—关系属性 仓库(名称,负责人,所属单位,构建日期) 供应商信息(供应商编号,供应商名称,联系人,联系方式) 库存信息(编号,规格,单位,数量,单价) 出库信息(出库编号,货品编号,名称,数量,单价,出库日期) 入库信息(供应商编号,供应商名称,入库编号,名称,规格,数量,单价,入库日期 ) 出库报表(货品编号、货品名称、计量单位、数量、单价、金额、出库日期、提货人、 经手人) 库存报表(货品名称、货品规格、计量单位、单价、数量) 3. 逻辑结构设计 3.1 数据组织 仓库(名称,负责人,所属单位,构建日期) 供应商信息(供应商编号,供应商名称,联系人,联系方式) 库存信息(编号,规格,单位,数量,单价) 出库信息(货品编号,出库编号,名称,数量,单价,出库日期) 入库信息(入库编号,供应商编号,供应商名称,名称,规格,数量,单价,入库日期 ) 出库报表(货品编号、货品名称、计量单位、数量、单价、金额、出库日期、提货人、 经手人) 库存报表(货品名称、货品规格、计量单位、单价、数量) 3.2 数据库模式定义 (库存信息) (出库信息) 3.3 数据库关系模式图 ----------------------- 库存物资管理系统数据库设计全文共7页,当前为第1页。 库存物资管理系统数据库设计全文共7页,当前为第2页。 物资入库信息 物资出库信息 库存物资信息 数量 规格 编号 单价 单位 名称 出库日期 数量 货品编号 出库编号 单价 规格 名称 数量 入库日期 供应商号 供应商名 入库编号 1 n 1 1 库存物资管理系统数据库设计全文共7页,当前为第3页。 库存物资管理系统数据库设计全文共7页,当前为第4页。 入库信息 物库存物资信息 资信息 出库信息 供应商信息 供应商信息 仓库信息 库存信息 供应商信息 操作员信息 供应 管理 存放 编号 名称 联系人 联系方式 所属单位 负责人 名称 构建日期 权限 规格 单价 联系方式 数量 单位 规格 编号 名称 出库日期 数量 货品编号 姓名 数量 入库日期 m 1 n 1 1 1
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DXgiser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值