« Javaを突き詰めるとEJBの壁にぶち当たる | トップページ | 継承→Aspect→DI へプログラミング言語は進化している »

2005/01/23

再帰SQL

 Javaやモデリングを検索すると、2chのスレッドにたどり着いてしまうのだが、面白い記事を見つけた。
 「部品表から、未来のある時点での在庫の推移・過不足を見たいが、どのようなデータモデリングとSQLを使えばよいのか?」という質問に対し、「再帰SQLを使うしかないだろう」という答えがあり、下記のリンクが張られていた。

 オブジェクト指向、Javaを取り入れた新しい業界標準「SQL99」詳細解説 (共通表式 WITH句/再帰SQL)

 共通表式は、外部結合等でFROM句にあるサブクエリを何度も使わざるを得ない時に使った経験があるので知っていたが、再帰SQLについては知らなかった。
 上記HPの例題を読むと、「部品構成表から、自転車を構成する全部品と各部品の所要数の一覧を作る」時のSQLが再帰SQLとして書かれている。
 更に、「パリからサンフランシスコまでの乗り継ぎのある経路のうち、最少費用の経路を探す」ためにも再帰SQLを使っている。
 こんな問題の解決に再帰SQLを使うんだなーと感心した。(感心してはいけないが)

 この方法は、MSProjectで作ったスケジュール表のリソース平準化のアルゴリズムにも使われているのだろうか?
 クリティカルパスの検索や工数最適化にもこのアルゴリズムは使えるのではないか?
 再帰SQLを使えば、最短経路検索の問題が全て解けてしまうのでは?と思ってしまうが、無限ループの問題とかあるみたい。

 上記の記事には、再帰SQLの他に、渡辺さんの本「生産管理・原価管理システムのためのデータモデリング」に載っている「LLCを使ってシングルレベル展開して最後の階層まで集計する」アルゴリズムが回答されていた。
 LLC(ローレベルコード)の意味は、「ある部品が部品構成表でどれくらい最下位にあるかを示す位置」なのだが、恥ずかしながら僕もLLCの使い道がよく分かっていなかった。

 渡辺さんの本にある「MRPの所要量計算アルゴリズム」は理解し切れていないけれど、再帰SQLのアルゴリズムと似ている感じがするのだが、正しいだろうか? もう少し考えよう。

|

« Javaを突き詰めるとEJBの壁にぶち当たる | トップページ | 継承→Aspect→DI へプログラミング言語は進化している »

日記・コラム・つぶやき」カテゴリの記事

プログラミング」カテゴリの記事

モデリング」カテゴリの記事

プロジェクトマネジメント」カテゴリの記事

コメント

ローレベルコードの使用目的は主に二つです
一番重要な目的は,所要量計算(あるいは原価計算)を行う品目の順序を決定するというものです(P175を参照).所要量計算を行うためには,親品目からの所要量の総計が必要なので,すべての親品目の所要量計算が完了しなければ該当品目の計算を行うことができません.品目ごとに付けられているローレベルコードの昇順で計算すれば(ただしMRPの計算の単位が品目だけという前提においてですが),かならず親品目の計算が完了した順序で計算できる,というわけです.
次にもう一つよく使われるのが,部品構成のループのチェックです.ループについてはP124の図2を参照してください.このチェックは非常に重いものなのですが,ローレベルコードの振り直しが必要でないような場合はチェックする必要がありません.

投稿: yuuntim | 2005/07/14 20:57

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 再帰SQL:

« Javaを突き詰めるとEJBの壁にぶち当たる | トップページ | 継承→Aspect→DI へプログラミング言語は進化している »