2012-12-23 65 views
2

讓我們先從這個表:MySQL的存儲過程把庫存移動到庫存

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. ] 

這種跟蹤是如何隨着時間的特定RESOURCEID的特定量會從一個部門/位置/人轉移到另一個部門/位置/人。

我想要做的是創建一個...東西。一個過程或一個觸發器或一個視圖,該視圖循環遍歷toLocationID/toIndividualID/toDeptID值,併爲與這些目標相關的每個資源ID生成運行清單。

在MySQL存儲過程中,我甚至沒有足夠的好處來做到這一點。

我想我可以創建三個正在運行的庫存表,每個部門,位置和人員各一個,並且有一個觸發器在更新移動表時更新這些表。常規桌子或臨時桌子會更好嗎?

而詳細的問題一直在持續。所以,我只是留下一個普遍的問題:掃描表格以審覈庫存移動以確定實際運行庫存的最佳方式是什麼?

謝謝!

+0

你可以有他們所有的部門,地點,人員表和一個庫存表.. :) – bonCodigo

+0

我可以。創建表格並不是最難的部分。創建觸發器或存儲過程是困難的部分...... :-)我可以在PHP中執行此操作,但在MySQL中保留這些更新似乎更快。 – dafydd

+0

你不想爲此使用臨時表;它們只對擁有的連接可見,並且在連接關閉時被刪除,而這些數據可以由一系列連接共享。 –

回答

1

我已經實現了與以往類似的系統。它似乎是最好的(對我來說)把它分解成幾張表格。

資源
- 資源ID
- 資源描述
- 數量

改變
- 改變ID
- 變化的日期/時間戳
- 改變類型
- 資源ID
- 目的地ID
- 數量

目的地
- 目的地ID
- 目的地類型

更改類型將包括:
- 從分銷商
新的股票 - 分配一些部分到一個人/地點/事件
- 丟棄股票
- 保修更換
- 銷售

目的地將包括:
- 人/地點/事件 - (在你的情況下,將部門,人員和位置)

要找出多少()你有股票:

從資源

選擇

要找出給定目的地擁有多少:

從資源

選擇加入的變化加盟目的地,郵票< =有趣的事件

爲了找到一個給定項目的歷史

從變化選擇其中資源=

所以,你不必運行正在進行的更新..你只需要跟蹤更改..它發生在一個(合理)正常化的時尚。