(2008.4.4)
ちょっと面白かったのでメモメモ。次のサイトの課題をモデリングしてました。
課題はこれ。
まず、倉庫が複数あるとして、倉庫にはさまざまな商品が保管されるとする。それぞれの商品は倉庫毎の特定の棚に保管される(つまり、商品と倉庫の組み合わせで棚が決まる)ことになっているとする(在庫管理では典型的な業務要件だ)。
「倉庫に棚を置くのはイベントです。」 えーっ! 棚ってマスタでしょ? 倉庫にラックなどを据え付け、棚番を取ったら、動かさないでしょ。レイアウトを変えるときまで考えても、イベントとか意味分からん。
「仮に『何月何日から何月何日までは、この倉庫にこの棚を置いておく』」 あー、物理的な棚、か。ロケーション管理における「棚」は、物理的な棚じゃないよねー。
ここはもっとシンプルに、倉庫エンティティと棚エンティティを作って、1対多で十分。撤去したりするかもしれないから、棚エンティティに時刻列はほしいけどね。
「在庫はあくまでも状態であり導出項目ですから。」 同意。ここは参照先サイトのほう(在庫テーブルを設ける)がおかしい。はぶ氏の言うとおり、入庫と出庫を設けるよね。
ここで、参照先のサイトを見てみよう。
まず名詞を抜き出してみると、
商品と倉庫の組合せで棚が決まる、ということは、その定義マスタ (6) 保管先マスタが必要。入庫エンティティはイベント系だから実際に保管した棚を指す。保管先マスタで、次に入庫する商品をどの棚に保管するかを決める。
繰り返すけど、在庫エンティティを設けるのはダメ、ゼッタイ。あ、件数が多い案件などで、キャッシュとして設けるなら分かる。