step04 実習:複数のテーブルからなるDBの設計
なぜ複数のテーブルが必要になるのか
step03では、単一のテーブル(からなるDB)をいくつか設計した。いくつかのテーマで、現実世界の事柄をテーブルの形で表現できることを確かめた。
だがテーマによっては、うまく表現できたとは言いにくいものもあった。たとえば、付せんDBに1レコードを追加するのには、本に1枚の付せんを貼るのにくらべて10倍くらいの手間と時間を食いそうだ。データベースに限らずICTは、省力化の手段であるはずなのに、逆に手間が増えるなんて、一体どうしたことだ?
その理由は、現実の付せんを貼るときにはしない作業がテーブルへのレコード追加に含まれていることにある。本のタイトルや著者を書くとか。これは本来、どの本かが分かれば不要な作業である。だが、単一テーブルしか使えない場合は、どうしようもない。
そう考えてくると、テーマによっては、複数のテーブルにデータを分散して格納し、テーブル間をリレーションシップで関連づける形式にする方が便利なことがわかる。付せんの場合は、本の書誌情報は蔵書テーブルに任せて、付せんテーブルからはそれを参照すればよい。こうすることで、付せんデータ追加の手間が劇的に削減されるばかりか、データ内容の重複が減り、1つのデータは1カ所に格納できる。これは、データベース設計の大原則(Grand Principle)なので、改めて以下に掲げておこう。
GP1. 1つのデータは、1つのテーブルの、1つのフィールドにのみ格納する。
1 fact in 1place.
リレーションシップと参照整合性
リレーションシップとは、複数のテーブルのフィールド間の関連のことである。同じテーブルの異なるフィールドにリレーションシップを張ることもある。RDBに限らず、一般的に捉えたデータ間のリレーションシップには、以下の3種類がある。
- 1対1(1:1)のリレーションシップ
- たとえば、学生の名簿と成績表は、レコードが必ず1対1に対応する。この場合、複数テーブルに分けるより、1つのテーブルに格納するのが普通である。
- 1対多(1:n)のリレーションシップ
- 1冊の本には複数の付せんを貼れるが、1枚の付せんを複数の本には貼れない。このとき、本を1側、付せんを多側(n側)として、1対多のリレーションを張る。一般にRDBにおけるリレーションシップは、特別な場合に使われる1対1と、この1対多の2種類だけである。
- 多対多(n:n)のリレーションシップ
- 学生と履修科目の関係がこれにあたる。図4-1に示す通り、1人の学生は複数の科目を履修でき、1科目は複数の学生によって履修される。したがって、2つのテーブル間のレコードの対応は、図のように入り乱れる。RDBでは、フィールドの値として集合値(複数の値の列挙)を認めないので、こうしたリレーションシップを直接表現できない。これは、履修といった中間テーブルを作ることで解決できる。

単一のテーブルでは、データの誤記などにより不整合が生ずるが、複数テーブルの場合、個々のテーブルに間違いが無くても、参照関係に基づいて不整合が起きる場合がある。これを図4-2に示す。

テーブル間に関連があることを、Accessの機能(リレーションシップと主キー)で設定・通知してやると、それに基づいて、参照整合性に関わるチェックや自動的修正などのサービスが受けられる。複雑なデータベースになると、これを自分でチェックするのは至難の技といってよく、これらの機能は極めてありがたい、つまり神機能である。

演習:複数のテーブルからなるデータベース(のテーブル)設計
つぎの2つの題材について、複数のテーブルからなるデータベースを設計してみよう。
- 実習1の蔵書カードと付せんを関連づけた2テーブルのデータベース
- 学生名簿テーブルと科目一覧表テーブルからなるデータベース(このリンクからダウンロードすること)を、履修登録の情報(どの学生がどの科目の履修を登録したか)を管理するために拡張してみよ
テーブル設計のまとめ
以上、3stepにわたって、みっちりとテーブル設計の基本を学んだ。それは、実世界の、扱いたいテーマを見て、そのデータを格納する適切な入れ物を考えるという、データベース化作業のすべてが、テーブル設計に集約されているからである。
データベースの基本を学び、自分の知的生産活動に必要なデータベースを作成・活用できるようになれば、ICTの利用スキルは大きく向上したといえる。
本格的な情報システムで利用されるデータベースを設計するには、性能やセキュリティのことも徹底して考えねばならないが、たかだか数万レコードを格納する個人用DBなら、MS Accessで気軽に作り、活用できる。使っているうちに、クエリの実行性能などに不満を覚えたら、改めてインデックスの付与など、高度な機能を習得すればよい。
課題レポートを挟んで、step06では、教科書を用い、4つのデータベース・オブジェクト(テーブル、クエリ、フォーム、レポート)をすべて含むデータベースを完成させて、MS Accessの機能を一通り習得することにしよう。