如果是简单的进-销就很好算
但是 还有初始库存 库存盘点
还有库存调拨
这么复杂的情况下怎么算库存
表怎么设计?
------解决方案--------------------
库存管理一般是期初库存表,入库表,出库表,当前库存表,按需要考虑是否要加盘点表,至于物料表,采购单表得根据实际来建,不清楚实际需求就不怎么好给建议
------解决方案--------------------
一句话,满足条件的情况下,表结构设计的越简单越好
中间量用sql计算,比如库存之类的,就用入库减出库
就是能算出来的,就在查询的时候计算,不要在程序中控制这么一个变量,维护起来非常痛苦,而且经常出错
------解决方案--------------------
你反过来想,一个库存涉及到这么多表和业务,所有的业务操作都要去维护库存这个变量,麻烦且不说,只有一个地方出错,整个就错误
我之间做过类似的系统,业务比较复杂,为了维护类似于库存的中间量,最后简直吐血了都,还总是出错
为毛,我把问题简化了说,
从入库开始,新增出库单未出库需要维护一个变量(叫可用库存),另外一个变量叫做实际库存
出库单确认出库之后,又要维护一些这些变量(可用库存,实际库存等等还有其他可以计算出来的变量)
出库单取消出库之后又要维护一些变量,
取消又分为批量取消主表,或者取消明细中的单条记录,或者变更明细中的单条记录
过户(相当于货物易主)之后,这些东西又要维护,
因为很多地方不是涉及到一两张表的问题,到最后没办法连事务嵌套都用起来了
说的意思就是,维护了某些变量之后,到处是牵一发动全身的感觉
现在想起来还是头皮发麻
应该是我思路不对,或者是数据库设计的问题,反正这样子对我来说,是一个深刻的教训
总之你要是保存中间变量到一个字段中,写程序的时候就知道有多痛苦了
------解决方案--------------------
当时我也是认为,保持一个库存在一个字段中,用的时候直接不就有了,即时统计太慢了或者是麻烦之类的,
但是没有料到维护这个变量的代价
------解决方案--------------------
最简单的方式,就是只有“入库”和“出库”两种。只是每一种都有几个类别。
初始库存就是入库,类别是“初始库存”。
盘点结果有两种:盘盈和盘亏,盘盈,就用入库,类别是“盘盈调整”;盘亏,就用出库,类别是“盘亏调整”。
库存调拨,就是一个库里面出库,另一个库里入库。类别就是“库存调拨”。
…………
计算库存就是用入库减去出库。
当然,如果要做的复杂,就是将上面的一个类别建一个表,最后几个表联合去生成结果。
------解决方案--------------------
像这种做进销存管理的,一个帖子是不好说不清的.先要有一个大概业务流程E-R图,知道实际业务需求,然后着手设计。
我们是有一个库存表,是实时计算库存的,然后有一个作业每天晚上执行,检查当天的进销数量和库存。
------解决方案--------------------
其实就是盘点操作,最是裹乱。所以,如果盘点的的结果能作为一个插入动作(盘多了,就当入库;反之,出库。),而不是更新操作,如其他所有出入库动作一样,同类处理,就简单多了。当然,这个动作是虚拟的,还要考虑周全。
声明,我没做过大的库存系统,小的系统做过,只是个人愚见。