日期:2014-05-18  浏览次数:20438 次

架了个库存相关的数据库,结构上感觉有一些不妥和疑惑,欢迎大家给予校正!
有个库存系统的数据库设计方案,在部分地方有些疑惑;这方面有经验的同志解解惑!
-------------------------------------
1.   期间表(会计年度,期间,是否结帐,是否启用)
2.   货品表(物料ID,名称,规格,...)
3.   期初表(仓库ID,物料ID,期初数)
4.   当前库存表(仓库ID,货品ID,当前存量)
5.   历史结存表(会计年,期间,物料ID,期初数,总入,总出,调整数,实存)

**   入库单(单头/明细)表...出库单(单头/明细)表...调拔单(单头/明细)表..这些必备的结构就暂略了.
-------------------------------------
上述表中:
        表3,表达的是当系统开帐前,录入的当前的仓库实存(由初始化时1次性写入,之后才算启用帐)。
        表4,存放当前库存实际数量,在库存每笔业务发生(出库/入库/调拔)时,自动计算更新实存,算法如:
        当前存量=表5中的上1个会计期间的结存数+(入库+调入)-(出库+拔出)
        建这个表,主要是为了方便实时查询,比如新出库的时候,较方便的知道当前库存量...
-------------------------------------
想咨询一下:
        1.在这里,3和4似乎重复,究竟是放一张表里,还是独立的表?有没有必要保留开帐时的期初值?
        2.历史结存表,这样的结构合不合理?(主要为了方便查询各期间的情况,其值由月结时写入)
        3.如果2是合理的,这里面放着N个会计期间的存货情况(假设有2年的数据,1W个物理,那起码都有24W条).每次计算当前库存时,都要到里面去查上1期结存,然后再加减...似乎不是很方便,似乎要改改,有没有必要再加个本期期初表..?

        这几天一直在查用友U8的表,数百张表,,用事件跟踪器来分析数据...没分析个所以然结果先把自己搞晕了...汗!

        以上列表,纯属个人瞎蒙,欢迎大家的建议,谢谢!....等着改正...

------解决方案--------------------
学习
------解决方案--------------------
1.在这里,3和4似乎重复,究竟是放一张表里,还是独立的表?有没有必要保留开帐时的期初值?
----------------------
以前我们的做法是,如果九月份系统上线,就把期初值导成8月份的入库单,入库表有触发器,自动生成库存

2.历史结存表,这样的结构合不合理?(主要为了方便查询各期间的情况,其值由月结时写入)
-------------
这个是每月月底月结后生成的吧,我们也有

3.如果2是合理的,这里面放着N个会计期间的存货情况(假设有2年的数据,1W个物理,那起码都有24W条).每次计算当前库存时,都要到里面去查上1期结存,然后再加减...似乎不是很方便,似乎要改改,有没有必要再加个本期期初表..?
---------------
上个月月结后的库存不就是本月的期初么?

------解决方案--------------------
库存系统要期间表做什么呢?财务才要期间吧.
如果是想做结存的话,可以每月生成一次库存快照保存起来
------解决方案--------------------
个人认为这样设计无不妥

1.在这里,3和4似乎重复,究竟是放一张表里,还是独立的表?有没有必要保留开帐时的期初值?
你说明了,3和4是不同用途的,3时开账的数据,4是实时数据,3最好加多个日期字段,放开账日期,系统应该限制开账日期前的日期的出现.4的实时性不知道你考虑过没有如何保证,触发器也许是个选择.

2.历史结存表,这样的结构合不合理?(主要为了方便查询各期间的情况,其值由月结时写入)
这里的历史结存表我理解应该是个盘点表,因为有输入的调整数而使得这个表不能省略.

3.如果2是合理的,这里面放着N个会计期间的存货情况(假设有2年的数据,1W个物理,那起码都有24W条).每次计算当前库存时,都要到里面去查上1期结存,然后再加减...似乎不是很方便,似乎要改改,有没有必要再加个本期期初表..?
数据多了就备份 删除 没有必要在加个本期期初表,因为这个历史结存表只有在查询历史库存的时候用到,其他时候都是查询表4的

------解决方案--------------------
1不加不加吧,本来就没大用
2我觉得盘点表可以和月结表合并

3当前库存表没必要吧
------解决方案--------------------
有点多,库存的话 我只知道一张是 月结表,还有一张是出入库表,任何一天的库存都可以通过这两个表查出来,每月一结
------解决方案--------------------
3.4.5合并为一张表!
------解决方案--------------------
1.在这里,3和4似乎重复,究竟是放一张表里,还是独立的表?有没有必要保留开帐时的期初值?
----------------------------
当然有必要保留开张时的期初值。有时候,因为业务操作的失误,我以前碰到一个强人,半年不出库,只入库的,导致年终盘点的时候盘亏几千万,这个时候如果没有期初值,如何调整?
对于4,可以不用,但是用到会增强系统的查询速度,如果用触发器来做的话,会增加每次如出库时用户等待的时间。并且如果用户进行了错误的操作,需要回退的时候,也挺麻烦的。不过我们还是用了,毕竟在有大量数据的时候,还是利大于弊。

2.历史结存表,这样的结构合不合理?(主要为了方便查询各期间的情况,其值由月结时写入)
----------------------------
我认为是合理的,我们以前就是这样的。

3.如果2是合理的,这里面放着N个会计期间的存货情况(假设有2年的数据,1W个物理,那起码都有24W条).每次计算当前库存时,都要到里面去查上1期结存,然后再加减...似乎不是很方便,似乎要改改,有没有必要再加个本期期初表..?
-----------------------------------
1W个物料,那就每个期间也就1W,不是24W,本期期初就是上期结存。对于查找1W条记录,对Sql Server来说应该是小意思。当然,如果需要统计2年的入出库总和的话,那就需要查找24W,但这个是没有办法的,如果需要这样做的话,还不如增加一个字段,叫做累计出库总数,累计入库总数。