以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  提取未入库的业务单据效率问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72595)

--  作者:happyft
--  发布时间:2015/8/2 16:02:00
--  提取未入库的业务单据效率问题
在开入库单时,想每次都只提取还未入库的采购单,有以下两种方法:
1、在如采购单中,有产品编码,采购数量,采购单号等列,增加一累计入库列,每次采购入库单保存时都用本次入库的数量+采购单中原来的累计入库写入到采购单的累计入库中,这样只提取累计入库<采购数量的采购单即可。
2、在SQL数据库中设计一个索引视图,每次采购入库单保存时都按采购单号,产品编码自动计算对应的累计入库,这样只提取索引视图中累计入库<采购数量的采购单即可。
请问哪种效率更好,为什么?
谢谢!

--  作者:大红袍
--  发布时间:2015/8/2 16:11:00
--  

为什么不直接加一列,是否入库作为判断。如果入库了,就标记为入库。

 

不加一列也可以,那就需要用select in 的语法去查找和加载。

 

方法1肯定是快的,方法二会慢一些。


--  作者:HappyFt
--  发布时间:2015/8/2 16:26:00
--  
但方法1有个问题,就时跨表更新时如果刚好更新了累计入库后采购入库单保存时出现网络断开或者不稳定时经常出现数据不准确。 另外,采购单中有采购数量,累计入库,已入库,如果直接按是否已入库 来提取是不是比用累计入库>采购数量r来判断更高效,但这样必须用一触发器之类的来实现当累计入库大于等于采购数量时将已入库更新为true,是不是?
--  作者:大红袍
--  发布时间:2015/8/2 16:29:00
--  

跨表更新是肯定有你说的问题的,你可以在项目打开的时候,或者是需要的时候,重新计算一次累计的值。也就是同步数据。


--  作者:HappyFt
--  发布时间:2015/8/2 16:48:00
--  
这样每张类似的业务单据,如生产单(有累计完成),外协加工单等打开项目时每张单都要重新计算一次,效率是不是很低啊?
--  作者:大红袍
--  发布时间:2015/8/2 16:53:00
--  

 那没办法,你要处理额外情况就必须这样做。

 

 用sql语句更新,效率也不会低。况且你可以定时更新。


--  作者:HappyFt
--  发布时间:2015/8/2 17:43:00
--  
如果在入库单中编写触发器是不是就没有这样的问题?
--  作者:有点蓝
--  发布时间:2015/8/2 19:30:00
--  
用触发器是个不错的解决方案,顶一下