目次
主キーと外部キー
前回はRDB(リレーショナル型データベース)について解説を行いましたが、今回は
RDBには欠かせない「主キー」と「外部キー」について解説していきます。
主キーとは
主キーとは、表内の1件のデータ(行)を一意に識別するためのキー(値)のことです。
キーと言っても値そのものではなく、その「列」にあるものが主キーと思ってください。
言葉だけではイメージしづらいと思うので、図で見てみましょう。

図1.1主キーとは
[図1.1]を見てもらうと「学生番号」と言う列の値が主キーとなります。
学生番号が分かれば、学生の情報を一意に識別することができますよね。
例えば「学生番号」が「1」番の生徒の場合
氏名は「ああああ」で年は「1」、組は「A」で性別は「男」ということが
学生番号が分かれば、判断することができます。
「それは氏名でも判断できるのでは?」
と思う方もいるかもしれません。
しかし、氏名の場合だと同姓同名の方いる可能性がありますよね。
[図1.1]だと氏名「ああああ」と言う方が2人存在します。
そのため、氏名が「ああああ」の人の情報を知ろうと思っても、2人存在してしまい
データを一意に識別することができません。
そのため、確実に学生を識別することができる「学生番号」列が主キーとなるのです。
主キーにはデータを一意に取得するために、以下の2つが禁止されています。
- 値の重複
- Nullの格納
1の値の重複は分かりやすいですね。
学生番号が1の生徒が2人いたら、学生番号でその生徒を特定できなくなってしまいます。
2の「Null」は今回初めて出てきた単語ですね。
Nullは値が格納されていないことを表す特殊な値です。
空白や0ではなく、値が入っていないことを表します。
学生番号が入っていないのに、その生徒を特定することはできません。
そのため、主キーとなる列には「Null」を格納することはできないのです。
複数の列を組み合わせた「複合主キー」
主キーは、1つの表に1列だけとは限りません。
複数の列を組み合わせて、1つの主キーとしている物を複合主キーと言います。

図1.2複合主キー
[図1.2]を見てもらうと、[図1.1]では主キーだった学生番号に重複が見られます。
しかし、組列と組み合わせることで学生情報を一意に識別することができます。
このように複数の列を組み合わせた主キーを複合主キーと言います。
もちろん主キーと同じく「値の重複」と「Nullの格納」は禁止されていますが、
値の重複に関しては、列単体での重複は許されます。
つまり学生番号が重複・組が重複していることは問題ありません。
しかし、学生番号と組の組み合わせで重複している場合は許されません。
少し混乱してしまうかもしれませんが、要は同じ学生番号・同じ組の人がいたら
おかしいですよね。
しかし、出席番号が同じで組が違うことは当たり前のことです。
このように、身近にある元で考えてみるととても分かりやすいです。
今後悩むことがあったら、身近なものでたとえてみましょう。
外部キーとは
外部キーとは、同じ表内または他の表の主キーを参照するキー(値)のことです。
主キーと同じく、キーと言っても値そのものではなく、その「列」にあるものが外部キーだと
思ってください。

図2.1外部キー
[図2.1]では学生表と部活表があります。
部活表の部活IDは主キーですが、その主キーを参照している学生表の部活IDが外部キーと
なります。
学生表の外部キーの値から参照先である部活表の主キーを特定し、その値で部活を一意に
識別するわけですね。
外部キーにもデータの整合性を保つために、以下の1つが禁止されています。
- 参照先の主キーにある値以外は格納できない
主キーよりも規則が少ないですね。
参照先の主キーにある値以外は格納できないとは、[図2.1]の部活表の部活IDの場合
「1、2、3」以外の値を学生表の部活IDに格納することはできません。
学生表の部活IDに「4」と言う値があったとしても、参照先の部活IDにはそんな値は
存在しないため、存在しない部活を参照していることになります。
それではデータとしてあり得ないため、禁止されている訳です。
主キーの禁止項目にあった「Nullの格納」については、外部キーでは禁止されていません。
[図2.1]を見ると、学生表に部活IDに何も値が入っていない人がいますよね。
つまり、部活IDに値が入っていない「ええええ」さんは部活に所属していないとい
うことになります。
「Null」は格納してはいけないというルールでは、すべての学生が部活に入らなくては
行けなくなりますよね。
このように、主キーとは違い外部キーにはNullが入ってもOKと言うことは
覚えておきましょう。
今回のキーワード
主キー
表内の1件のデータ(行)を一意に識別するためのキー
複合キー
複数の列を組み合わせて、1つの主キーとしている物
Null
値が格納されていないことを表す特殊な値
外部キー
同じ表内または他の表の主キーを参照するキー