让我们从这张表开始:
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存储过程方面都做得不够好,无法有效地完成这项工作。
我想我可以创建三个正在运行的库存表,每个表用于部门,位置和人员,并且在移动表更新时触发更新这些表。常规表或临时表会更好吗?
细节问题不断涌现。所以,我只想留下一般性问题:扫描审核库存变动的表格以确定实际运行库存的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
我过去实现过类似的系统。似乎最好(对我而言)将其分解为几个表格。
<强>资源强>
- 资源编号
- 资源描述
- 数量<强>更改强>
- 更改身份
- 更改日期/时间戳
- 更改类型
- 资源编号
- 目的地身份
- 数量目标强>
- 目的地身份
- 目的地类型
更改类型包括:
- 来自经销商的新库存
- 将某些部分分配给某个人/地点/事件
- 丢弃库存
- 保修更换
- 销售
目的地包括:
- 人/地点/事件 - (在您的情况下,它将是部门,人员和地点)
了解您的库存量(总):
从资源中选择
要了解给定的目的地有多少:
从资源加入中选择更改加入目标,其中标记&lt; =有趣的事件
查找给定项目的历史记录:
从资源=
的更改中进行选择
因此,您不必运行持续更新...您只需跟踪更改...它会以(合理)规范化的方式发生。