テーブル・インデックスの設計

テーブル

データベース 表 行 列


データベースは、の形でデータを格納するもの。

表に格納されるデータは、で管理される。

表をテーブル、列をフィールド、行をレコードという。

インデックス

インデックスは、データを高速に処理するための仕組みのこと。

フィールドに索引を付けることで、並べ替えや検索の速度が大幅に向上する。

また、インデックスを固有に設定することで、値が重複しないようにすることもできる。

ただし、インデックスを作成しすぎるとかえって処理が遅くなることもある。

主キー・外部キー

主キー 外部キー


主キーは、社員番号の列のように、レコードを特定するためのフィールドのこと。

主キーを設定することで、効率的にレコードを管理できるようになる。主キーには、次の制約があるよ。

  • 一意性制約:他の値と重複しない
  • NOT NULL制約:空の値(NULL)がない

外部キーは、他のテーブルの主キーを参照するフィールドのこと。次の制約があるよ。

  • 参照制約:参照するテーブルに値が存在する

連結主キーは、複数のフィールドを組み合わせて設定する主キーのこと。

メモ型OLEオブジェクト型添付ファイル型のフィールドを主キーに設定することはできない。
メモ型、OLEオブジェクト型、添付ファイル型について詳しく見る

正規化

正規化は、テーブルをできるだけ単純にして、管理しやすくすること。次のようなメリットがある。

  • 繰り返し部分がなくなるため、データベースのサイズが小さくなる。
  • テーブルを分割するため、各テーブルの目的が分かりやすくなる。
  • データの更新などがしやすくなる。

第1正規化

正規化では、まず繰り返し部分を排除する第1正規化という作業を行う。

例えば、次のようなテーブルがあるとする。


在庫・商品表

                                                                                                                                                                                                                 
在庫番号倉庫番号 倉庫名商品番号商品名単価
0000001000000A 東京倉庫 F01マグロ600
F02トロ800
F03サーモン500
0000002000000B 大阪倉庫 F02トロ800
F03サーモン500
0000003000000C 京都倉庫 F01マグロ600
F03サーモン500

この場合、グレーの部分が繰り返し部分になる。

繰り返し部分をなくすため、在庫・商品表を在庫表と商品表に分割する。

その際、在庫番号を主キー、繰り返し部分を一意に定めることができる商品番号を連結主キーにする。


在庫表

                                   
在庫番号倉庫番号 倉庫名
0000001000000A 東京倉庫
0000002000000B 大阪倉庫
0000003000000C 京都倉庫

商品表

                                                                                                                                                                                                                
在庫番号商品番号商品名数量
0000001F01マグロ500
0000001 F02トロ800
0000001 F03サーモン500
0000002F02トロ800
0000002 F03サーモン500
0000003 F01マグロ600
0000003 F03サーモン500

第2正規化

第1正規化をしたら、次に第2正規化という作業を行う。

第2正規化では、主キーによって決まる部分を、複数のテーブルに分割する。

例えば、先ほどの商品表は、商品番号によって商品名が決まる。


商品表

                                                                                                                                                                                                                
在庫番号商品番号商品名数量
0000001F01マグロ500
0000001 F02トロ800
0000001 F03サーモン500
0000002F02トロ800
0000002 F03サーモン500
0000003 F01マグロ600
0000003 F03サーモン500


これをなくすため、商品表を商品表1と商品表2に分解する。

この時、商品番号は商品表1の主キー、商品表2の外部キーにする。


商品表1

                                                                                                                 
商品番号商品名
F01マグロ
F02トロ
F03サーモン

商品表2

                                                                                                                                                  
在庫番号商品番号数量
0000001F01500
0000001 F02800
0000001 F03500
0000002F02800
0000002 F03500
0000003 F01600
0000003 F03500

第3正規化

第2正規化をしたら、次に第3正規化という作業を行う。

第3正規化では、主キー以外によって決まる部分を、複数のテーブルに分割する。

例えば、先ほどの在庫表は、在庫番号によって倉庫番号が決まり、倉庫番号によって倉庫名が決まる。


在庫表

                                   
在庫番号倉庫番号 倉庫名
0000001000000A 東京倉庫
0000002000000B 大阪倉庫
0000003000000C 京都倉庫


これをなくすため、在庫表を在庫表1と在庫表2に分解する。

この時、倉庫番号は在庫表1の主キー、在庫表2の外部キーにする。


在庫表1

                                   
在庫番号倉庫番号
0000001000000A
0000002000000B
0000003000000C

在庫表2

                                   
倉庫番号 倉庫名
000000A 東京倉庫
000000B 大阪倉庫
000000C 京都倉庫

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です