Previous: viewとテーブルの違い
Up: View
Next: view での新しい項目名
Previous Page: viewとテーブルの違い
今、「百年の孤独」という本が、貸出中であるかを知りたいとしよう。このデータベー スでは、「貸出台帳」には書名が記載されておらず、図書の登録番号がのっているだけ である。登録番号は、図書館に実際にある一つ一つの本に対応しており、一つの本に は、一つだけ割り当てられている書籍番号とは区別されている。もしも、同じ本 が三冊図書館に入っていれば、この三冊は、書籍番号は同一だが、登録番号は、 それぞれ異なる番号が割り当てられることになる。この書籍番号と登録番号の対 応表が、「蔵書台帳」である。書名と書籍番号との対応は、テーブル「書籍台帳 」に与えられている。 要するに、具体的な書名から、それが貸出中であるかを調べるためには、三つのテーブ ルを検索する必要がでてくるのである。以下に、ジョインを使った検索例を 示す。
select 書籍台帳.書籍番号,書名 from 貸出台帳,蔵書台帳,書籍台帳 where 貸出台帳.登録番号 = 蔵書台帳.登録番号 and 蔵書台帳.書籍番号 = 書籍台帳.書籍番号 and 書名 = "百年の孤独"
もしも、別の本を検索するときには、このselect文を繰り返さなければならないのは、 少しめんどうである。こうした時、viewが使える。
subsectionviewの利用例
/* この例は、何冊かが貸出中でも、まだ図書館に本が残っているかも知れない */ /* ので、実用上は、問題がある。 */create view 貸出一覧 as select 書籍台帳.書籍番号,書名 from 貸出台帳,蔵書台帳,書籍台帳 where 貸出台帳.登録番号 = 蔵書台帳.登録番号 and 蔵書台帳.書籍番号 = 書籍台帳.書籍番号
select * from 貸出一覧 where 書名 = "百年の孤独"
select * from 貸出一覧 where 書名 = "チャンピオンたちの朝食"
こうして、viewを使うことによって、データベースの内部のゴチャゴチャを表に出さず に、すっきりした形で、検索を行うことが可能となる。しかも、不用なデータのコピー で資源を無駄にすることもない。また、様々のテーブルの、不用な項目へのアクセスを 制限することで、システムのセキュリティーも向上する。もちろん、viewに対しては、 テーブルに対してと同様に、grant/revoke で、細かな権限設定が可能である。
もう少し、別の例も見てみよう。
create view 著作一覧 as select 著者名,書名 from 著者コード一覧,書籍著者対応表,書籍台帳 where 著者コード一覧.著者コード = 書籍著者対応表.著者コード and 書籍著者対応表.マスターナンバー = 書籍台帳.マスターナンバーselect * from 著作一覧 where 著者名 = "大江健三郎"
select * from 著作一覧 where 著者名 like "%康隆"
maruyama@wakhok.ac.jp