No.29 98/7/15 リレーショナル・データベースのオブジェクト化


日経バイト1998/6号P139「一人に一つずつデータベース・サーバ」
で、SQL Server 7.0やOracle Lite R3.0など本格的なSQL DBMSと、AccessやParadoxなどパソコン用DBMSとの違いは、次の2点という。

1.ストアド・プロシージャとトリガにより、自立して動くオブジェクトである。
2.トランザクション処理機能を備えている。

この1番はこれまで、ちょっと便利な機能があるという程度で、本質的な違いという認識がなかった。なるほど、これによって、オブジェクト指向的にリレーショナル・データベースを捉えることができる。

考えてみれば、DBのテーブルはC++言語などオブジェクト指向プログラム言語(OOPL)でいうところのクラスにあたるだろう。すると、メンバ関数(すなわちストアド・プロシージャ)を持つことができれば、クラスとしての形が整うわけだ。

現在、Accessで開発することが多いが、確かに関数はフォームに所属させることはできる。
実際に操作をするのはフォームなので、問題ないように思いがちだが、1つのテーブルのデータを複数のフォームで切り口を変えて表示/操作する、いわゆるビューである。だから、同じテーブルに同様の操作を加えるときに、フォームによってやり方が違ってしまうことがあり得る。やはり本来、データの操作手順はデータとセットで持つべき、つまり、テーブルに記述すべきだ。

そして、リレーションシップはオブジェクト指向の概念でいうところの、関連のうちの最も単純な所属を表す。Accessでは、リレーションシップは定義しておくことが可能である。
だが、やはりその他のさまざまな操作=関連を実装するには、メンバ関数が必要になる。

Accessでは、他のフォームの関数をコールするのに、forms!フォーム名.関数名()のようにする。テーブルでも同様にtables!テーブル名.関数名()として呼び出すことができるようにすれば、いいだけなので次期バージョンではそうなることを期待したい。
あと、テーブルのデータを直接変更できないようなprivate属性を指定できるようにすれば、この部分に関しては、まず満足できると思う。

筆者補足

「SQL Server 7.0やOracle Lite R3.0など本格的なSQL DBMSと、AccessやParadoxなどパソコン用DBMSとの違い」として、もっとも基本的な点を書いてなかったので補足しておきます。
複数ユーザで使用するときの共有の仕方が違います。
パソコン用DBMSは、ファイル共有を使用します。そのため、サーバ側には単にデータベースのファイルを置くだけで済みます。そのかわり、処理は全てクライアント側で行うため、データの転送量が多く、ネットワークに負荷をかけるのが欠点です。
一方、SQL DBMSは、クライアント−サーバ方式です。つまり、サーバ側で常にプログラムが動いていてクライアントから要求を受け、サーバ側で処理をして結果だけをクライアントに返します。
もう1点補足。
MicrosoftのACCESSとSQL Serverの比較ですが、ACCESSのデータベースはインターネットで公開してもライセンス料は別にかかりませんが、SQL Serverの方はかなり高額のライセンス料が必要になります。

☆//★//☆//★   アンドロメテック   前田 慎一   ☆//★//☆//★
             TEL (03)5361-7685 FAX (03)5361-7698
       〒160-0004 東京都新宿区四谷4-7 新宿ヒロセビル3F

         http://www.andrometec.com/tomiya/
↑建物プライス算定ソフト「とみやくん」のページを開設しました↑
☆//★//☆//★//☆//★//☆//★//☆//★//☆//★//☆//★//☆//★


アンドロメテックHomepageに戻る