データベース千夜一夜第18回

データベース側での関連付け
~ビューとダイアグラムの利用
長谷川裕行
有限会社 手國堂

ビュー

ビューはSELECT命令によるSQLをデータベースの側に保存したもので、複数のアプリケーションから再利用できるメリットがあります。


- 商品の在庫数を一覧表示する -

例えば「商品マスターから商品名と仕入単価、仕入先マスターから仕入先名、在庫マスターから在庫数──をそれぞれ抽出し、在庫の少ない順に一覧表示する」処理をSQLで記述すると以下のようになります。

このSQLは本コラムの第11回「テーブルの関連付け(1)~SQLによるリレーションの基本」で紹介したものと同じです。処理結果は画面1のようになります。

SELECT   商品_mr.商品ID, 商品_mr.品名, 商品_mr.仕入単価,
商品_mr.仕入先ID, 仕入先_mr.仕入先名, 在庫_mr.在庫
FROM 商品_mr, 仕入先_mr, 在庫_mr
WHERE 商品_mr.仕入先ID = 仕入先_mr.仕入先ID
AND
商品_mr.商品ID = 在庫_mr.商品ID
ORDER BY 在庫



- 在庫一覧をビューにする -

在庫数の確認は、おそらくあちこちの処理で必要になるでしょう。例えば販売や受注だけではなく、在庫管理はもちろん経営レベルでの検討資料などにも使われます。そのような場合、このSQLを各アプリケーションで個別に記述して発行するのは無駄な作業と言えます。ビューを作成してデータベースの側に保存しておけば、複数のアプリケーションから共通したSQLを利用できます。

ビューの実体は、SELECT命令を使ったSQL文に名前を付け、データベースの側に保存したものです。EnterpriseManagerでは、テーブルのフィールドリストからグリッドにマウスでフィールドをドラッグし、条件を入力して簡単に作成できます。このとき単一のテーブルだけではなく、複数のテーブルを指定してそれらを関連付ければ、リレーションの設定が行えます。

先の「商品テーブルと仕入先テーブル、在庫テーブルなどを関連付け、商品の仕入先や在庫数を在庫数の少ないものから順に並べて表示する」SQLを「vw在庫一覧」(“vw”はビューを示す接頭記号)というビューにしてみましょう。



- ビューのデザイン -

ビューを作成するにはEnterpriseManagerでデータベースを選択し、「ビュー」を選んでメニューから「操作」→「新規ビュー」を選択します。

デザイン画面最上部のグレーの箇所は、テーブルのフィールドリストを表示する部分です。右クリックでコンテキストメニューを表示し、「テーブルの追加」を選択して必要なテーブル(例では、商品_mr、仕入先_mr、在庫_mr)を追加していきます。

サンプルでは、デザイン画面最上部のテーブルは後述するダイアグラムによって既に関連付けられているため、テーブルを追加すると自動的にフィールド同士の結合線が描かれます。ダイアグラムによる関連付けをしていない場合は、テーブルからテーブルへとフィールドをドラッグして重ねれば、関連付けがなされます。

上部のフィールドリストから表示したいフィールドを下部のグリッドにドラッグすることで、ビューに表示したい項目が決まります。データベースソフトのAccessを使ったことのある人なら、この作業がAccessのクエリのデザインとよく似ていることに気付くでしょう(ビューはAccessの選択クエリとほぼ同等です)。

さらにその下には、マウス操作によって組み立てられたビューの実体であるSQLが表示されていきます。その内容は、先に紹介したSQLと基本的には同じです。

一番下にはビューの処理結果が表示されるので、結果を確認しながらデザインできます。



- アプリケーションから利用する -

作成したビューは、データベース内のテーブルと同じように扱えます。従って、アプリケーションからテーブルを開いて全レコードを取得するのと同じ要領で、ビューを開くことができます。

・テーブル「商品mr」の内容を抽出するSQL
 SELECT * FROM 商品mr

・ビュー「vw在庫一覧」の内容を抽出するSQL
 SELECT * FROM vw在庫一覧

このSQLをクエリアナライザで実行すると、画面4のようになります。先に紹介した複雑なSQL(画面1)と結果はまったく同じです。



- ビューの結果をさらに絞り込む -

ビューはテーブルと同じように扱えるため、ビューの結果に対してさらにSELECT命令で条件を与え、ビューによる抽出結果をさらに絞り込んだり、並べ替えの基準を変更したりできます。

以下のSQLは、ビュー「vw在庫一覧」から品名・仕入先名・在庫の3つのフィールドだけを取り出し、レコードを「仕入先ID」の順に並べ替えるものです。

SELECT 品名, 仕入先名, 在庫 FROM vw在庫一覧 ORDER BY 仕入先ID

ビューの結果自体が「在庫の少ない順」に並べ替えられているので、それをさらに「仕入先ID」の順に並べ替えると、レコードは「仕入先IDごとにまとめられた上で、在庫の少ない順」に並べられます。


参考までに、サンプルのデータベース「db1001ya」に含まれているビュー「vw売上明細」のデザインと結果を掲げておきます。

これは、テーブル「売上明細」とテーブル「商品_mr」を関連付けて、販売(受注)情報を具体的に示すためのビューです。




- クエリファイル -

クエリアナライザで作成できるクエリファイルも、ビューと似た機能を提供します。SQLを記述した拡張子.sqlのテキストファイルで、本コラムのサンプルとして何度も紹介してきました(今回もいくつかサンプルとして紹介しました)。

ビューはSELECT命令によるレコードの選択(抽出と並べ替え)をデータベース内のオブジェクトとして格納したものですが、クエリファイルではSELECT命令以外にINSERT TO、DELETE、UPDATEなど、データベースに変更を加えるSQLも記述できます。また、ビューはデータベース内のオブジェクトとしてテーブルなどと同等に扱われますが、クエリはデータベースとは別に存在する単独のテキストファイルです。

アプリケーションから利用する場合も、ADO.NETのオブジェクトに対しては単なる「SQLを記述したテキストファイル」として扱われます。



トップページ
ビューとダイアグラム
ビュー
商品の在庫数を一覧表示する
在庫一覧をビューにする
ビューのデザイン
アプリケーションから利用する
ビューの結果をさらに絞り込む
クエリファイル
ダイアグラム
リレーションシップの設定
定着時期の問題
あとがき
Copyright © MESCIUS inc. All rights reserved.