RDBMS設計のポイント〜First[Oracle]Contact〜Visual BasicとOracle7

VBプログラマのためのOracle/RDBMS集中講座

福岡寿和 FUKUOKA, Toshikazu 


Oracle7の最初のリリースが発売されてから5年近く経ちました.その間に,UNIXでのみ動作していたOracle7は,Windows NT Server/WorkstationそしてWindows95で稼動するようになり,パーソナルユースから企業の基幹系まで同一アーキテクチャのRDBMSラインナップを完成させました.OracleがRDBMS稼働対象プラットフォームとしてWindowsを選択したことによって,Microsoft SQL ServerシリーズとOracle7 Workgroup Serverシリーズというライバル関係が発生し,お互いに切磋琢磨して,機能や速度,コストパフォーマンスが年々向上する結果となりました.しかし,このことは一方で,開発者がRDBMSの機能を理解して十分活用する前に,どんどんと新機能が追加されることに繋がってしまいました.
今回,オブジェクト指向RDBMSといわれているOracle8シリーズが新発売されるにあたり,Oracle8の新機能を理解してゆくためには,Oracle7の機能を再整理するとともにRDBMSとはどのようなものかを理解しておく必要があると考えました.あわせて,Visual Basic 5.0を使ってOracle7のさまざまな機能を使う方法を探ることにより,Oracle7とVisual Basicを使ったクライアント/サーバーシステムの構築で陥りやすい問題点も探りたいと思います.なお,サンプルプログラムについては,Oracle8 Server Enterprise Edition Final Beta版で動作確認済みです.また,Visual Basic 4.0での開発も考慮して,一部のサンプルではVisual Basic 4.0用とVisual Basic 5.0の両方を用意しています.

 さて,一般にデータベースの構造には,
・ISAM(索引順アクセス方式:AccessのMDBなど)
・NDB(ネットワークデータベース方式:おもにホストコンピュータで普及)
・RDBMS(リレーショナルデータベース方式)
・OODBMS(オブジェクト指向データベース方式)
などがあります.しかし,現在ではデータベースといえばRDBMS,というほどRDBMSが普及しています.これは,メーカーごとに差異があるとはいえ,RDBMSはSQLという標準言語により操作可能な点が大きいと思います.SQLさえ覚えれば,とりあえずRDBMS上のデータを何らかの形で検索して取得できる垣根の低さがあるわけです.しかし,RDBMSを有効に活用するためには,どのようなRDBMS製品でも共通に乗り越えなければならない問題や製品ごとに異なる諸問題を解決しておかなければなりません.そのためにも,きちんとした設計とRDBMSに合わせたミドルウェアの選択が必要不可欠です.


I RDBMS設計のポイント

設計工程1
-現状分析からあるべき姿を設計する-

 Visual BasicなどのRADツール(作りながら設計してゆく)がWindowsプログラムの主流になったために,スパイラルフロー(メイク・アンド・トライ)型の開発スタイルが流行になっています.しかし,RDBMSの設計に関しては,従来のウォーターフォール型の設計を行なう必要があると感じています.つまり,RDBMSを使ったシステムでは,その上に実装されるデータ構造の善し悪しがシステム開発の成否を握っていると思うからです.
 では,よいデータ構造はどのように設計したら実現できるのでしょうか.

設計工程2
-あるべき姿の追求(正規化)-

 現実世界の情報を任意の単位にまとめただけでは,効率的なデータ構造を作ることはできません.それは,人の目に触れる情報が人が理解しやすい形で加工されているからです.しかし,人が理解しやすい形が必ずしもRDBMSを効率的に使う形であるとは限りません.たとえば,発注書は,「発注」という側面に注目した情報の固まりです.発注したものがひとつであったり,一度で納品できればよいのですが,現実的ではないため,納品時には納品書という別の側面に注目した伝票が発生しています.このように同じ情報をその情報を見る側面ごとにRDBMSに格納すると,2つの情報間でデータのコピーが頻繁に発生したり,「未納品の製品は?」といった新たな側面で情報を取得するのが難しいデータ構造ができあがります.これでは,RDBMSを使ったシステムをわざわざ導入する意味がありません.設計時にすら気が付かなかった切り口で情報を分析できることがRDBMSの利点のひとつですから,その利点を生かすようなデータ構造に設計する必要があると思います.そのような設計を助ける手法が正規化であり,システムモデリングのフェーズでER図を使って作業します.
 正規化には第一正規化から第三正規化まであって,すべての正規化が完了した第三正規形の表では,データ項目の冗長性(無駄な部分)がまったくありません.つまり,無駄なデータコピーなどが発生することが不可能な状態になります(図4).

設計工程3
-あるべき姿をRDBMS上に表現する-




II First[Oracle]Contact

Oracle7の製品系列

 さて,RDBMS一般に関する解説はひとまずおいて,そろそろOracleに特化した話題にうつりましょう.OSとOracle7 R7.3製品系列を図6にまとめました.Oracle7シリーズは,オプションや最新機能の一部を除いて,同一のアーキテクチャを採用していますので,テーブル定義を同一にしておけば,Personal Oracle7と接続していたソフトをOracle7 Serverと接続して使うなどといったことも可能です.
 ところで,Visual Basicなどのマイクロソフト製品になれた人は,ソフトウェア製品の識別にバージョン番号を使いますが,Oracleはリリース番号を使います.そして,通常,先頭の2つが仕様ごとの番号になります.ですから,R7.2とR7.3では機能面でかなりの違いが見られるので,箱や広告などにもこの2つの番号までを記載しています.しかし,内部的にはさらに2つの番号を付加して,R7.3.2.3のように表記し,バグフィックスや機能制限の種類などをあらわしています.Oracle7を使ったアプリケーションを作るときに,開発環境と実行環境を同一にするためには,この4桁の番号まで(さらにオプションソフトウェアの導入状況まで)意識した方がよいでしょう.
 さらに,混乱が生じてしまうと思われるのは,いままで説明してきたリリース番号は,製品パッケージに対する識別番号で,パッケージに含まれるそれぞれのソフトウェアには,おなじみのバージョン番号が使われている点でしょう.たとえば,Personal Oracle7 R7.3.2.3のデータベースエンジンは,Oracle7 Database V7.3.2.3.1です.そして,同じリリースの製品パッケージでもそこに含まれているソフトウェアのバージョン番号などが異なることがある点です.これでは,かなり煩雑なバージョンの確認が必要になってしまいます.在庫を多く抱えてしまった納入業者を経由して購入したりすると先頭2つのリリース番号は同じでも内容が古いものがきてしまう可能性もあります.この問題をCD-ROMの袋を開けずに簡単に判断する方法はないのでしょうか.実は,箱の裏の標準価格の側に「A46403-1」などと記載されているのが,CD-ROMの版数まで含めた「製品番号」なのです.この最新番号をOracleのWebPageや電話などで確認することで,手元の製品が最新かが判断できます.

Oracle7概要

 Oracle7の動作単位をインスタンスといいます.このインスタンスの構造を知ることが,Oracle7を知ることに繋がると思いますので,少し詳しく説明しておきましょう.
 Oracleインスタンスは,図8のような構成になっていて,その中心的役割をになっているのがシステムグローバル領域(SGA)と呼ばれる共有メモリ領域です.

新規データベースの生成




III Visual BasicとOracle7

ミドルウェアの選定

 では,いよいよOracle7の主な機能を実際に使うために,まずVisual BasicからどのようにOracle7を使ったらよいかの検討に入りたいと思います.本来,SQL*Netもミドルウェアの範疇に入るのですが,現状を考えてみるとTCP/IPとSQL*Netの組み合わせが事実上の標準であるので,この2つについては今回はミドルウェアの範疇からは除外して,SQL*Net ClientとVisual Basicの間に位置する(まさにミドル)ソフトの選択に的を絞ってみたいと思います(図10).なぜなら,ここに位置するソフトウェアは,MicrosoftとOracleという異なるメーカー間の調整役となるもので,システム全体の機能,安定性そしてレスポンスなどを左右するほど重要なものだからです.

図10:ミドルウェアの技術分割図

 図10に記載しているミドルウェアを使うには,以下のような操作を実行します.

Oracle7のパフォーマンスチェック機能

Oracle7の主な特徴

 さて,基本的な使い方とチェックの方法がわかったところで,Oracle7の特徴を把握しておきましょう.RDBMSベンダ最大手のひとつとして,業界標準とみなされる多くの機能がサポートされています.

3階層システムの構築

 Oracle7にはPL/SQLがあるのでビジネスロジックをRDBMS上に格納して,クライアント側のロジックを絞り込んだthinクライアント型の2階層システムが比較的簡単に作成できます.しかし,サーバー側の資源が乏しいなどの理由で大規模なストアドプロシージャを組み込めないときは,Remote OLEやDCOMを使って3階層システムを構築することができます.しかし,RemoteOLEにしてもDCOMにしてもレジストリ管理などが煩雑で,手軽に業務アプリケーションに適用することが難しいのが現状です.そこで,DCOMの基本プロトコルであるUDP/IPプロトコルのみを使って独自プロトコルを作り,3階層システムを構築するのもひとつの手だと思います.

oo4oパフォーマンスチューニング

 それではまとめとして,ここまでに解説したOracle7の特徴を踏まえてoo4oのパフォーマンスを向上させる方法をご紹介しておきましょう.

Oracle8来日

 本号が発売されるころには,Oracle8 Server Enterprise Edition R8.0に引き続き,Oracle8 Server R8.0も発売されていると思います.そして,まもなくPersonal Oracle8 R8.0も発売され,Oracle8シリーズが全製品揃います.
 Oracle7で稼動しているシステムを早急にOracle8に以降する必要はないと思いますが(Oracle7は,R7.4が最終リリースになるそうです),これから開発するものはOracle8を選択した方がよいでしょう.Oracle8はOracle7の上位互換となっていますので,あたかも速度が速くなったOracle7とみなして開発することができます.また,現時点ではOracle8シリーズの特徴のひとつであるオブジェクト型などに対応したCASEツールなどの周辺環境が整っていないので,Oracle8をOracle8として使うよりもOracle7として使ったシステム構築を考慮した方がいいでしょう.つまり,Oracle Disgner/2000 R1.4とOracle Developer/2000 R1.5の次版が発売されるまでは,Oracle8のOracle7互換部分のみを使うのがよいと思います.
 ただ,現在Oracle7 WGS R7.3でパラレルクエリーを使っているときは,Oracle8 Server R8.0では,Oracle8 Server EEとの差別化のために,この機能が削られているので注意が必要です.

最後に

 本稿を執筆するにあたり,「RDBMSの設計工程」に関してご協力頂いた吉野未亜さんにこの場を借りて感謝します.


VB Magazine ライブラリ | Visual Basic WorkGroup
int21 ホームページ | PCDN ホームページ


Copyright (c) 1998 int21 Corporation All Rights Reserved.
For questions or comments, please send mail to: pcdn@int21.co.jp