讨论:数据库的设计(应对变化的需求)

98049522 2004-01-30 08:41:53
为一个厂子写IMA。现在情况是这样:本来是叫为一个仓库写的,已经写的差不多了。客户比较满意效果吧,于是要求为别的仓库也改为计算机管理。因为同一厂两个仓库的E-R图中有些实体是相同,于是把所有数据表放在一个数据库内,这样方便维护与操作。在开始进行数据库设计时,考虑到一个问题:可能客户在这部分完成后,又会要求添加为别的仓库。就又会给数据库添加表。发现这样的扩展延伸不是很合理。

库存管理基本就是领/还料的操作。如五金仓就建立 部门,员工,用户,机台,领料主,领料从...。其中部门,员工,机台就是相同的,用户表结构相同。

现在就是只建立一个数据库,等着往里在建新的数据表(客户'善变的要求')。个人觉得这样的设计不是很合理。想把公共数据独立建个数据库,然后有新的需求就建新库,无则删除即可。另外对于'用户'这个表也不是很好处理。

大家有没有遇过这种情况?给出出主意啊! 谢了!
...全文
47 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcsunjun 2004-02-03
  • 打赏
  • 举报
回复
用一个数据库就可以,但要有一个仓库表,在操作时先选择仓库,然后根据对应的ID号再选表
表的建立是动态的,如五金库,其对应ID是10,则其下的材料明细表为ClMX_10 等或其他类似的样式
jcdwin7 2004-02-03
  • 打赏
  • 举报
回复
多用视图
victorycyz 2004-02-03
  • 打赏
  • 举报
回复
没看明白你的难点在哪里。

如果各个仓库完全是分开的。就不必合并到一个数据库里。如果只是分类不同,如五金仓、塑胶仓,那就用一个数据库,只不过多一个仓库表而已。

另,为了通用,你的“机台”表可以改成“领料单位”表。

其他如有不明白的,再提出来讨论。
zjcxc 2004-02-03
  • 打赏
  • 举报
回复
--看下面的设计示例,仓库应该有一个表来维护,就可以解决楼主的问题了.


--库存统计示例,没有写仓库表的设计:

--数据测试环境
create table 物料明细表(物料ID varchar(6) primary key
,名称 varchar(8) not null
,规格 varchar(10)
,颜色 varchar(4)
,单位 varchar(4)
,所属类别 varchar(6))

create table 进仓主表 (进仓ID varchar(20) primary key
,供应商ID varchar(10)
,进仓日期 datetime
,原凭证号 varchar(10)
,入库类型 int)

create table 进仓明细表 (进仓ID varchar(20) not null
,物料ID varchar(6) not null
,数量 decimal(20,2))

alter table 进仓明细表 add constraint PK_进仓明细表 PRIMARY KEY CLUSTERED (进仓ID,物料ID)

create table 出仓主表 (出仓ID varchar(20) primary key
,部门ID varchar(10)
,领料日期 datetime
,领料单号 varchar(10)
,出库类型 varchar(1))

create table 出仓明细表 (出仓ID varchar(20) not null
,物料ID varchar(6) not null
,数量 decimal(20,2))
alter table 出仓明细表 add constraint PK_出仓明细表 PRIMARY KEY CLUSTERED (出仓ID,物料ID)
go

--添加表间关系
ALTER TABLE dbo.进仓明细表 ADD CONSTRAINT FK_进仓明细表_进仓主表 FOREIGN KEY
(进仓ID) REFERENCES dbo.进仓主表(进仓ID)
ON UPDATE CASCADE
ON DELETE CASCADE

ALTER TABLE dbo.进仓明细表 ADD CONSTRAINT FK_进仓明细表_物料明细表 FOREIGN KEY
(物料ID) REFERENCES dbo.物料明细表(物料ID)
ON UPDATE CASCADE
ON DELETE CASCADE

ALTER TABLE dbo.出仓明细表 ADD CONSTRAINT FK_出仓明细表_出仓主表 FOREIGN KEY
(出仓ID) REFERENCES dbo.出仓主表(出仓ID)
ON UPDATE CASCADE
ON DELETE CASCADE

ALTER TABLE dbo.出仓明细表 ADD CONSTRAINT FK_出仓明细表_物料明细表 FOREIGN KEY
(物料ID) REFERENCES dbo.物料明细表(物料ID)
ON UPDATE CASCADE
ON DELETE CASCADE

go
--为数据数据处理添加视图
create view qry进仓单
as
select b.物料ID,a.进仓日期,进仓数量=sum(b.数量)
from 进仓主表 a join 进仓明细表 b on a.进仓ID=b.进仓ID
group by b.物料ID,a.进仓日期

go
create view qry出仓单
as
select b.物料ID,出仓日期=a.领料日期,出仓数量=sum(b.数量)
from 出仓主表 a join 出仓明细表 b on a.出仓ID=b.出仓ID
group by b.物料ID,a.领料日期

go
create view qry进出记录
as
select 物料ID=isnull(a.物料ID,b.物料ID)
,a.进仓日期,进仓数量=sum(a.进仓数量)
,b.出仓日期,出仓数量=sum(b.出仓数量)
,日期=isnull(a.进仓日期,b.出仓日期)
from qry进仓单 a full join qry出仓单 b
on a.物料ID=b.物料ID and a.进仓日期=b.出仓日期
group by isnull(a.物料ID,b.物料ID),a.进仓日期,b.出仓日期,isnull(a.进仓日期,b.出仓日期)

go
--初始化数据
insert into 物料明细表
select 'A-001','皮纸','20×30×50','红','张','纸'
union all select 'B-002','磁铁','20×10×50','','块','五金'

insert into 进仓主表
select 'J-20031015-001','SA001','2003-10-15','123456',1
union all select 'J-20031015-002','SA002','2003-10-15','123457',1
union all select 'J-20031017-001','SA002','2003-10-17','123456',2

insert into 进仓明细表
select 'J-20031015-001','A-001',200
union all select 'J-20031015-002','B-002',99
union all select 'J-20031017-001','A-001',150.5

insert into 出仓主表
select 'C-20031015-001','Dept_P','2003-10-15','1111111','P'
union all select 'C-20031016-001','Dept_P','2003-10-16','1111112','P'

insert into 出仓明细表
select 'C-20031015-001','A-001',50
union all select 'C-20031016-001','A-001',50
go


--得到要求的结果
--进出记录表
select a.*
,进仓日期=convert(varchar(10),b.进仓日期,120),b.进仓数量
,出仓日期=convert(varchar(10),b.出仓日期,120),b.出仓数量
,当前库存=isnull((select sum(进仓数量) from qry进仓单 where 物料ID=a.物料ID and 进仓日期<=b.日期),0)
-isnull((select sum(出仓数量) from qry出仓单 where 物料ID=a.物料ID and 出仓日期<=b.日期),0)
from 物料明细表 a left join qry进出记录 b on a.物料ID=b.物料ID
order by a.物料ID,b.日期

--当前库存表
select a.*,b.当前库存
from 物料明细表 a left join (
select 物料ID,当前库存=isnull(sum(进仓数量),0)-isnull(sum(出仓数量),0) from qry进出记录 group by 物料ID
)b on a.物料ID=b.物料ID
order by a.物料ID

go
--删除测试环境
drop view qry进仓单,qry出仓单,qry进出记录
drop table 进仓明细表,出仓明细表,物料明细表,进仓主表,出仓主表

zjcxc 2004-02-03
  • 打赏
  • 举报
回复
为什么没有设计仓库表?
erigido 2004-02-03
  • 打赏
  • 举报
回复
修改表结构,添加仓库表,仓库类型表,将库存表中添加数据项,仓库编号id和仓库类型id.....
98049522 2004-02-03
  • 打赏
  • 举报
回复
怎麼沒有人幫忙啊
98049522 2004-02-01
  • 打赏
  • 举报
回复
帮帮我啊
98049522 2004-01-31
  • 打赏
  • 举报
回复
谢谢 lgqTiger(【老虎】)




再请前辈指教
lgqTiger 2004-01-30
  • 打赏
  • 举报
回复
这样的事,确实头痛的啊!
建议你使用Paradox数据库
好了,这样,方便修改数
据库的组合及结构。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧