CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

仓库管理并发控制问题!

楼主andyfr1210(华仔)2005-04-01 21:44:41 在 MS-SQL Server / 应用实例 提问

我现在准备做一个仓库管理系统。  
   
  填写入仓单和出仓单的时候,实时的更改库存表。  
  修改入仓单和出仓单的时候,如果影响库存的话,实时更改库存表。  
   
  整个系统有几个客户端,可由几个仓管员同时操作,如果几个仓管员同时修改同一条入仓记录或出仓记录会出现问题吗?如果会的话,应该怎么去处理这样的业务逻辑?  
   
  请各位多多指教,我没什么分了,只给了50分,请大家多多包涵吧!  
   
  问题点数:0、回复次数:13Top

1 楼real_name(*真名)回复于 2005-04-01 22:51:37 得分 0

如果修改能成功的话就不会   有什么问题  
  数据库自动   处理事物并发Top

2 楼gzhughie(hughie)回复于 2005-04-02 00:16:31 得分 0

会出现问题,简单的举个例子,你的出库数量要依据库存数量,库存的数量不够出库的数量,是不能出库的。如果多人同时操作出库功能,在查询的时候可能同时查出同一个库存数值,但是这个数值只够一个或其中几个人提前提交出库操作的人使用,后面的人再提交的时候   因为你的库存已经被动作快的人使用了,后面的人使用时,如果程序中不加限制,回到之库存为负,你改明白对于仓库管理系统,这个Bug的严重程度吧。  
   
  处理的方法有:  
  1.先入为主,意思是谁操作的快,谁就占便宜,后面的人系统给出库存不足的明确提示,不允许出库。这样做程序比较简单,有速度上的优势。但是给使用者的感觉不太好,因为明明查出库存足够,怎么生成的时候却提示不够了,很容易让人觉得这是系统的Bug。  
  2.提示性强行控制,系统中加入修改痕迹的记录,如果有人在操作员查出数据并提出修改的中间,修改库存表,那么根据修改痕迹提示操作员,已经有人提前修改的库存表,请他刷新当前记录,并判断是否继续操作。这样的程序比较麻烦,但是效果会很好。不过如果程序处理不好,速度会有一定的问题。  
   
  这两种方法我都用过,当然是同客户沟通过,客户用希望用哪个,我们就用那个,呵呵。  
   
  另外,对于仓库系统来说,生成入仓单和出仓单就直接修改库存的话,不是很严谨。对于仓库的管理,其实和帐务系统很类似,最怕的就是有人做假帐,欺上瞒下。一般是把,入仓单和出仓单作为一个申请的功能,另外加入库和出库确认的功能(实现入库和出库实物核对的功能),经过确认后,才可以真正的修改库存,完成入库或出库的动作。而且,入库和出库确认后,系统不允许修改入仓单和出仓单,如果发现操作错误,必须通过错误流程(高级权限的人可以使用)进行修改。这样做的目的是对仓库的物品严格管理,避免仓管员的贪污行为(如果可以随便修改入仓单、出仓单、库存,那么很容易作弊,同做假帐道理差不多)。Top

3 楼jhqjhq(逗号)回复于 2005-04-02 00:22:35 得分 0

脱机系统?Top

4 楼andyfr1210(华仔)回复于 2005-04-02 09:23:14 得分 0

哈哈,有意思!  
   
  不是脱机系统?Top

5 楼winternet(冬天)回复于 2005-04-02 17:51:43 得分 0

UPTop

6 楼Jonny2005R(石头)回复于 2005-04-02 19:30:01 得分 0

呵呵我是菜鸟我能提个意见吗!!呵呵!!我认为因该和刚才那个回答问题的大哥一样!!我认为系统并行问题首先要考虑事务的运行过程!!!我认为你应该先考虑锁的问题!!看那个先得到更新锁!!如果谁先得到谁就能够先对数据库进行操作!Top

7 楼Jonny2005R(石头)回复于 2005-04-02 19:36:00 得分 0

大哥做个触发器可以吗??Top

8 楼zhang_yzy(六子儿)回复于 2005-04-02 19:38:15 得分 0

gzhughie(hughie)  
   
  说的好Top

9 楼andyfr1210(华仔)回复于 2005-04-02 21:47:45 得分 0

用触发器,我不太放心  
  to   石头:说明一下,我是很菜的菜鸟  
  Top

10 楼andyfr1210(华仔)回复于 2005-04-02 21:57:23 得分 0

我现在用的是:gzhughie(hughie)的第二种方法。  
  建立一个锁定表,修改一个记录前,查询这个表,看数据是否被锁,如果被锁,则提示。  
  如果没有,则插入一条该记录的锁定记录到锁表中。然后进行修改。  
   
  我感觉这种方法比较麻烦,想问问有什么更好的方法(直接用数据库本身的一些并行功能来实现),但我对这方面不太了解,所以才来问一问。  
  Top

11 楼jialia(风中的雨)回复于 2005-04-04 18:48:51 得分 0

直接修改当前连接的“事务隔离级别”,数据库系统根据“事务隔离级别”,自动的锁定数据(表空间,表,行),最严格的隔离级别是SERIALIZABLE,能够保证只有一个事物能够更新成功,这是最简单的办法了。修改“事务隔离级别”的TSQL语句是Set   Transaction   Isolation   Level   SERIALIZABLE。详细查看帮助即可。Top

12 楼wjbboo(小天)回复于 2005-04-04 21:01:22 得分 0

学习  
  Top

13 楼jewen_delphi(DELPHI代码)回复于 2005-04-05 17:27:38 得分 0

learning!Top

相关问题

  • 仓库管理系统(需求分析)
  • 一个关于WMS(仓库管理)系统的讨论
  • 寻求仓库管理方面的例子
  • 一个仓库管理系统的建表问题
  • 请问谁有做好的仓库管理系统啊?
  • 问一个关于仓库管理的问题,顺便散分!
  • 百分,请做过仓库管理的哥们来给看看!
  • 求一个仓库管理软件源程序
  • 关于仓库管理系统功能模块的讨论
  • 求仓库管理一条SELECT 语句(有关库存的)

关键词

  • 修改
  • 系统
  • 数据库
  • 数据
  • 客户
  • 仓单
  • 出库
  • 库存
  • 仓库管理
  • 入库

得分解答快速导航

  • 帖主:andyfr1210

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo