再帰SQL
Javaやモデリングを検索すると、2chのスレッドにたどり着いてしまうのだが、面白い記事を見つけた。
「部品表から、未来のある時点での在庫の推移・過不足を見たいが、どのようなデータモデリングとSQLを使えばよいのか?」という質問に対し、「再帰SQLを使うしかないだろう」という答えがあり、下記のリンクが張られていた。
オブジェクト指向、Javaを取り入れた新しい業界標準「SQL99」詳細解説 (共通表式 WITH句/再帰SQL)
共通表式は、外部結合等でFROM句にあるサブクエリを何度も使わざるを得ない時に使った経験があるので知っていたが、再帰SQLについては知らなかった。
上記HPの例題を読むと、「部品構成表から、自転車を構成する全部品と各部品の所要数の一覧を作る」時のSQLが再帰SQLとして書かれている。
更に、「パリからサンフランシスコまでの乗り継ぎのある経路のうち、最少費用の経路を探す」ためにも再帰SQLを使っている。
こんな問題の解決に再帰SQLを使うんだなーと感心した。(感心してはいけないが)
この方法は、MSProjectで作ったスケジュール表のリソース平準化のアルゴリズムにも使われているのだろうか?
クリティカルパスの検索や工数最適化にもこのアルゴリズムは使えるのではないか?
再帰SQLを使えば、最短経路検索の問題が全て解けてしまうのでは?と思ってしまうが、無限ループの問題とかあるみたい。
上記の記事には、再帰SQLの他に、渡辺さんの本「生産管理・原価管理システムのためのデータモデリング」に載っている「LLCを使ってシングルレベル展開して最後の階層まで集計する」アルゴリズムが回答されていた。
LLC(ローレベルコード)の意味は、「ある部品が部品構成表でどれくらい最下位にあるかを示す位置」なのだが、恥ずかしながら僕もLLCの使い道がよく分かっていなかった。
渡辺さんの本にある「MRPの所要量計算アルゴリズム」は理解し切れていないけれど、再帰SQLのアルゴリズムと似ている感じがするのだが、正しいだろうか? もう少し考えよう。
| 固定リンク
「プログラミング」カテゴリの記事
- クラウドではソフトウェアの品質が課金の差として出てくる(2009.11.30)
- クラウド時代のSW開発スタイル(2009.11.29)
- Web 2.0メモ(2005.11.15)
- Ruby関西とiPod(2006.01.29)
- WebブラウザのJavaScriptエンジン高速化がもたらすもの(2008.04.22)
「プロジェクトマネジメント」カテゴリの記事
- TiDDを実践して気付いたことpart7~繰り返し開発を制する者はSW開発を制す(2009.12.19)
- チケット駆動開発のアンチパターンpart2(2009.12.02)
- TiDDを実践して気づいたことpart4~TestLinkによるテスト戦略(2009.11.30)
- TiDDを実践して気付いたことpart3~繰り返し開発の戦略(2009.11.29)
- アドレナリンジャンキー (2009.11.19)
「モデリング」カテゴリの記事
- astah*Professionalファーストインプレッション(2009.12.17)
- 特徴(Feature)、粗筋(Story)、脚本(Scenario)とチケットの関係(2009.12.06)
- モデリングとプログラミングの観点の違い(2009.11.22)
- 要求開発はBABOKに対抗できるか?(2009.11.20)
- マネジメントのスピードが開発のスピードに直結する(2009.11.01)
「日記・コラム・つぶやき」カテゴリの記事
- インターネットが既成メディアを脅かす(2005.11.04)
- Web 2.0メモ(2005.11.15)
- Ruby関西とiPod(2006.01.29)
- Web 2.0で一番重要なのは価値あるデータベース(2006.02.20)
- 最近のお気に入り(2007.10.31)


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