回答受付終了まであと5日
2「処理はアプリ側でもたせるべきか、RDBMS側にもたせるべきか?」 ちょっとおもしろい記事をみかけました。
2「処理はアプリ側でもたせるべきか、RDBMS側にもたせるべきか?」 ちょっとおもしろい記事をみかけました。 https://sikushima.hatenablog.com/entry/20100607/1275889891 筆者の方は、処理をDB側でもたせることにより、生産性が劇的に上がるとおっしゃっています。 しかし、半径5m以内では、仕様変更があった場合、アプリ側のソースコードを変えたくないばっかりに、新規ストアドプロシージャに作り、それが繰り返された結果、似たようなストアドが乱立する状態になりました。さすがに使用してないと完璧に分かっているストアドはエイヤッと削除しますが、SQLは書き方に自由度が高く、ましてやストアドに関してはDB間の互換性が低いです。どうしてもDBサーバ側で処理をしたい、や、一時的になつじつま合わせぐらいならともかく、 長期間にわたりメンテナンスする場合や、DBが変更される可能性がある場合は、込み入った判断分岐はストアド側ではなく、アプリ側で処理したほうがいいんじゃないか?とおもうのですが。(いまではアプリ側にもLINQがあり、ある程度互換性あります) そもそも、仕様変更があった場合は、どうなさっているのでしょう?まさか、古いストアドはそのまま置いといて、新しい条件に基づくストアドを立ち上げなさっているわけじゃないですよね。それは時代の流れに逆行です。アプリ側ならオーバーライド,オーバーライトいろいろ手ありますが。。。 みなさまは、ストアドプロシージャのデバックはどうなさっているのでしょうか??
ありがとうございます 質問したいことは「アプリ側の言語が一択決め打ちで、DBの選択が変わる可能性があるのになぜわざわざRDBMS側に処理を持たせようとしようとするのか?」です 問題の一つにDB(特にオラクル)の値段が高いからです。これから先の将来、より安く(つまりタダ)、高性能なRDBMSが出てくれば、営業側からのコスト圧で乗換える可能性が出てくるでしょう。その時、せっせと蓄えたストアドプロシージャの遺産はパァーです 一方、アプリ側のアプリはプログラマ自身の乗換えのコストが高いので、アプリ側の言語が煩雑に変わることはありません 特に質問の意図は 「ストアドプロシージャのデバックをどうするか?」です SQL自体は百歩譲って互換性がある(?)としても、この筆者の主張は「ストアドプロシージャに依存せよ」です。そりゃJOINバラして、いっこいっこ追っていけば、バグ発見できますよ。でもそんなのシェルスクリプトレベルのデバックですよね IDE側が進み、単体テストでさえ簡単に切出せるようになっているのに、なぜ貧弱なデバック環境で、しかも他DBと互換性のないストアドプロシージャ押しなのか、解せません