矢沢久雄 グレープシティ アドバイザリースタッフ

今回のキーワード
・データベース・エンジン
・データベース・オブジェクト
・ストアド・プロシジャ

 連載の最終回となる今回は,スタンドアロンのアプリケーションを例に,実際のデータベース・アプリケーション開発において,どのような場面でSQLが利用されるかを説明します。

 スタンドアロンのアプリケーションを作成する際には,Accessのデータベース(*.mbdファイル)をVisual Basic(VB)で作成したアプリケーションから操作するというスタイルがよく使われます。VBは,データベース・アプリケーションを容易に作成するのに適した開発ルールだと言えます。なぜなら,データベースを操作するためのデータ・アクセス・オブジェクト(Data Access Objects:DAO)と呼ばれるソフトウエア部品(コンポーネント)を標準で持っているからです。DAOがどういったものであるかは,本文をお読みいただければわかります。実際にプログラミングにかかわらない人も,「開発の現場ではこんなことをやっているのか」ということを知っておいてください。

データベースの設計と作成

 アプリケーション開発の最初の工程として,データベースの設計を行います。データベースの設計では,アプリケーションのユーザー・インタフェース(画面)のデザインや,アプリケーションの処理内容(プログラム内容)を決めます。開発者は,「このアプリケーションを使うユーザーは,どのような情報を知りたいのか?」ということに注目し,必要なデータ(列の候補)を洗い出し,それを無駄のない形で複数のテーブルに整理し,リレーショナル・データベースを設計しなければなりません。

図1●ER図の例
 データベースの設計結果は,テーブルの定義とテーブル間の関係を表す「ER図(ER=Entitiy Relatonship)」という書式で記述するのが一般的です。ER図は,第2回「SQLの基礎(2)---SQLのデータ型はDBMSに依存する」で説明したデータベースの概念スキーマを図示するものだと言えます。図1[拡大表示]に,前回の連載で使った「名刺テーブル」と「趣味テーブル」を持ったデータベースのER図の例を示します。テーブル間の関連を直線で結び,その両端に対応する行の数を添えます。nと1は,n:1(多:1)の関係にあることを示しています。

 データベースの作成(テーブルの定義やリレーションの設定などを行ってデータ・ファイルを作成すること)は,DBMSが提供するビジュアルなツールを使って行います。ここでは,直接SQLの知識は不要です。データベースの設計図があれば,機械的にできる作業だからです。

データベース・エンジンとデータベース・オブジェクト

 データベースを作成したら,次はデータベースを操作するアプリケーションを作成します。これまでの連載で,手作業でSQL文をDBMSを送っていた処理を,分かりやすいユーザー・インタフェースを持ったアプリケーションで実現するのです。例えば,画面上の[更新]ボタンをクリックすると,UPDATE文が実行されるような処理を,プログラムで記述します。

図2●データベース・エンジンとデータ・アクセス・オブジェクトの役割
 VBを使ってデータベース・アプリケーションを作成する場合には,対象となるDBMSの種類に合った「データベース・エンジン」と「データ・アクセス・オブジェクト(DAO)」が必要となります。これらは,皆さんが作成するアプリケーションとDBMSの間に入って,プログラムを簡単に記述できるようにしてくれるものです。最新バージョンのVB 6.0で使われるデータベース・エンジンは,「OLE DBプロバイダ」と呼ばれるものです。OLE DBプロバイダ用のDAOは,「ADO(ActiveX Data Objects)」と呼ばれます。これは,実際にはWindowsにインストールされた*.dllファイルとなっています(図2[拡大表示])。

 図2を見ていただければ分かるように,VBで作成されたアプリケーションは,2クッション置いてDBMSにたどりつくようになっています。これでは,パフォーマンスが低下してしまうことは事実ですが,大きなメリットもあります。それは,2クッションによってDBMSの種類の違いが吸収されるので,開発者は,ADOの使い方だけマスターすれば,あらゆるDBMSを使えるということです。

 OLE DBプロバイダは,DBMSの種類ごとに専用のものが必要になりますが,その違いをADOが吸収し,アプリケーションのプログラマには,同じ手順でAccessでもSQL ServerでもOralceでもあらゆる種類のDBMSの操作を可能にしてくれます。実に上手くできていますね。

 VBを使ってプログラミングするプログラマは,ADOを使うことでDBMSを操作することになるわけですが,この場合にSQLの知識は必要なのでしょうか?答えは,YESともNOとも言えます。「ちょっとだけ必要」もしくは「知っていることが望ましい」という感じです。

図3●VBで作成されたデータベース・アプリケーションの例

ADOを使ったプログラミング

 プログラミングの世界で「オブジェクト」と呼ばれるものは,特定の目的を実現するためのデータと命令の集合体です。オブジェクトとは,プログラムの部品となるものだと考えることもできます。ADOは,データベースを操作するための部品です。

 VBは,ADO以外にもさまざまなオブジェクトを添付していて,プラモデルのように部品を組み合せて,アプリケーションを簡単に作成できるようになっています。図3[拡大表示]は,前回作成したデータベース(Meisi.mdb)のMeisiTblテーブルを読み出すアプリケーションをVBを使って作成したものです。もちろんADOを使っています。アプリケーションの作成時間は,わずか5分程度でした。

 このアプリケーションでは,[取得]ボタンをクリックすることで,MeisiTblテーブル内容がテキスト・ボックスに表示されます。SQL文なら,“SELECT * FROM MeisiTbl;”と記述するところですが,VBのプログラムでは,どうなっているのでしょう(リスト1)。

Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset

Private Sub cmdSelect_Click()
 con.ConnectionString = _
 "Provider=Microsoft.Jet.OLEDB.4.0;" & _
 " Data Source=Meisi.mdb;Persist Security Info=False"
 con.Open
 Set rst = New ADODB.Recordset
 rst.Open "SELECT * FROM MeisiTbl",con

 rst.MoveFirst
 txtShimei.Text = rst.Fields(2)
 txtJusho.Text = rst.Fields(3)
 txtNenrei.Text = rst.Fields(4)

 rst.Close
 con.Close
End Sub
リスト1●ADOを使ってデータベースを操作するプログラムの例

 この連載は,VBがテーマではありませんので,リスト1の内容を理解する必要などありません。ただし10行目(赤色の部分)で,SQLのSELECT文が使われていることがわかります。すなわち,SQLの知識が必要なのです。

 それでは,挿入,更新,削除を行う場合は,どうなるのでしょう?ADOでは,リスト2に示した命令を使います。

rst.AddNew
rst.Update
rst.Delete
リスト2●挿入,更新,削除を行うADOの命令

 上から順に挿入,更新,削除を行う命令です。今度は,SQL文など一切使われていません。ADOの命令(AddNew,Update,Delete)を使うことで,ADOが内部的にSQL文を自動的に生成してくれると考えてください。すなわち,SQLの知識が不要なのです。「ちょっとだけ必要」もしくは「知っていることが望ましい」というイメージが分かっていただけたでしょうか。

ストアド・プロシジャ

 SQL ServerやOracleなどのデータベース・サーバーとなるDBMSを利用するクライアント/サーバー形式のデータベース・アプリケーションでは,「ストアド・プロシジャ」が使われることがよくあります。ストアド・プロシジャとは,SQL文とプログラムを組み合せたものをDBMSが管理するデータベースに登録しておき,その名前を指定して呼び出すことで,効率的にデータベースの操作を実現するものです。リスト3にストアド・プロシジャの例を示しておきます(これは,SQL Serverのサンプル・データベースのストアド・プロシジャです)。

CREATE PROCEDURE SalesByCategory
  @CategoryName nvarchar(15),@OrdYear nvarchar(4) = '1998'
AS
IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998'
BEGIN
  SELECT @OrdYear = '1998'
END
リスト3●ストアド・プロシジャの例

 ここでは,リスト3の内容を理解する必要はありませんが,部分的にSQLが使われていることはお分かりですね。ストアド・プロシジャを作成するには,SQLの知識が必須なのです。

 スロアド・プロシジャを利用するアプリケーション開発者には,生のSQLが見えないので,SQLの知識は不要かもしれません。ただし,一般的には「ストアド・プロシジャの作成者=アプリケーションの開発者」という状況も多いはずですから,アプリケーション開発者であってもSQLをマスターしておくべきでしょう。いやいや,こんなあいまいな結論ではいけません。「中途半端な技術者で終わりたくないら,絶対にSQLの知識は必要だ!」と最後に強調しておきましょう。

 この連載をお読みいただいたことで,SQLとデータベースの基礎知識はバッチリです。データベースやSQLへの興味が深まり,もっともっと勉強したいと思われるなら,実際のDBMS(Access,SQL Server,Oracleなど)をバンバン使ってください。説明を読むだけでは得られない「生きた知識」が得られるはずです。この連載では説明できなかったトランザクション処理やアクセス権の設定を行う手段も調べてください。VBなどのプログラミング言語を使えるなら,「名刺管理システム」や「出張費計算システム」のような手短で実用的なアプリケーションを作ると,さらに理解が深まるでしょう。皆さんには,確固とした基礎知識があります。どうぞ自信を持って取り組んでください。連載を最後までお読みいただき,ありがとうございました。またお会いしましょう!

◎今回の復習
・アプリケーションを開発する前に,にデータベースの設計をする
・「データベース・エンジン」と「データ・アクセス・オブジェクト」は,アプリケーションとDBMSの間に入って,プログラムを簡単に記述できるようにする
・ストアド・プロシジャは,SQL文とプログラムを組み合せたもの。効率的にデータベースを操作できる