DB の考え方と SQL

どんなことに使われているのか

DataBase (DB) とは、データの管理とその利用を担当するシステムです。
データが多くなるにつれ、高速なデータ検索性能の確保、複数クライアントからの操作時のデータ同期など、さまざまな問題が起こり得ますが、DB はそのあたりを解決してくれます。
以下、データベースの例です。

今回は、以降でデータベースについての考え方と、SQL 構文について説明します。


実際にデータを処理してみよう

リレーショナル DB

本内容では、リレーショナル(表)・データベースを扱います。その名の通り、データを表に格納したイメージでもって扱います。こんな感じです。

学籍番号順にソ−トされたリレ−ショナル タブ区切りのファイル
学籍番号名前所属
2004001あんどう なっつ情報科学
2004002くたに やきもの情報科学
2004101はら へった情報工学
2004102いのうえ はのど情報工学
2004203こうき にゅうがく情報科学
2005001さとう みつこ情報科学
2005002みはま げんば情報科学
2005003とうきょう あきは情報科学

では早速、配付資料1から、以下の条件に該当する情報を検索してみましょう。

.
.
.

できました?

上記の検索を、データベースについての問い合わせ言語である SQL で記述すると、こんな感じになります。データの準備等については、後で紹介します。

ここで「学籍番号が 2004000 〜 2004999、で、情報科学に所属している人の名前の検索」は、まず学籍番号で検索して、その結果から情報科学な人を検索、という方法をとることもできます。


インデックス

では、先の例と同じ検索を、以下に示すリレーションを見ながら行ってみて下さい。

名前でソートされたリレーショナル
名前学籍番号所属
あんどう なっつ2004001情報科学
いのうえ はのど2004102情報工学
くたに やきもの2004002情報科学
こうき にゅうがく2004203情報科学
さとう みつこ2005001情報科学
とうきょう あきは2005003情報科学
はら へった2004101情報工学
みはま げんば2005002情報科学

今回のリレーションでは、名前順に人を検索する操作が簡単になったのと思います。そのかわり、学籍番号についての検索はかなり面倒になりました。
このように、同じデータでも管理状態によって、検索しやすい、しにくい場合があります。これは、実際のデータベースでは、応答時間といった形で現れてきます。

そこで、あるデータベースで、学籍番号が 2004000 〜 2004999 かどうか、といった検索が多く行われると分かっている場合、あらかじめインデックスを作成しておくことができます。この例では、2004000 〜 2004999 の場合を ○ で示します。

名前でソートされたリレーショナル(入学年度のインデックス付き)
 名前学籍番号所属
あんどう なっつ2004001情報科学
いのうえ はのど2004102情報工学
くたに やきもの2004002情報科学
こうき にゅうがく2004203情報科学
 さとう みつこ2005001情報科学
 とうきょう あきは2005003情報科学
はら へった2004101情報工学
 みはま げんば2005002情報科学

実際のデータベースにおいても、どのような検索が多く行われるかを意識しながらデータベースの設計を行うことが大事です。多分。


複数のリレーションを用いた検索

最後に、複数リレーションを用いた検索例を示します。以下のリレーションは、ある講義を申請している学生の学籍番号一覧です。

ある講義を申請した学籍番号のリレーショナル タブ区切りのファイル
受講者の学籍番号
2004001
2004203
2005001
2005002
2005003

では、この講義を受講している学生の名前を検索して下さい。

.
.
.

面倒ですよね...。

人間にやらせると面倒がることも、コンピュータは間違えない限り文句を言いません。なので、早速この問い合わせを実現する SQL を紹介します。 SQL の概略としてはリレーションを連結し、新たに作ったリレーションに対して問い合わせを行っている感じです。順に見ていきましょう。

長いですが、簡単に表現するなら2つのリレーションの総組み合わせです。 これを用いて受講者のリストを作るならば、db1_students の student_id と db1_class の student_id が同じ行にあるデータが、目的の検索結果と同じなります。

リレーション同士の演算は、上記のようなものと、自然結合と呼ばれる演算が一般的です。というか、自然結合の結果が今回の問い合わせの答えになったりします。
自然結合とは、2つのリレーショナルで共通の項目を持つレコード同士を取り出すような感じです。


まぁ、今後はこういったことを、少しずつ説明していきます。


Generated on Mon Apr 13 22:52:06 2009 by  doxygen 1.5.7.1