今回のテーマは「主キー」と「外部キー」です。
主キー?外部キー?
基本情報技術者試験や応用情報技術者試験で出題される「主キー」と「外部キー」についての問題。過去問を見ると難しく感じますが、「主キー」と「外部キー」の意味を知っていれば、そこまで難しい問題ではありません。
本記事では、「主キー」と「外部キー」について解説します。
スポンサーリンク
目次
主キーと複合主キー
主キーとは
主キー(英:primary key、略:PK)とは、関係データベースのテーブル内で、レコードを一意に特定するためのカラムのことです。
テーブルには、大量のデータが保存されています。その大量データの中から、レコードを特定するには「鍵となる情報」が必要です。それが主キーです。
例えば、次のようなテーブルがあるとします。
このテーブルの主キーは「社員番号」であり、主キーの「社員番号」がわかれば、レコードを特定できます。
「社員番号」を主キーとしているため、テーブル内に同じ「社員番号」は登録できません。
このような制約を「一意制約」といいます。
主キーには、「社員番号」や「製造番号」といった重複しない項目、または、一意性を確保するために「通し番号」のような項目を設定します。
主キーの項目(カラム)には、次の制約が課せられます。
制約 | 説明 |
一意制約 | データに重複がなく、必ず一意であること。主キーのカラムに同じデータが登録された場合、「一意制約」でエラーになる。 |
NOT NULL制約 | NULLを許可しない。主キーのカラムに「NULL」が登録された場合、この「NOT NULL制約」でエラーとなる。 |
複合主キーとは
複合主キー(英:composite primary key)とは、データベースのテーブルに設定される「主キー」を複数のカラムの組み合わせとして定義することです。
次の例は、複合主キー(複合キー)のイメージ例です。
「学年」「組」「出席番号」の組み合わせで、レコードを一意に特定しています。
上記のようなテーブルの場合、1つのカラムではレコードを一意に特定できません。(学年は重複する、組も重複する、出席番号も重複する、名前は同姓同名の可能性がある)
そのため、「学年」「組」「出席番号」のカラムを主キーにして、レコードを一意に特定しています。
一意性を確保するために「通し番号」のようカラムを新たに設けるか、複数のカラムの組み合わせで(複合主キー)、一意性を確保します。
外部キー
外部キー(英:foreign key、略:FK)とは、関係データベースにおいてデータの整合性を保つための制約(参照整合性制約)のことです。
外部キーに設定しているカラムは、参照先となるテーブルのカラム内に存在している値しか設定できません。
どういう意味?
参照一貫性制約(参照整合性制約)は、あるカラムの値が別テーブルのカラムを参照するとき、必ずその値が存在していなければならないという意味の制約です。
例えば、次のようなテーブルがあるとします。
「社員テーブル」(左側)のカラム「部署ID」は、「部署テーブル」(右側)の主キーであるカラム「部署ID」に対して外部キーを設定しています。
そのため、「社員テーブル」(左側)のカラム「部署ID」には、「部署テーブル」(右側)のカラム「部署ID」に存在している値しか設定できません。
参照先にないデータを登録した場合
外部キーに設定されているカラムには、参照先となるテーブルのカラム内に存在している値しか設定できません。
では、参照先にないデータを登録したらどうなるのでしょうか。
例えば、上記のようなテーブルがあるとします。「社員テーブル」(左側)のカラム「部署ID」は、「部署テーブル」(右側)の主キーであるカラム「部署ID」に対して外部キーを設定しています。
「部署テーブル」(右側)に存在しない「部署ID = 4」というレコードを、「社員テーブル」(左側)に追加(INSERT文)すると、制約エラーになり登録できません。
参照元があるレコードを削除した場合
外部キーに設定されているカラムには、参照先となるテーブルのカラム内に存在している値しか設定できません。
では、参照元があるレコードを削除したらどうなるのでしょうか。
例えば上記のようなテーブルがあるとします。「社員テーブル」(左側)のカラム「部署ID」は、「部署テーブル」(右側)の主キーであるカラム「部署ID」に対して外部キーを設定しています。
「部署テーブル」(右側)の「部署ID = 2」のレコードを削除(DELETE文)すると、参照元があるので制約エラーになり削除できません。
「部署テーブル」(右側)の「部署ID = 2」のレコードを削除するためには、参照元である「社員テーブル」(左側)の対象のレコードを削除し、参照元がなくなった状態にする必要があります。参照元がなくなれば削除できます。
情報処理試験 過去問の解説
スポンサーリンク
応用情報技術者平成28年春期 午前問29
"在庫" 表の製品番号に定義された参照制約によって拒否される可能性のある操作はどれか、ア~エを順番に確認していきます。
ア:"在庫"表の行削除
不正解:在庫表の行を削除しても、参照制約によって拒否されることはありません。
イ:"在庫"表の表削除
不正解:在庫表を削除しても、参照制約によって拒否されることはありません。
ウ:"在庫"表への行追加
正解:在庫表への行追加は、参照制約によって拒否されることがあります。具体的には、在庫表の「製造番号」は外部キーになっているので、参照先である製品表の「製造番号」にある値しか設定できません。
エ:"製品"表への行追加
不正解:製品表への行追加は、参照制約によって拒否されることはありません。
「ウ」が正解です。