MySQL存储过程将库存变动转化为库存

时间:2012-12-23 22:20:13

标签: mysql stored-procedures

让我们从这张表开始:

CREATE  TABLE IF NOT EXISTS `resourceMovement` (
  `resourceID` INT(4) UNSIGNED NOT NULL ,
  `movementDateTime` DATETIME NOT NULL ,
  `movementQuantity` INT(11) UNSIGNED NOT NULL ,
  `fromLocationID` INT(4) UNSIGNED NULL ,
  `fromIndividualID` INT(11) UNSIGNED NULL ,
  `fromDeptID` INT(4) UNSIGNED NULL ,
  `toLocationID` INT(4) UNSIGNED NULL ,
  `toIndividualID` INT(11) UNSIGNED NULL ,
  `toDeptID` INT(4) UNSIGNED NULL ,
  `lastUpdated` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`resourceID`, `movementDateTime`, `movementQuantity`) ,
  [ List of foreign key constraints. ]

这会随着时间的推移跟踪特定资源ID的特定数量如何从一个部门/位置/人移动到另一个部门/位置/人。

我想做的是创造......某事。循环遍历toLocationID / toIndividualID / toDeptID值的过程或触发器或视图,并为与这些目标关联的每个resourceID生成正在运行的库存。

我甚至在MySQL存储过程方面都做得不够好,无法有效地完成这项工作。

我想我可以创建三个正在运行的库存表,每个表用于部门,位置和人员,并且在移动表更新时触发更新这些表。常规表或临时表会更好吗?

细节问题不断涌现。所以,我只想留下一般性问题:扫描审核库存变动的表格以确定实际运行库存的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我过去实现过类似的系统。似乎最好(对我而言)将其分解为几个表格。

  

<强>资源
   - 资源编号
   - 资源描述
   - 数量

     

<强>更改
   - 更改身份
   - 更改日期/时间戳
   - 更改类型
   - 资源编号
   - 目的地身份
   - 数量

     

目标
   - 目的地身份
   - 目的地类型

更改类型包括:
- 来自经销商的新库存
- 将某些部分分配给某个人/地点/事件
- 丢弃库存
- 保修更换
- 销售

目的地包括:
- 人/地点/事件 - (在您的情况下,它将是部门,人员和地点)

了解您的库存量():

  

从资源中选择

要了解给定的目的地有多少:

  

从资源加入中选择更改加入目标,其中标记&lt; =有趣的事件

查找给定项目的历史记录

  

从资源=

的更改中进行选择

因此,您不必运行持续更新...您只需跟踪更改...它会以(合理)规范化的方式发生。