未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【DB入門】リレーショナルデータベースの仕組み Part1

title


表の構成要素

リレーショナルデータベースは、行と列の2次元の表形式でデータを登録していきます。

この表を、テーブル(table)と言います。


テーブルの先頭行は、データの項目名です。

これを、フィールド(field)または列(column:カラム)と言います。


項目に付けた名前を、フィールド名または列名と言います。


表は1つ以上の列で構成されます。

表の各列に値を入力すると1件分のデータが完成します。


ここで大事なことは、各列に入力できる値は1つだけです。

1件分のデータが複数行にまたがることはできません。

この1件分のデータの集まりを、レコード(record)または行(row:ロウ)と言います。


表の構成要素



上の表では、氏名、郵便番号、都道府県、住所、電話番号というフィールド(列)があり、各列に一人分のデータが登録され、5人分(5行)のデータが登録されています。



テーブルによるデータの管理

リレーショナルデータベースでは、テーブルにデータを登録していきます。

テーブルを作成し、データを登録する際にはいくつかの決まりがあります。


  • 1 つの列には 1 つの値だけ入力する

表は、行と列の2次元の表形式であり、1つの列には1つの値のみ入力できます。

2つ以上のデータがある場合には、新たに列を設けます。

下の例は、住所データを郵便番号、都道府県、住所の3つの列に分けています。


1つの列には1つの値のみ



  • フィールド名(列名)に同じ名前を付けてはいけない

Excelなど表計算ソフトでは、同じ列名がいくつあっても構いませんし、列名がなくても構いません。

これに対してデータベースのテーブルは、必ず異なる列名をつけなければなりません。

データベースのテーブルでは、列名が「女性」のデータを検索するなどといったように、列名を使って処理を行います。

同じ列名が存在すると、どれを使って処理をすればよいかわからなくなるためです。


同じ名前を付けてはいけない


上の例では、住所列が3つあります。

このようなテーブルはRDBMSがエラーを返します。

住所1、住所2、住所3と異なる名前を付けたり、郵便番号、都道府県、住所のように、データの内容がよりわかりやすい列名を付けるとよいでしょう。



  • フィールドには決められた値を登録する

フィールドに入力する値は、あらかじめ決めておいた種類とその種類に適応したサイズのデータを入力しなければなりません。

これらの種類を「データ形式」と言い、それぞれの形式の値を「データ値」と言います。


コンピュータは文字や数値、日付、画像、音声などあらゆる種類のデータを扱うことができます。

その扱いは種類ごとに異なります。


同じ数値であっても、「10」「1000000」は使用するメモリサイズが異なります。

また「10」は、数値の10もあれば、文字としての10もあり、見た目が同じでも異なる種類のデータを表すこともあります。


異なる扱いをするデータを同じフィールドに登録すると、コンピュータはどう処理をしてよいかわからなくなるため、きちんとデータ形式を分ける必要があります。

データ形式


次のテーブルでは、郵便番号や電話番号のデータ形式は一見「数値」に見えますが、これらのデータは計算をする必要がなく、また「-」(ハイフン)が含まれているため、文字列として扱います。


郵便番号や電話番号


次のテーブルの国語、数学、英語フィールドは合計点や平均点を計算するため、データ形式は「数値」としなければなりません。


郵便番号や電話番号



  • テーブルに重複した値を登録できない

テーブルに同じデータを登録するのは無駄な作業です。

例えば、顧客名簿に「山田太郎」が2回登録されているとしたら、顧客名簿に登録されているすべての人にダイレクトメールを送ると、「山田太郎」に2通同じものが送られてしまいます。


また、実際の顧客数より人数が多くなり、正確なデータの把握ができなくなります。


このようなデータの二重登録を防ぐ方法として、テーブルに各レコードを識別するためのフィールドを用意します。

このフィールドを、主キー(primary key)と言います。


主キーとして設定したフィールドには、「すでに登録してある値と同じものを登録できない」 「かならず値を入力しなければならいない」というルールがあります。

このルールに違反するとRDBMSがエラーを返します。

主キー


上のテーブルでは、[顧客番号]フィールドを顧客を識別するフィールド(主キー)としています。

最後の行に、すでに登録されている顧客番号「C001」を入力しようとするとエラーになります。



  • 1 つのデータは 1 つのテーブルで管理する

下の表は、どの顧客がどのような商品を購入したかを登録した、毎日の注文リストです。

注文リスト


顧客番号と氏名を見ると、同じ人が何度も注文していることがわかります。

また、商品も複数の顧客から注文されていることがわかります。


つまり、1つのリストに同じデータが何度も出てきているわけです。


ある時、野菜の値段が高騰し、サンドイッチの単価が値上がりしたとします。

その場合、サンドイッチが登録されている行の単価すべてを修正しなくてはならなくなります。

作業に手間がかかるだけではなく、値を間違って入力する可能性もあります。


そこで、リレーショナルデータベースには「1つのデータは1つのテーブルで管理する」という仕組みがあります。


今回の場合、次のような商品に関するデータを1つのテーブルとして用意しておきます。

商品に関するテーブルでは、商品番号フィールドを主キーとし、重複した商品が登録できないようにしておきます。

商品に関するテーブル



そして、注文リストには商品番号のみを登録し、商品名と単価のフィールドを削除します。

注文リストの商品番号は、商品リストの商品番号と関連付けをします。


この関連付けを、リレーションシップと言います。


注文リスト


このように、意味のあるかたまりごとにテーブルを分けてリレーションシップを付けることで、サンドイッチの単価が変更にな った場合、商品リストの単価フィールド1つを修正するだけになり、注文リストの値を修正する必要はなくなります。


また、次のような顧客リストを作成し、顧客リストの顧客番号と注文リストの顧客番号にリレーションシップを付けることで、さらに効率の良いデータベースになります。


リレーションシップを付ける


これで、仮にある顧客の住所データが変更になった場合でも、顧客リストの住所データ1か所を変更するだけで済みます。


参考図書



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加