類似用語

主キー、複合主キー、外部キーの違い

「主キー」「複合主キー」「外部キー」の違いがわからない...

本記事では「主キー」「複合主キー」「外部キー」について紹介します。

主キー、複合主キー、外部キーの違い

Memo

  • 主キー:レコードを一意に特定するためのもの
  • 複合主キー:複数のカラムの組み合わせで、レコードを一意に特定するもの
  • 外部キー:依存関係にある2つのテーブルを結びつけるもの

「テーブル」「レコード」「カラム」「フィールド」といった基本用語の意味は次のとおりです。

テーブルの呼び方

スポンサーリンク

主キーとは

主キー(英:primary key、略:PK)とは、関係データベースのテーブル内で、レコードを一意に特定するためのカラムのことです。

テーブルには、大量のデータが保存されています。その大量データの中から、レコードを一意に特定するためには「キー情報」が必要です。それが「主キー」です。

例えば、次のテーブルの主キーは「社員番号」です。

社員番号

主キーは、レコードを一意に特定するためのものです。そのため、主キーに指定したカラムに重複する値は設定できません

主キーには「社員番号」や「製造番号」といった重複しない項目、または、一意性を確保するために「通し番号」のような項目を設定します。

主キーには、次の制約が課せられます。

制約説明
一意制約データに重複がなく、必ず一意であること。主キーのカラムに同じデータが登録された場合、「一意制約」でエラーになる。
NOT NULL制約NULLを許可しない。主キーのカラムに「NULL」が登録された場合、この「NOT NULL制約」でエラーとなる。

複合主キーとは

複合主キー(英:composite primary key)とは、データベースのテーブルに設定される「主キー」を複数のカラムの組み合わせとして定義することです。

次の例は、複合主キー(複合キー)のイメージ例です。

複合キー

上記のようなテーブルは、ひとつのカラムではレコードを一意に特定できません。(学年は重複する、組も重複する、出席番号も重複する、名前は同姓同名の可能性がある)

そのため「学年」「組」「出席番号」の組み合わせで、レコードを一意に特定しています。これが複合主キーです。

一意性を確保するために「通し番号」のようカラムを新たに設けるか、複数のカラムの組み合わせで(複合主キー)、一意性を確保します。

外部キーとは

外部キー(英:foreign key、略:FK)とは、関係データベースにおいてデータの整合性を保つための制約(参照整合性制約)のことで、外部キーに設定しているカラムには、参照先となるテーブルのカラム内に存在している値しか設定できません。

Memo

参照一貫性制約(参照整合性制約)は、あるカラムの値が別テーブルのカラムを参照するとき、必ずその値が存在していなければならないという意味の制約

例えば、次のようなテーブルがあるとします。(左側は社員テーブル、右側は部署テーブル)

外部キー

「社員テーブル(左側).部署ID」は、「部署テーブル(右側)」の主キーである「部署ID」に対して外部キーを設定しています。

そのため、「社員テーブル(左側).部署ID」には、「部署テーブル(右側).部署ID」に存在している値しか設定できません。

仮に参照先にないデータを登録しようとしても、制約エラーで登録できません

外部キーにデータを追加

上記のように「部署テーブル(右側).部署ID」に存在しない「部署ID = 4」というレコードを「社員テーブル」に追加すると、制約エラーとなり、登録できません。

また、参照元があるレコードは削除しようとしても、制約エラーで削除できません

参照されているレコードを削除

上記のように「部署テーブル(右側).部署ID=2」のレコードは、参照元があるので制約エラーとなり、削除できません。

「部署テーブル(右側).部署ID=2」のレコードを削除するためには、参照元である「社員テーブル(左側)」の対象のレコードを削除し、参照元がなくなった状態にする必要があります。参照元がなくなれば削除できます。

helpful