Foxtable(狐表)用户栏目专家坐堂 → [讨论]我想问下实现库存管理的架构思路


  共有3847人关注过本帖树形打印复制链接

主题:[讨论]我想问下实现库存管理的架构思路

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
[讨论]我想问下实现库存管理的架构思路  发帖心情 Post By:2016/6/10 23:30:00 [显示全部帖子]

我所知道的库存管理实现有2个思路

 第一种思路(很多网上软件教程都爱教,容易理解):出库单,入库单,销售单,盘点单,生成时,通过修改商品档案表里对应商品的库存列。例如商品档案里,苹果的col“库存数量”有10个,然后做了销售单卖出2个后,用修改行的方式,直接修改列“库存数量”为8。

这个好处 
1查询库存很方便,直接查询商品档案对应的列就行了。 
2修改库存是针对某一行进行修改,可以用openQQ防止行的并发编辑,可以绝对得控制不会出现库存数量为负数

 但是有坏处,
 1想要查询库存往来记录,就非常麻烦,一旦库存出现差异,不查询流水记录,是无法找到原因的。或者需要弄个日志表之类的专门存放往来记录,但是这个日志表很难弄,很难可以记录清楚十几种单据具体的情况,日志内容也是当时生成的,过段时间再看,可能会因为当时日志不完整,自己都不明白做了什么事情。或者直接从那些出库单,销售单,入库单等等10多个不同单据里提速资料,但是每个表都开发一次提数,加一个新出库功能,太麻烦,一旦修改,工程量不堪设想。 
2假如太多人在出库入库并发,会因为openQQ的独占编辑,总是别其他人独占中,总是要保存几次才能成功。 

第二种思路 库存数量并不存储在某一列,而是建立一个库存流水账,库存数量靠汇总得出。出库单,入库单,销售单等等的单,保存时,把单据里所有的商品出库数量明细,例如有10行商品出库,就在库存流水账里新建对应的10行商品。

 好处
 1查询库存数量都是实时汇总出来的,有非常详细的流水记录,因为本来就是个流水账,非某列固定数字
 2接口方便。以后无论再做什么出入库功能之类的表,只要看着这个库存流水账的表架构,去新增行数据,就行了,兼容性非常出色 
3由于修改库存是新增行操作,不存在并发问题,不用像思路1那样,多人大规模并发修改某个商品,导致整天被锁,修改失败,不断重试。 

 坏处
 1无法用openQQ的独占功能实现库存永远不为负数。在思路1,修改库存时我可以判断修改后库存要不为负数,才能修改。 但是思路2,我最多可以用sqlcompute汇总对应商品库存数量,在保存前判断一下,不为负数,再新增行。但有可能在大量并发存储时,出这种问题。例如苹果只有1个,小明出库苹果1,系统sqlcompute判断没问题,1-1=0 ,正准备新增行,不过网络卡了半秒,这时这么巧小军也在出库苹果1个,sqlcompute判断,1-1=0,通过,然后新增行。最后结果就是苹果出库了2个,变成-1。
 2如果用sql事务的排他处理,就无法利用狐表的便捷语句,全部要写sql语句,大量并发时,还是会出现一直被他人锁住情况,不过不是锁住某行,而是锁住这个流水账的表。 

 请问大家思路是怎样的?不知道是不是我对库存存储架构理解得还太不足 。我目前使用思路2
[此贴子已经被作者于2016/6/10 23:33:29编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(大红袍)?库存就是一个查询表。你入库、...  发帖心情 Post By:2016/6/11 7:57:00 [显示全部帖子]

那就是用思路2?能具体一点吗?
[此贴子已经被作者于2016/6/11 7:57:30编辑过]

 回到顶部