step02 テーブルとクエリ

MS Office Suitという一連のアプリの中で、WordやExcelに比べてAccessの影が薄いのも、データベースには文書という目に見える形がないために、取っ付きづらさを感じるからではないだろうか。
Accessのデータベースは、データベース・ファイルという1つのファイルに格納されているのはWord文書やExcel文書と同じだが、内容はさまざまな種類のデータベース・オブジェクト※1の集合体である。

テーブル(表)
まずはExcelのワークシートのようなものをイメージすればよい。実際のデータを格納するためのオブジェクト
クエリ(問合せ)
1つ以上のテーブルを自在に組み合わせ、結果をやはりテーブルの形式(ダイナセット)として表示するためのオブジェクト。
フォーム
画面上のユーザインタフェース(UI)。テーブルにデータを格納したり、クエリの結果を表示するためのオブジェクト。
レポート
紙上のユーザインタフェース。明細書や一覧表などの帳票を印刷したもの。
下の2つ、フォームとレポートはUIであるから、目に見える形がある。しかし、データベースの構造を決めるのは目に見えない上の2つ、テーブルとクエリであるから、まずはこれらの設計(デザイン)をしっかり習得しよう。

1 step01で解説したオブジェクト・データベースとは関係ない。

テーブル設計

データベースは、一般に図2-1に示す手順で設計する。図中の青い矢印は、後の工程への影響を表している。要するに、先の工程(上流)できちんと設計して、必要なものを作り込んでおけば、後の工程(下流)で余分な作業が発生しなくて楽だということ。もちろん、設計を進めていって、不具合が生じたら、上流工程に戻って修正する。

図2-1: データベース設計の工程

1番の基本となるのが、最初の工程であるテーブル設計である。ここは現実世界(の一部)をテーブルという、人工的な枠組みになんとか押し込んで表現するということだから、日頃からデータ構造についての眼を養っておく必要がある。たとえば広辞苑や、カツカレーや、自転車にもデータ構造はあるし、熟練したプロは、化学プラントや高速道路のジャンクションといった複雑なものも、テーブルの集合として表現できるようになる。
この講座では、続くstep03step04で、それぞれ1つのテーブルの設計と、リレーション(関連)で結ばれた複数のテーブルの設計を実習し、テーブルをいくつも組み合わせることで、どのように複雑な内容でも表現できることを体感してもらう。
クエリ設計については、指定の教科書を用いて、step05の一部として習得してもらう。
テーブル設計は、ふつう、以下の手順で行う。

2 最近の学生さんは、これを当然のことと思っている。私自身の労苦とくらべると、腹立たしいやらうらやましいやらである。

クエリとは

クエリ設計については、前述のように教科書を用いた実習で習得してもらうので、ここではクエリの概念についてだけ解説する。クエリというものがイメージできるようになったら、リレーショナル・データベースについては概ね理解できたと思ってよい。
クエリは日本語で問合せの訳語を充てる。この語が持つ検索の機能も確かに一部ではあるが、クエリ自体は、図2-2に示すように、それよりはるかに広い機能を持っている。

検索だけでなく、並べ替えでもあり、演算・集計でもある。中でも基本となるのは、
選択(図中の青い絵)
テーブルのいくつかのフィールドを選んで、それだけからなる小さなテーブルを作る。この絵は1つのテーブルについてのイメージだが、複数のテーブルを結合して、そこから選択することもできる。
例:学生名簿から、氏名と電話番号だけの表を作る。
抽出(図中の赤い絵)
テーブルの各レコードを抽出条件でテストし、条件に合致するレコードだけからなる小さなテーブルを作る。 例:著者名が「森見登美彦」である本のデータを表示する。
の2つである。
なぜ、クエリという一つの仕組みで、このようにさまざまな機能を持てるのかといえば、実はクエリは、テーブル(表)を自由に組み合わせた、表の数式(演算)として実現されているからである。この考え方を図2-3A/Bに示す。

    A ) テーブルxとyの演算     B ) 演算の連鎖
図2-3: テーブル(表)同士の演算

図のAは、たとえば3 + 5 = 8と同様であり、Bは、たとえば(3 + 5) * 4 = 32と同様だと考えればよい。これらの四則演算式の定義域と地域が整数なのに対し、テーブルの演算ではテーブルであるというだけの違いだ。これがコッドによって発明された、リレーショナル・データベースの基本構想である。
その結果、リレーショナル・データベースにおいては、テーブルとクエリの見分けがつかなくなる事態が起こる。クエリの結果をダイナセットと呼んでテーブルと区別するが、唯一の違いは、ダイナセットは数学的操作の結果表示に過ぎないのに対し、テーブルは現実のデータを格納している点である。