+ -
当前位置:首页 → 问答吧 → 困惑多年,有设计过库存管理的同学看过来

困惑多年,有设计过库存管理的同学看过来

时间:2011-11-21

来源:互联网

我做erp好几年了,但是有个问题一直困扰我,就是库存表的建立,问题,现在软件升级,所以来请教大家一下

过去:
  结构:建立两个表 一个是库存信息表,一个是库操作表
库存信息表记录了库存数,存放位置等信息,操作记录表记录操作
每次入库,出库,都写一条操作记录进操作记录表,同时再更改库存表的数据,库存查询的时候从库存表里直接提取
  结果:这样库存查询很方便,都是实时的,但是修改的时候要修改两个表,容易出现修改不同步的情况,后来财务经常会向我要某一天的时点库存,这个我很难还原回去,财务又要我每月结账,提供期初,期末,等信息,这方面可以通过运算得到,但是数以十万记得记录,运算时间十分长。

现在:
 现在升级了,我想直接取消库存表,只做一个库存记录表,库存信息用视图表示,
 create table stor (ID,Code,操作类型,数量 ,单价 ,存放位置)
对于数量,入库就是正数,出库就是负数,将来库存用sum(数量) group by code 就能运算
或者
 create table stor (ID,Code,操作类型,入库数量 ,出库数量,操作单价 ,库存位置)
入库数量,出库数量都写正数 ,将来库存用 SUM(入库数量)-SUM(出库数量) group by code 进行运算
以上的设计思路,避免了修改信息的时候出现不同步现象,想取指定日期内的库存数据直接用时间进行筛选,库存结账的时候只需取出月初或月末数据进行备份,这些优点比较明显,但是查询库存时的效率可能会比较低,尤其是数据越来越多的情况下

第一个问题:请问大家做过的类似系统,或者用友金蝶等系统的表结构是怎样的呢
第二个问题,如果应该改成,上面我提到的结构,请问上面两种情况哪种比较好

作者: cs1918   发布时间: 2011-11-21

1、如果针对月结的话,LZ第一种设计较好,把月度的明细一统计将上月期末一加就OK了。
2、金蝶都是月结出来的结果,直接用结果。
3、第一种唯一的问题是更新不同步,LZ可以参考事务处理的方法,将同步问题解决。

作者: OrchidCat   发布时间: 2011-11-21

出现不同步现象,是你代码没控制好吧?
我觉得还是第一种合理些。
第二种如果数据量大,并发用户多,效率很低的.

作者: xuam   发布时间: 2011-11-21

如果没有实时库存表,输入出库记录的时候怎么校验输入的数据是否正确?每次需要获取库存都重新计算?
而且,你的库存记录表怎么没有时间字段,怎么计算时点库存?


好的方法是,在你原来的基础上,增加月结表,记录每月底的库存,财务的要求就可以满足了,计算量也不会太大

作者: Haiwer   发布时间: 2011-11-21

引用 3 楼 haiwer 的回复:
如果没有实时库存表,输入出库记录的时候怎么校验输入的数据是否正确?每次需要获取库存都重新计算?
而且,你的库存记录表怎么没有时间字段,怎么计算时点库存?


好的方法是,在你原来的基础上,增加月结表,记录每月底的库存,财务的要求就可以满足了,计算量也不会太大

一看就是搞过的。

作者: fredrickhu   发布时间: 2011-11-21

引用 3 楼 haiwer 的回复:

如果没有实时库存表,输入出库记录的时候怎么校验输入的数据是否正确?每次需要获取库存都重新计算?
而且,你的库存记录表怎么没有时间字段,怎么计算时点库存?


好的方法是,在你原来的基础上,增加月结表,记录每月底的库存,财务的要求就可以满足了,计算量也不会太大

时间字段是有的,我简写的

作者: cs1918   发布时间: 2011-11-21

引用 4 楼 fredrickhu 的回复:
引用 3 楼 haiwer 的回复:
如果没有实时库存表,输入出库记录的时候怎么校验输入的数据是否正确?每次需要获取库存都重新计算?
而且,你的库存记录表怎么没有时间字段,怎么计算时点库存?


好的方法是,在你原来的基础上,增加月结表,记录每月底的库存,财务的要求就可以满足了,计算量也不会太大

一看就是搞过的。

支持#3,#4 
果然都是搞过的

作者: dovei   发布时间: 2011-11-21

引用 3 楼 haiwer 的回复:
如果没有实时库存表,输入出库记录的时候怎么校验输入的数据是否正确?每次需要获取库存都重新计算?
而且,你的库存记录表怎么没有时间字段,怎么计算时点库存?


好的方法是,在你原来的基础上,增加月结表,记录每月底的库存,财务的要求就可以满足了,计算量也不会太大

这个最好还是看数据量的多少,如果数量量比较大的话,可以再考虑增加日结表,月结表,这样等到数据查询时,就比较方便。

作者: smilysoft   发布时间: 2011-11-21

以前我一直都用库存表的,是放置库存的数据里面的,这样的优点是可以提高查询速度,但是会经常出现单据明细账与库存账不一致,原因就是在单据审核写入库存里,会出现掉数据,不过,用事务一般就可以解决这个问题,但是还是有很大局限性,比如上个月还没有结帐,这个月是不审核记库存的,这个是很麻烦的事情。后来改为单据统计查询,这个解决很多局限性、数据不一至的问题了,但是就会有速度减慢了,所以只能通过优化存储未过程来解决,我现在数据达到千万级时,客户可以接受千万级的查询速度。有一句话是,速度可以慢点,但第一是准确一定要准确,速度就算提高到1秒,数据不准确,什么都是假的

作者: fstao   发布时间: 2011-11-21

为什么操作表和库存表会不同步?应该不是设计的问题而是操作的问题吧?
操作表是必要的,不然修改很麻烦,每个操作表维护要单独记录,通过类似记账的功能更新库存表。
月末全部操作完成后,执行月结操作,余额结转到下月即可。

作者: xptking   发布时间: 2011-11-21

引用 9 楼 xptking 的回复:

为什么操作表和库存表会不同步?应该不是设计的问题而是操作的问题吧?
操作表是必要的,不然修改很麻烦,每个操作表维护要单独记录,通过类似记账的功能更新库存表。
月末全部操作完成后,执行月结操作,余额结转到下月即可。

有时候客户的管理员,在对不上数据的时候甚至会直接修改库存表,这样数据库绝对就不准了,还有我们开发程序的时候会相应的开发删除库操作记录,修改库操作记录,等等一系列程序,开发成本加大
但是如果没有实时库存表,这些程序的开发成本大幅度降低

作者: cs1918   发布时间: 2011-11-21

引用 8 楼 fstao 的回复:

以前我一直都用库存表的,是放置库存的数据里面的,这样的优点是可以提高查询速度,但是会经常出现单据明细账与库存账不一致,原因就是在单据审核写入库存里,会出现掉数据,不过,用事务一般就可以解决这个问题,但是还是有很大局限性,比如上个月还没有结帐,这个月是不审核记库存的,这个是很麻烦的事情。后来改为单据统计查询,这个解决很多局限性、数据不一至的问题了,但是就会有速度减慢了,所以只能通过优化存储未过程来……

哥们你说的太对了,我就是这个情况,跟你一样

作者: cs1918   发布时间: 2011-11-21

不熟ERP,帮顶。

作者: wilmer   发布时间: 2011-11-21

思路很好

作者: szstephenzhou   发布时间: 2011-11-21

设计方式多种多样,月结的可倒推回去就行了嘛

作者: luckyrandom   发布时间: 2011-11-21