今回は、図書館の「貸出履歴」をシステム化する場合を考えてみましょう。
リレーショナルデータベースの学習用に、システムをかなり簡略化しています。
今まで紙の書類で行なっていた業務を、パソコンを使ってシステム化する時、表計算ソフトを使う方法と、データベースソフトを使う方法が考えられます。
例えば Excel のような表計算ソフトでは、以下のようになります。
Excel のメリットは、紙の書類の形式を、そのままパソコン上に表現しやすいことです。そのため初心者でも、比較的簡単に扱うことができます。
Access のようなデータベースソフトでも、上の図のように、一つのテーブルで管理することは出来ます。
しかし、リレーショナルデータベースでは、データは意味のあるグループごとに、テーブルにまとめるのが一般的です。
テーブルにまとめるコツは、「繰り返し入力する可能性のあるものは、別のテーブルに分ける」ということです。
*ただし日付は除く
それでは、実際に行なってみましょう。
【1】今回の例では、利用者の氏名や、書籍のタイトルが、何度も繰り返し入力されています。
何故なら、同じ人が何度も本を借りることがあるし、同じ本が何度も借りられることがあるからです。
【2】そこで、利用者と書籍を、別のテーブルに分けてみましょう。
・利用者
・書籍
【3】すると、貸出を記録するテーブルは、以下のように、数字の並びだけで済むようになります。
・貸出履歴
このような作業を「正規化」と言います。
文字列を入力したり、コピー&ペーストするよりは、数字だけを入力したほうが、入力ミスが減らせます。
また文字列より数字のほうが、ハードディスクに保存する時の容量が少なくて済むというメリットがあります。
【4】貸出履歴テーブルには、利用者CD と書籍CD しかありませんが、必要な時に、他のテーブルを参照することで、データがわかります。
・赤丸 利用者CD が「1」の人は「田中 愛」さんだとわかる。
・青丸 書籍CD が「3」の本は「村上式シンプル英語勉強法」だとわかる。
【5】また、複数のテーブルから、目的に合わせて、仮想テーブルを作成することもできます。
このように、リレーショナルデータベースでは、関連するデータごとにテーブルに分けて、必要な時に組み立てて利用します。
一見、表計算ソフトより複雑ですが、扱うデータ数が多くなるほど、データベースのメリットが出てきます。
【解説】
(1)貸出No、利用者CD、書籍CD などは、「主キー」と呼ばれています。主キーとは、データベースの中から、レコードを「一意」に識別するためのものです。
*主キー(primary key)
一意とは同じデータが他に無く、重複しないことです。主キーを設定したフィールド(列)には、同じデータを入力できません。
したがって、利用者テーブルの主キーである利用者CD が「1」の人は、確実に「田中 愛」さんだと識別できるわけです。
たとえ同姓同名の人がいても、利用者CD が「1」の人は、必ず1人しかいません。
同様に、貸出履歴テーブルでも、それぞれのレコードを識別するために、主キーが必要なので、「貸出No」のフィールド(列)を追加しました。
これで、同じ日に、同じ人が、同じ本を借りても、履歴を識別できます。
ちなみに、貸出履歴テーブル側にある 利用者CD と 書籍CD は、外部キーといい、データを参照するために使われるフィールドです。
*外部キー(Foreign Key)
フィールド名は同じですが、どのテーブルにあるかによって、役割が変わり、呼び方が変わるわけです。(フィールド名は異なってもかまいません)
(2)リレーショナルデータベースでは、利用者テーブル側に無い「利用者CD」を、貸出履歴テーブル側で入力できないようにするなど、「制約」を設定することができます。
制約を設定しておけば、矛盾したデータが入力されるのを防ぐことができます。
実際のシステムでは、データをコンボボックスから選択するような方法になるので、さらに入力ミスが防げます。
・コンボボックス
*コンボボックスの機能は、プログラミング言語側で実現します。
データベースには、システムを安全に運用できる機能が、他にもいろいろ用意されています。