ER図
外部キー
応用編3日目では、ではテーブルの正規化について学習しました。その結果できたテーブルは、以下の通りでした。(表4-1.~表4-4.)
表4-1.employeeテーブルid | name | age | sex_id | salary |
---|---|---|---|---|
2030 | 山田太郎 | 30 | 1 | 324,000 |
id | qual_id |
---|---|
2030 | 1 |
2030 | 5 |
2030 | 7 |
sex_id | sex |
---|---|
1 | 男性 |
qual_id | qual |
---|---|
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図に関しては、ここでは細かい説明はできませんが、以下のように表記されています。(図4-3.)
図4-3.ER図の表記法 |
---|
データベースを構築する前にはデータベースの設計が行われます。設計段階では、このようなER図や次節で説明するテーブル構造書が作成され、データベース全体を概観するための工夫がされます。
テーブル構造書
テーブルの定義情報の記述
ER図はテーブルの関係を表現するもので、これによりテーブルの関係性が完成しました。次は、具体的にそれぞれのテーブルの中身を設計していくことにします。そのために用いるのが、テーブル構造書です。
すべてのテーブルを記述するのが大変なので、ここではemployeeテーブルの構造書を記述してみることにします。(表4-5.~表4-8.)
表4-5.employeeテーブルの構造書テーブル構造書 | テーブル名 | employee | ||||
---|---|---|---|---|---|---|
主 | 列名 | データ型 | サイズ | NULL許容 | 既存値 | 備考 |
○ | id | INTEGER | しない | |||
name | VARCHAR | 30 | しない | |||
age | INTEGER | しない | ||||
sex_id | INTEGER | しない | sex(sex_id)を参照 | |||
salary | INTEGER | しない | 32,4000 |
表4-6.emp_qualテーブルの構造書
テーブル構造書 | テーブル名 | emp_qual | ||||
---|---|---|---|---|---|---|
主 | 列名 | データ型 | サイズ | NULL許容 | 既存値 | 備考 |
id | INTEGER | しない | employee(id)を参照 | |||
qual_id | INTEGER | しない | qual(qual_id)を参照 |
表4-7.sexテーブルの構造書
テーブル構造書 | テーブル名 | sex | ||||
---|---|---|---|---|---|---|
主 | 列名 | データ型 | サイズ | NULL許容 | 既存値 | 備考 |
○ | sex_id | INTEGER | しない | |||
sex | CHAR(2) | しない | ユニーク |
表4-8.qualテーブルの構造書
テーブル構造書 | テーブル名 | qual | ||||
---|---|---|---|---|---|---|
主 | 列名 | データ型 | サイズ | NULL許容 | 既存値 | 備考 |
○ | qual_id | INTEGER | しない | オートインクリメント | ||
qual | VARCHAR | 20 | しない | ユニーク |
ここからテーブル名、列名とデータ型、各列に対する制約を読み取ることができます。テーブル名、列名、データ型とそのサイズは欄の見出しに明示されている通りです。
テーブルの主キーはidです。「主」と書かれた欄に○がつけられています。sex_id列はsexテーブルのsex_id列を参照するように外部キーが設定されていることが備考欄に記述されています。
制約
続いて、各カラムの制約を見ていきましょう。制約とは、フィールドに登録する値を制限するために設定されるものです。ここでは制約の名前とその役割をひとつずつ紹介していきます。リレーショナルデータベースでは、列に制約を設定してデータの整合性を保ちます。主キーや外部キーがその代表的なものですが、すでに出てきたNOT NULL制約や、ユニークキーなどといった制約が存在します。(表4-9.)
表4-9.主な制約の一覧制約 | 記述法 | 内容 |
---|---|---|
NOT NULL制約 | NOT NULL | NULL値を入力することができない。 |
ユニークキー制約 | UNIQUE | フィールドに列内で重複する値を入力することができない。 |
主キー制約 | PRIMARY KEY | 主キーに設定。、テーブル内で行を識別するという特別な役割を持つ。 NOT NULL制約とユニークキー制約を合わせた制約。 (主キーが設定された列にはNULL値と列内で重複する値を入力することが出来ない。) |
外部キー制約 | FOREIGN KEY | 外部キーに設定。参照する列にある値かNULL値しか入力することができなくなる。 つければ、テーブル間の整合性を保つということができる。 |
あとは、これをもとに実際にデータベースおよびテーブルを構築するだけです。次は、実際にデータベースとテーブルを作成してみましょう。