テーブル

データベースは、表の形でデータを格納するもの。
表に格納されるデータは、行と列で管理される。
表をテーブル、列をフィールド、行をレコードという。
インデックス
インデックスは、データを高速に処理するための仕組みのこと。
フィールドに索引を付けることで、並べ替えや検索の速度が大幅に向上する。
また、インデックスを固有に設定することで、値が重複しないようにすることもできる。
ただし、インデックスを作成しすぎるとかえって処理が遅くなることもある。
主キー・外部キー

主キーは、社員番号の列のように、レコードを特定するためのフィールドのこと。
主キーを設定することで、効率的にレコードを管理できるようになる。主キーには、次の制約があるよ。
- 一意性制約:他の値と重複しない
- NOT NULL制約:空の値(NULL)がない
外部キーは、他のテーブルの主キーを参照するフィールドのこと。次の制約があるよ。
- 参照制約:参照するテーブルに値が存在する
連結主キーは、複数のフィールドを組み合わせて設定する主キーのこと。
メモ型、OLEオブジェクト型、添付ファイル型のフィールドを主キーに設定することはできない。
メモ型、OLEオブジェクト型、添付ファイル型について詳しく見る
正規化
正規化は、テーブルをできるだけ単純にして、管理しやすくすること。次のようなメリットがある。
- 繰り返し部分がなくなるため、データベースのサイズが小さくなる。
- テーブルを分割するため、各テーブルの目的が分かりやすくなる。
- データの更新などがしやすくなる。
第1正規化
正規化では、まず繰り返し部分を排除する第1正規化という作業を行う。例えば、次のようなテーブルがあるとする。
在庫・商品表
| 在庫番号 | 倉庫番号 | 倉庫名 | 商品番号 | 商品名 | 単価 |
|---|---|---|---|---|---|
| 0000001 | 000000A | 東京倉庫 | F01 | マグロ | 600 |
| F02 | トロ | 800 | |||
| F03 | サーモン | 500 | |||
| 0000002 | 000000B | 大阪倉庫 | F02 | トロ | 800 |
| F03 | サーモン | 500 | |||
| 0000003 | 000000C | 京都倉庫 | F01 | マグロ | 600 |
| F03 | サーモン | 500 |
この場合、グレーの部分が繰り返し部分になる。
繰り返し部分をなくすため、在庫・商品表を在庫表と商品表に分割する。
その際、在庫番号を主キー、繰り返し部分を一意に定めることができる商品番号を連結主キーにする。
在庫表
| 在庫番号 | 倉庫番号 | 倉庫名 |
|---|---|---|
| 0000001 | 000000A | 東京倉庫 |
| 0000002 | 000000B | 大阪倉庫 |
| 0000003 | 000000C | 京都倉庫 |
商品表
| 在庫番号 | 商品番号 | 商品名 | 数量 |
|---|---|---|---|
| 0000001 | F01 | マグロ | 500 |
| 0000001 | F02 | トロ | 800 |
| 0000001 | F03 | サーモン | 500 |
| 0000002 | F02 | トロ | 800 |
| 0000002 | F03 | サーモン | 500 |
| 0000003 | F01 | マグロ | 600 |
| 0000003 | F03 | サーモン | 500 |
第2正規化
第1正規化をしたら、次に第2正規化という作業を行う。
第2正規化では、主キーによって決まる部分を、複数のテーブルに分割する。
例えば、先ほどの商品表は、商品番号によって商品名が決まる。
商品表
| 在庫番号 | 商品番号 | 商品名 | 数量 |
|---|---|---|---|
| 0000001 | F01 | マグロ | 500 |
| 0000001 | F02 | トロ | 800 |
| 0000001 | F03 | サーモン | 500 |
| 0000002 | F02 | トロ | 800 |
| 0000002 | F03 | サーモン | 500 |
| 0000003 | F01 | マグロ | 600 |
| 0000003 | F03 | サーモン | 500 |
これをなくすため、商品表を商品表1と商品表2に分解する。
この時、商品番号は商品表1の主キー、商品表2の外部キーにする。
商品表1
| 商品番号 | 商品名 |
|---|---|
| F01 | マグロ |
| F02 | トロ |
| F03 | サーモン |
商品表2
| 在庫番号 | 商品番号 | 数量 |
|---|---|---|
| 0000001 | F01 | 500 |
| 0000001 | F02 | 800 |
| 0000001 | F03 | 500 |
| 0000002 | F02 | 800 |
| 0000002 | F03 | 500 |
| 0000003 | F01 | 600 |
| 0000003 | F03 | 500 |
第3正規化
第2正規化をしたら、次に第3正規化という作業を行う。
第3正規化では、主キー以外によって決まる部分を、複数のテーブルに分割する。
例えば、先ほどの在庫表は、在庫番号によって倉庫番号が決まり、倉庫番号によって倉庫名が決まる。
在庫表
| 在庫番号 | 倉庫番号 | 倉庫名 |
|---|---|---|
| 0000001 | 000000A | 東京倉庫 |
| 0000002 | 000000B | 大阪倉庫 |
| 0000003 | 000000C | 京都倉庫 |
これをなくすため、在庫表を在庫表1と在庫表2に分解する。
この時、倉庫番号は在庫表1の主キー、在庫表2の外部キーにする。
在庫表1
| 在庫番号 | 倉庫番号 |
|---|---|
| 0000001 | 000000A |
| 0000002 | 000000B |
| 0000003 | 000000C |
在庫表2
| 倉庫番号 | 倉庫名 |
|---|---|
| 000000A | 東京倉庫 |
| 000000B | 大阪倉庫 |
| 000000C | 京都倉庫 |