Previous: viewとテーブルの違い
Up: View
Next: view での新しい項目名
Previous Page: viewとテーブルの違い

view無しの検索例

今、「百年の孤独」という本が、貸出中であるかを知りたいとしよう。このデータベー スでは、「貸出台帳」には書名が記載されておらず、図書の登録番号がのっているだけ である。登録番号は、図書館に実際にある一つ一つの本に対応しており、一つの本に は、一つだけ割り当てられている書籍番号とは区別されている。もしも、同じ本 が三冊図書館に入っていれば、この三冊は、書籍番号は同一だが、登録番号は、 それぞれ異なる番号が割り当てられることになる。この書籍番号と登録番号の対 応表が、「蔵書台帳」である。書名と書籍番号との対応は、テーブル「書籍台帳 」に与えられている。 要するに、具体的な書名から、それが貸出中であるかを調べるためには、三つのテーブ ルを検索する必要がでてくるのである。以下に、ジョインを使った検索例を 示す。

例 81: 貸出図書の検索

select 書籍台帳.書籍番号,書名
	from   貸出台帳,蔵書台帳,書籍台帳 
	where  貸出台帳.登録番号 = 蔵書台帳.登録番号
	  and  蔵書台帳.書籍番号 = 書籍台帳.書籍番号
	 and  書名 = "百年の孤独"

もしも、別の本を検索するときには、このselect文を繰り返さなければならないのは、 少しめんどうである。こうした時、viewが使える。

subsectionviewの利用例

例 82: 貸出図書の検索(view)

/* この例は、何冊かが貸出中でも、まだ図書館に本が残っているかも知れない */
/* ので、実用上は、問題がある。                                         */

create view 貸出一覧 as select 書籍台帳.書籍番号,書名 from 貸出台帳,蔵書台帳,書籍台帳 where 貸出台帳.登録番号 = 蔵書台帳.登録番号 and 蔵書台帳.書籍番号 = 書籍台帳.書籍番号

select * from 貸出一覧 where 書名 = "百年の孤独"

select * from 貸出一覧 where 書名 = "チャンピオンたちの朝食"

こうして、viewを使うことによって、データベースの内部のゴチャゴチャを表に出さず に、すっきりした形で、検索を行うことが可能となる。しかも、不用なデータのコピー で資源を無駄にすることもない。また、様々のテーブルの、不用な項目へのアクセスを 制限することで、システムのセキュリティーも向上する。もちろん、viewに対しては、 テーブルに対してと同様に、grant/revoke で、細かな権限設定が可能である。

もう少し、別の例も見てみよう。

例 83: 著者を指定して、その著作をリスト

create view 著作一覧
	as
	select 著者名,書名
	from   著者コード一覧,書籍著者対応表,書籍台帳
	where  著者コード一覧.著者コード = 書籍著者対応表.著者コード
	  and  書籍著者対応表.マスターナンバー = 書籍台帳.マスターナンバー

select * from 著作一覧 where 著者名 = "大江健三郎"

select * from 著作一覧 where 著者名 like "%康隆"

maruyama@wakhok.ac.jp
1995年02月10日 (金) 00時49分16秒 JST