何かおかしい RDBMS の使い方 (2000/09/29)
ここ数年、リレーショナルデータベース(RDBMS)を使用したシステム開発を数多く手がけています。と言っても Oracle を使ったものがほとんどなんですけどね。ですから、とりあえず Oracle に限って話を進めますけど、、、そういうシステムを見てきて、「何かおかしい」と感じてます。それは、Oracle のストアドプロシージャについてです。私はストアドプロシージャを使ってデータの更新を行う手法は当然だと思っているのですが、そうやっているシステムって以外と少ないんです。私がかかわったシステムのうち、有効にストアドプロシージャを使った案件は、今までに3件だけです。じゃあ、ほとんどのシステムはどうやってるかといいますと、OO4O 等を使って接続し、クライアントプログラムでゴリゴリと更新をかけるんですよね。つまり、ビジネスロジックと呼ばれる部分はクライアントに実装してしまうシステムが多いんです。例えば、ある画面で更新しなければならないテーブルが A,B,C と3テーブルあったとしますと、トランザクションを開始して、A を更新、B を更新、C を更新とやってコミットするといった具合です。こういうロジックがクライアントプログラムに実装されているわけです。別にこれでかまわんじゃないかという意見もあるでしょうが、私は非常にナンセンスだと思います。ひとつには実行効率が悪いこと、もうひとつはメンテナンス性に劣ることが理由です。もし、さっきの例を、ストアドプロシージャを使うならば、クライアントプログラムは、入力情報を受け渡すだけで、ロジックはストアドプロシージャに実装します。ストアドプロシージャで、テーブル A,B,C を更新すればよいわけです。通常、テーブル更新する際は様々なロジックが入ります。入力値を元に処理を分岐させなければならなかったり、あるいは他のテーブルからデータをとってこなければならなかったりします。こういったロジックをクライアントに実装するならば、バグがあった場合は、全てのクライアントのプログラムを入れ替えなければなりません。ところが、ストアドプロシージャに実装しておけば、サーバーのみメンテナンスすれば済むはずです。また、実行速度という面でもストアドプロシージャのほうに分があります。複雑な処理になればなるほどその差は歴然としてきます。
せっかく、Oracle にはストアドプロシージャを使える環境があるのに、単なるデータベースとしてのみ使うのはもったいないですよね。Oracle の場合、PL/SQL という言語を使ってストアドプロシージャを作成しますが、ビジネスロジックを組むには十分な能力をもったものです。有効に使えばメリットは大きいと思うのですが、いかんせん、私のかかわった案件では少ないのが現実です。なぜなんでしょうか?
仮説1:私はタコなシステムばかりにかかわっている。
仮説2:世の中が間違っている。(爆笑)
さて、どっちなんでしょう?