ER図

外部キー

応用編3日目では、ではテーブルの正規化について学習しました。その結果できたテーブルは、以下の通りでした。(表4-1.~表4-4.)

表4-1.employeeテーブル
idnameagesex_idsalary
2030山田太郎301324,000
表4-2.emp_qualテーブル
idqual_id
20301
20305
20307
表4-3.sexテーブル
sex_idsex
1男性
表4-4.qualテーブル
qual_idqual
1普通自動車第1種免許
5日商簿記一級
7中小企業診断士

これらのテーブルは、外部キーを用いて関連付けて管理します。外部キーとは、2つの列を関係付ける役割を持つ列のことを言います。例えば、employeeテーブルで、sex_idが外部キーとなり、sexテーブルに対応して値、「男性」を取得しています。このよな場合、sexテーブルのsex_idを親キー、employeeテーブルのsex_idを子キーという言い方もします。同様に、emp_qualテーブルのqual_idが子キー、qualテーブルのqual_idが親キー、emp_qualテーブルのidが子キー、employeeテーブルのidが親キーになります。(図4-1.)

図4-1.親キー・子キー(外部キー)の関係
親キー・子キー(外部キー)の関係

テーブルが多数におよぶと、それらからなるデータベースの全体像を把握することは困難になります。そこで、リレーショナルデータベースを設計する際には、ER図と呼ばれる図を用いてテーブル同士の関係を図で表すという手法がとられます。ER図はテーブル名と列名、列を結ぶ線で構成されます。(図4-2.)

図4-2.ER図
ER図

線で結ばれた列が外部キーで関連付けられた列です。四角一つが、テーブルを表し、最初にテーブル名、その下に列の名前が記述されています。ER図に関しては、ここでは細かい説明はできませんが、以下のように表記されています。(図4-3.)

図4-3.ER図の表記法
ER図の表記法

データベースを構築する前にはデータベースの設計が行われます。設計段階では、このようなER図や次節で説明するテーブル構造書が作成され、データベース全体を概観するための工夫がされます。

テーブル構造書

テーブルの定義情報の記述

ER図はテーブルの関係を表現するもので、これによりテーブルの関係性が完成しました。次は、具体的にそれぞれのテーブルの中身を設計していくことにします。そのために用いるのが、テーブル構造書です。

すべてのテーブルを記述するのが大変なので、ここではemployeeテーブルの構造書を記述してみることにします。(表4-5.~表4-8.)

表4-5.employeeテーブルの構造書
テーブル構造書 テーブル名employee
列名データ型サイズNULL許容既存値備考
idINTEGERしない
nameVARCHAR30しない
ageINTEGERしない
sex_idINTEGERしないsex(sex_id)を参照
salaryINTEGERしない32,4000

表4-6.emp_qualテーブルの構造書
テーブル構造書 テーブル名emp_qual
列名データ型サイズNULL許容既存値備考
idINTEGERしないemployee(id)を参照
qual_idINTEGERしないqual(qual_id)を参照

表4-7.sexテーブルの構造書
テーブル構造書 テーブル名sex
列名データ型サイズNULL許容既存値備考
sex_idINTEGERしない
sexCHAR(2)しないユニーク

表4-8.qualテーブルの構造書
テーブル構造書 テーブル名qual
列名データ型サイズNULL許容既存値備考
qual_idINTEGERしないオートインクリメント
qualVARCHAR20しないユニーク

ここからテーブル名、列名とデータ型、各列に対する制約を読み取ることができます。テーブル名、列名、データ型とそのサイズは欄の見出しに明示されている通りです。

テーブルの主キーはidです。「主」と書かれた欄に○がつけられています。sex_id列はsexテーブルのsex_id列を参照するように外部キーが設定されていることが備考欄に記述されています。

制約

続いて、各カラムの制約を見ていきましょう。制約とは、フィールドに登録する値を制限するために設定されるものです。ここでは制約の名前とその役割をひとつずつ紹介していきます。リレーショナルデータベースでは、列に制約を設定してデータの整合性を保ちます。主キー外部キーがその代表的なものですが、すでに出てきたNOT NULL制約や、ユニークキーなどといった制約が存在します。(表4-9.)

表4-9.主な制約の一覧
制約記述法内容
NOT NULL制約NOT NULLNULL値を入力することができない。
ユニークキー制約UNIQUEフィールドに列内で重複する値を入力することができない。
主キー制約PRIMARY KEY主キーに設定。、テーブル内で行を識別するという特別な役割を持つ。
NOT NULL制約とユニークキー制約を合わせた制約。
(主キーが設定された列にはNULL値と列内で重複する値を入力することが出来ない。)
外部キー制約FOREIGN KEY外部キーに設定。参照する列にある値かNULL値しか入力することができなくなる。
つければ、テーブル間の整合性を保つということができる。

あとは、これをもとに実際にデータベースおよびテーブルを構築するだけです。次は、実際にデータベースとテーブルを作成してみましょう。