データベース基礎

インデックス

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

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

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

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

主キー・外部キー

主キーは、テーブルから特定の行を識別するための列のこと。

主キーを設定することで、行を効率的に管理できるようになる。


主キーには、次の制約があるよ。

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

外部キーは、他の表の主キーを参照する列のこと。次の制約があるよ。

  • 参照制約:外部キーの値が被参照表に存在する

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

メモ型、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 京都倉庫

リレーションシップ

リレーションシップは、複数のテーブルで共通する値を関連付けるもの。次のような種類がある。

1対1のリレーションシップ
1対1のリレーションシップ

テーブル①とテーブル②を、1対1で関連付ける。

1対多のリレーションシップ
1対多のリレーションシップ

テーブル①とテーブル②を、1対多で関連付ける。

多対多のリレーションシップ
多対多のリレーションシップ

テーブル①とテーブル②を、多対多で関連付ける。

テーブルの結合

テーブルの結合は、複数のテーブルを1つのテーブルにすること。

リレーションシップを設定することで、次のような結合を行うことができる。

大分類 小分類 詳細
内部結合 右側のテーブルと左側のテーブルで、共通するレコードを表示する。
外部結合 左外部結合 左側のテーブルを基準にして結合する。左側のテーブルにある全てのレコードと、右側のテーブルにある一致したレコードを表示する。
右外部結合 右側のテーブルを基準にして結合する。右側のテーブルにある全てのレコードと、左側のテーブルにある一致したレコードを表示する。

参照整合性

参照整合性は、テーブルを結合した際に、値の整合性を維持する仕組みのこと。

参照整合性を設定するには、フィールドが次の条件を満たす必要がある。


  • 関連付ける2つのテーブルが、同じデータベースにあること。
  • 関連付ける2つのフィールドのうち、1つが主キーであること。
  • 同じデータ型であること。
  • 数値型のフィールドの場合、同じサイズであること。


参照整合性を設定することで、次のルールが適用される。


  • テーブル①にない値を、テーブル②に入力できない。
  • テーブル①のレコードを削除する時、テーブル②に関連付けられたレコードがある場合、削除することができない。
  • テーブル①の主キーの値を変更する時、テーブル②に関連付けられたレコードがある場合、変更することができない。

参照整合性を設定すると、これらのルールが適用されて、整合性が保たれるようになる。しかし、これらのルールがあることで、変更や削除ができないことがあり不便になる。

そのため、連鎖更新連鎖削除を使用して、ルールを緩和することもある。

連鎖更新は、テーブル①の主キーのフィールドの更新を許可するもの。テーブル①の主キーのフィールドを更新した場合、テーブル②の主キーのフィールドも更新される。

連鎖削除は、テーブル①のレコードの削除を許可するもの。テーブル①のレコードを削除した場合、テーブル②のレコードも削除される。

コメントを残す

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