在庫管理をモデリング

(2008.4.4)

ちょっと面白かったのでメモメモ。次のサイトの課題をモデリングしてました。

課題はこれ。

まず、倉庫が複数あるとして、倉庫にはさまざまな商品が保管されるとする。それぞれの商品は倉庫毎の特定の棚に保管される(つまり、商品と倉庫の組み合わせで棚が決まる)ことになっているとする(在庫管理では典型的な業務要件だ)。

「倉庫に棚を置くのはイベントです。」 えーっ! 棚ってマスタでしょ? 倉庫にラックなどを据え付け、棚番を取ったら、動かさないでしょ。レイアウトを変えるときまで考えても、イベントとか意味分からん。

「仮に『何月何日から何月何日までは、この倉庫にこの棚を置いておく』」 あー、物理的な棚、か。ロケーション管理における「棚」は、物理的な棚じゃないよねー。

ここはもっとシンプルに、倉庫エンティティと棚エンティティを作って、1対多で十分。撤去したりするかもしれないから、棚エンティティに時刻列はほしいけどね。

「在庫はあくまでも状態であり導出項目ですから。」 同意。ここは参照先サイトのほう(在庫テーブルを設ける)がおかしい。はぶ氏の言うとおり、入庫と出庫を設けるよね。

ここで、参照先のサイトを見てみよう。

まず名詞を抜き出してみると、

  1. 倉庫
  2. 商品
ぐらいかな。あと、(4) 入庫、(5) 出庫が必要。倉庫間、倉庫内(棚)移動を想定して、棚移動エンティティを設ける手もありそう。transfer slip と1対1で対応。

商品と倉庫の組合せで棚が決まる、ということは、その定義マスタ (6) 保管先マスタが必要。入庫エンティティはイベント系だから実際に保管した棚を指す。保管先マスタで、次に入庫する商品をどの棚に保管するかを決める。

繰り返すけど、在庫エンティティを設けるのはダメ、ゼッタイ。あ、件数が多い案件などで、キャッシュとして設けるなら分かる。