主キーと外部キー〜基本情報技術者合格のための学習法〜

主キー基本情報

キーとは

関係データベースには、行を特定したり、表と表に関係を持たせるために様々な種類の「キー」という鍵となる情報が必要です。

主キー

テーブルの1件のデータ(レコード)を識別するためのキー(値)を主キーと呼びます。

主キー
学生番号氏名部活
1037山本 大輔野球部
1064佐藤 誠サッカー部
1077上田 真司バスケ部
1078鈴木 一郎野球部
1094田中 剛バスケ部

表を見ると学生番号は各個人で異なります。
そのため、学生番号の値が主キーとなります。

氏名でも判断できるのでは?と思う方もいるかもしれません。
しかし、氏名の場合だと同姓同名の人いる可能性がありますので、各データを特定することはできません。
主キーとなる項目は、学生番号、受験番号、商品番号などの個々を特定する番号(ID)がほとんどです。

主キーには個々を特定できるような項目でなければなりません。

そのために、以下の2つが禁止されています。

  • 値の重複がないこと(データが一意であること)
    同じデータが複数あるとデータを1つに特定できません
  • Nullが格納されていないこと(値が設定されていないデータがないこと)
    データがNull(空)だと、当然特定をすることができません。

複合キー

1つの項目だけではデータを特定できないけれど、複数のフィールドを組みあわせれば1つに特定できる場合があります。

複数のフィールドを組み合わせて、1つの主キーとしている物を複合キーと呼びます。

主キー
学年出席番号氏名部活
1315山本 大輔野球部
2210佐藤 誠サッカー部
127上田 真司バスケ部
3217鈴木 一郎野球部
1110田中 剛バスケ部

このとき、出席番号だけを主キーにしてしまうと、出席番号が重複しています。
しかし、学年、組、番号の3つを組み合わせることにより他の人と重複することはありません。

このように、複数の項目を組みあわせてた主キーを複合キーと呼びます。

複合キーも主キーと同じく、以下の2つが禁止されています。値の重複がないこと(データが一意であること)
ただし、フィールド単体での重複は許されます。Nullが格納されていないこと(値が設定されていないデータがないこと)
主キーと同様、データがNull(空)だと、当然特定をすることができません。

候補キー

候補キーは主キーの候補となるキー(データを1つに特定できるフィールド)を呼びます。

データを特定できるフィールドが2つ以上ある場合、特定できるフィールドから1つを選び、主キーとします。

主キー
主キー代替キー
学生番号受験番号氏名
1037A10462山本 大輔
1064A10234佐藤 誠
1077A10628上田 真司
1078A10783鈴木 一郎
1094A10926田中 剛

学生番号と受験番号は、個人を識別するための番号なので、候補キーは学生番号、受験番号の2つとなります。

今回は学生番号を主キーとしたいと思います。

すでに特定に使っている主キーも候補キーに入ります
候補キーの中で、主キーとして使っていないキーのことを代替キーと呼びます。

外部キー

関係データベースは、複数の表同士の関係付ける場面が出てきます。
その際、どのデータを使って表を対応づけるかを決める必要があります。

ここで、主キーが出てきます。
表同志の関係付けるために、他の表の主キーを参照するフィールドのことを外部キー(参照キー)と呼びます。

学生一覧

学生番号氏名部活ID
1037山本 大輔1
1064佐藤 誠2
1077上田 真司3
1078鈴木 一郎1
1094田中 剛

部活一覧

部活ID部活名
1野球部
2サッカー部
3バスケ部
4軽音部
5テニス部

外部キー
学生一覧にある部活IDから、部活一覧にあるIDを対応付けることで、各個人の部活を特定することができます。

外部キーにもデータの整合性を保つために、以下の1つが禁止されています。

参照先の主キーにある値以外は格納できない
参照先の主キーにある値以外は格納できないとは、部活一覧の部活IDの場合

「1、2、3、4、5」以外の値を学生一覧の部活IDに格納することはできません。

学生表の部活IDに「6」と言う値があったとしても、参照先の部活IDにはそんな値は

存在しないため、存在しない部活を参照していることになります。

主キーの禁止項目にあった「Nullの格納」については、外部キーでは禁止されていません。

「田中 剛」さんの部活IDに何も値が入っていません。

つまり、部活に所属していないということになります。

コメント

タイトルとURLをコピーしました