1

以下のような在庫表があります。

date         item   new stock    sale  total
1-1-2000     abc      3          2     1
1-1-2000     bcd      4          2     2
1-1-2000     ffs      9          1     8

各商品の合計値は翌日に繰り越される必要があります。mySQLでそれを行うにはどうすればよいですか。データの繰り越し処理は毎日行われます。翌日にエントリを追加すると、「合計」の最終日の値を計算する必要があります。

4

1 に答える 1

1
CREATE TABLE items (
itemid int not null AUTO_INCREMENT PRIMARY KEY,
itemname varchar(40) not null,
onhand int not null, # current inv based on sales and inv adjustments
price decimal (10,2) not null   # default price per item
) engine=innodb;

CREATE TABLE sale (
saleid int not null AUTO_INCREMENT PRIMARY KEY, # basically an invoice #
customerid int not null,    # joined to a customer table
saledate timestamp not null
) engine=innodb;

CREATE TABLE sale_detail (
saleid int not null,        # invoice #
lineid int not null,        # lines 1 and up for this invoice
itemid int not null,        # item sold
qty int not null,           # quantity sold
price decimal (10,2) not null   # price per item can be overriden from items table value
) engine=innodb;

CREATE TABLE inventory_adj (
adjid int not null AUTO_INCREMENT PRIMARY KEY,
itemid int not null,
trans_typ int not null,     # 0=purchase stock, 1=inventory adj, 2=shrinkage, 3=return, etc
adjdate timestamp not null, # now()
qty int not null            # amt of change, positive is acquisition, negative is depletion
) engine=innodb;

手元の金額でアイテムテーブルを準備します。これが在庫レベルです。売上高から下がり、inventory_adj テーブルへの購入とともに上昇し、在庫を取得するとそこでも調整されます。これは正規化されたデータ モデルです。確かに、アイテムの手持は技術的に保持する必要はありません。オンザフライで計算できますが、少し時間がかかります。トランザクションを作成し、販売などに基づいて手持ちを更新し、トランザクションをコミットする限り、安全です。さらに、これにより、そこにたどり着くまでに何が起こったのかをより適切に監査できます。もちろん、売上高と在庫調整のエントリを作成するユーザーの名前など、他の列を追加します。

于 2012-11-21T15:22:56.500 に答える