ビューとインデックス

(2005.11.29更新)

先週に引き続き、SQLServerで実習を行う。

今回SQLサーバに接続するための ID と パスワード は、 先回用いたものと同じものである。


ビュー
 VIEW = 仮想表

1つあるいは幾つかのテーブルを組み合わせてSELECT文で作成した一時的な表のことをビューと呼ぶ。

データベースで実際にレコードを記録するテーブルを実表と呼ぶ。
ビューは実表からselect文で作成された仮想表である。

上記は、
 2つの実表を、 商品番号フィールドで結合して、1つの表にした
例である。

ビューの作成方法:

Accessでは、いつもの手順どおり選択クエリーを作成すればよい。 選択クエリーは、SQLのSelectを実行するクエリーである。つまり、選択クエリーを実行したときに表示される表がビューに相当する。
クエリーによるビューに名前を与え、他のクエリからテーブルとして参照することが出来る。
Accessでは、選択クエリーに付けた名前がビューの名前になり、他のクエリーからその名前で参照できるようになる。

SQLServerでビューに名前を付けて保存しておくには、以下の構文を用いる。

 CREATE VIEW ビューの名前 (表示項目,....) AS SELECT文

AS以下には以前に解説したSELECT文を書くことが出来る。
()の部分は、AS以下のSELECTの実行の結果、得られる表に()内で指定したフィールド名を付け直して、新たなフィールド名を与える為の項目である。


ビューの参照:

select や delet や update などで、FROMキーワードで表名を指定する代わりに、ビューを指定することができる。


ビューの必要性

データベースの利用時に実際に表示したり印刷する表は、実はビューである場合が多い。
では、なぜ、ビューをテーブル(実表)として最初からDBMSに用意しないのだろうか?
ビューは次のような場合に必要となる。

 ・テーブルの正規化により分割されたテーブルを元のテーブルに戻るように結合して表示する
 ・テーブルを利用者の用途に応じて必要な部分だけ表示する

もし、データベースマネジメントシステム(DBMS)中に、予め必要となるテーブルを実表として全て用意しておくと、データの重複を生じ無駄であるばかりでなくデータの追加・更新・削除においても非常に手間を生じる。
そこで、DBMS中には必要最小限の実表だけを用意し、実表以外のテーブルが必要な場合はビューとしてその都度クエリーで実表から組み立てなおして表示する方が良い解決法となる。
このように、利用時とデータの格納時で別々にデータを扱うために考案されたのが、3層スキーマと呼ばれるDBMSの構造である。

3層スキーマ構造:
DBMSを設計する際の基本的概念。DBMSを運用する際には、各スキーマ間で独立性が保たれていることが望ましい。

(ユーザー側) 外部スキーマ(ビュー 概念スキーマ
RDBMSでは、テーブルとリレーション
内部スキーマ (ハードウェア側)
職員:履修登録(記録・修正

学生:自分の成績表(表示のみ

教員:担当科目成績表(記録・修正
開講科目表(科目ID、担当者、開講日時、教室)
科目表(科目ID、科目名、単位数、種別)
学籍簿(学籍番号、氏名)
履修表(履修時期、科目ID、担当者、学籍番号、成績)
教員表(氏名、所属、研究室)
ディスクドライブ
ファイル
ネットワーク

セキュリティ
バックアップ

検索システム(インデックス)

各スキーマの独立性が高い場合、以下の利点がある。
 ・データベースの設計者は、DBMSがどの様なプログラムから出来ているか(内部スキーマ)、言い換えればDBMSのソフトの種類によらず、データベースを構築できる。
   ⇒上の表でいうと、RDBMSであれば、どのDBMSを利用してもテーブルとリレーションという概念でデータベースを設計できる。
 ・データベースの利用者は、どの様にデータベースが表現されているか(概念スキーマ)を意識せずにデータベースを利用できる。
   ⇒上の表でいうと、ユーザはクエリーで予め用意されたビューを利用するだけでよく、テーブルの構造を意識しなくて済む。

例)
MS-ACCESSで製作された成績処理DBMSがWindowsマシンのC:ドライブに存在するとする。


演習課題1:

SQLサーバに接続し、以下を行う。


SQLサーバーの利用2

演習室PCとは別の場所にあるSQLサーバにネットワークで接続し、サーバー上のデータベースで共同作業を行う。


インデックス

インデックス機能は、例えて言うと、データベース中のデータに見出し(目次)を付け、データの検索効率を上げるような仕組みのこと。

データベースには、大量のデータを効率よく処理するために、データの検索を高速で行う仕組みが必要である。
データ検索の高度なアルゴリズムを利用できるようにあらかじめDBMSにはインデックスと呼ばれる機能が用意されている。
データベースの設計者は、このアルゴリズムそのものを理解していなくても、処理の効率化を図るためにインデックスを利用することができる。

テーブルのフィールドに対してインデックスを設定すると、検索などの効率を上げることができる。

データ検索アルゴリズムについて

解説ページを用意したので時間があるときに参照しておくこと。


演習課題2:

SQLサーバに接続し、インデックスを設定した場合の効果を確認する。

インデックス利用上の方針:

・ 単なるデータ記録用のテーブルには、データベースはインデックスを必要としない。
データの検索や並べ替えに利用しないフィールドについて、インデックスを作成しても無駄(インデックスの作成と構造の再編の負荷が増すだけ)だからである。

・ ある程度の規模のテーブルの、頻繁に参照されるフィールドに対してインデックスを設定すると処理の効率が改善される。


SQLサーバーの利用2(つづき)

STUDENT表のIDフィールドにINDEXを設定することで、IDを利用したデータベースの処理効率が改善される。


ここまでで製作したデータ数ではインデックスの効果を測定するには少なすぎるので、大量のデータに対して処理を行わせてindexの効果を測定してみる。
処理内容:
・20000個のデータの処理にかかる時間の計測

ここまでで演習は終了です。