主キーとは?関係データベースのキーを一挙紹介【主キー・外部キー・候補キー・複合キー・代理キー】

関係データベースの勉強をしていたら、主キーとか外部キーとか色んなキーが出てきたよ?
違いがよくわからないな〜



データベースの各種キーの違いが複雑で、困っていませんか?



本記事をご覧いただくことで、次のことがわかります。

本記事でわかること
✅主キーや外部キーの違いがわかる
✅関係スキーマにおける記述方法がわかる
✅データベーススペシャリスト試験で気をつけるべきポイントもわかる




主キーや外部キー、候補キーやスーパーキー、代理キーといった、関係データベースのキーの違いや制約について、わかりやすく解説しました。




キーの話の前に、関連データベースについて復習したい方は、ぜひこちらの記事を御覧ください。

データモデルとは?リレーショナルモデルについてもわかりやすく解説

2022年7月16日




データサイエンスを学びたい人におすすめ!プログラミングスクール
  • TechAcademy [テックアカデミー]
    豊富なコースで目的にあわせて選択可能初心者から転職希望者までタイプ別にプランをカスタマイズマンツーマンサポートがつく。
  • DMM WEBCAMP
    転職成功率98%&離職率2.3%転職できなければ全額返金DMM.comグループならではの非公開求人も多数
  • アイデミー
    AIやデータサイエンスに特化オンライン学習なのでいつでも学習可能。学習したい講座を自由に追加受講することができる。





関係スキーマ

関係スキーマとは

関係スキーマとは、関係データモデル(関係表・リレーションデータモデル)の骨格を指します。

スキーマとは、骨格という意味です。


関係スキーマを作る過程で、「表を用意し、どのようなデータを入れるべきか」を考えていきます。



関係スキーマの説明
関係スキーマの説明



関係スキーマの書き方

関係スキーマの書き方は、次の形式に決まっています。

関係スキーマの記述方法
関係スキーマの記述方法



データベーススペシャリスト試験での注意点

データベーススペシャリスト試験では、下記のルールに従って関係スキーマを記載する必要があります。

1. 関係名は先頭に書く
2. ()の中に属性名を書く
3. 複数の属性を記載する場合は「,」で区切る



ルールに従っていない記述は、0点になってしまうので注意しましょう。


関係データベースで使われるキー

キーは、関係データベースで大事な要素です。


関係スキーマを記載する時には、どの属性がキーになるかを見定める必要があります。

主キー(primary key)

主キーとは、データベースのデータ(レコード)を一意に識別するための項目です。

主キーはわかりやすいように、属性名の下に実線を引きます。

主キーの記述方法
主キーの記述方法

主キーは、次で紹介する候補キーの中から選ばれたキーになります。


候補キーの説明とともに、もう少し主キーについて理解を深めましょう



候補キー(candidate key)

候補キーとは、主キーの候補になるキーのことです。

候補キーから主キーを決めるんだね!



候補キーは、次の2つの性質を持ちます。

・行を一意に識別できる:一意性
・必要最小限の属性の集合:極小性


「一意」とは、「唯一」という意味です。「これだ」と一つだけ指定できる状態のことだよ。



商品No商品名単価
S1おにぎり100
S2おにぎり150
商品




この商品表の候補キーとしては、「商品No」がありますね。

「単価」でも、行の特定はできそうですが、適切とは言えないですね…
例えば、商品検索する時に、いちいち単価で確認するのは面倒です。



スーパーキーとは

タプル(行)を一意に指定できればいいのなら、「商品No+単価」の組み合わせなども候補キーになりそうですね。

例えば「商品Noと単価」を組み合わせても、指定できるから候補キー?

違うよ!
ここで登場するのが、候補キーのもう一つの性質である「極小性」です。


極小性により、必要最小限の属性数でないといけません。

今回の例でいうと、商品Noの1属性のみで候補キーの役割を果たせるため2属性を指定しなければならない「商品Noと単価の組み合わせ」は候補キーにはなりません。


このような場合、商品Noと単価の組み合わせはスーパーキーになります。

スーパーキー
スーパーキーとは、候補キー+余計な属性の組み合わせのことです
候補キーに余計な属性を付け加えたものは候補キーではありませんが、スーパーキーに該当します。


スーパーキーや候補キーなど属性の組み合わせは、波括弧で表現するルールになっています。


キーの記述例
キーの記述例




候補キーから主キーを選ぶ方法

候補キーのうち、どれを主キーに選んだらよいでしょうか?

の候補キーを選んでも良いというわけではなく、業務内容によって適切なものを選択する必要があります。


実際、どうやって選んだらいいのかな?

主キーのルール主キー制約)を考慮することがポイントだよ



主キー制約

主キー制約は、次の2つです。

  1. 一意性制約:同値はとれない
  2. 非NULL値制約:空(NULL値)はNG


候補キーの「一意性」の性質があるため、1の一意性制約は全候補キーが満たせることになります。


一方、2の非NULL制約が満たせるかに関しては、各候補キーがNULLになるかどうかを検討する必要があります。

属性の候補キーをNULLにしてもOKとするかどうかは、業務内容によります。

例えば、「商品Noは入荷した段階で決定されるが、単価は未確定状態である企業」の場合は、
単価はNULLになる可能性がありますね。
よって、商品Noが主キーにふさわしいと言えます。



まとめ

主キー・候補キー・スーパーキーの関係をまとめます。

主キーは次の手順で求めます。

主キー・候補キー・スーパーキーの関係
主キー・候補キー・スーパーキーの関係



複合キー

複数の属性を組み合わせて構成された主キーを複合キーと呼びます。

例えば、次の表では、商品Noと購入者IDを組み合わせることで一意に定められます。

つまり、主キーは複合キー{商品No,購入者ID}となります。


商品No商品名単価購入者ID購入者氏名
S1おにぎり(鮭)100U001いぬ太郎
S1おにぎり(鮭)150U100ねこ子
S2おにぎり(梅)100U150かえる次郎
S3サンドイッチ200U001いぬ太郎
商品


複合キーの片割れを主キーと呼ぶのはNGだよ!
今回の場合、例えば、商品Noのみを主キーと呼ぶのは間違いです。
ありがちな間違いなので、注意しましょう。

商品Noは主キーの一部に過ぎないんだね。
商品Noと購入者ID、2つ合わせて主キーと同じ役割なんだね。




外部キー(foreign key)

他の表を参照することで、他の情報を得ることができます。

他の表の行を参照するためのキーを、外部キーといいます。


複数の表があると、表を参照することで新しい情報がわかるんだね!

外部キーとは
外部キーとは


上記の表の場合は、購買テーブルと購入者テーブルを結びつける「購入者ID」が外部キーです。


外部キーの場合は、属性の下に破線を書きます。

ただし、主キーであり、かつ、外部キーである場合は、破線は不要です。


データベーススペシャリストの試験問題の中には、主キーかつ外部キーであっても破線を書くように指定される場合があるよ。

その場合は、破線を引かないと0点になるので、注意が必要です。



参照制約

外部キーのルール(制約)としては、参照制約があります。

参照制約とは、参照先に値が存在することを保証することです。


どういうこと?

ブログやウェブサイトをイメージすると、わかりやすいです。


例えば、あるブログに貼ってあるリンクを押しても、遷移先のウェブページが存在しなかったという経験はありませんか?


このように参照先に値が存在しないとユーザ的に不便なので、参照元と参照先とで整合性が取れるようにルールを決めます。

このルールが、参照制約です。

リンク切れを防ぐイメージだね

リンク切れのイメージ
リンク切れのイメージ


参照制約には、2種類あります。

  • 追加:参照先に存在しない値は、参照元に追加できない
  • 削除:参照元に存在する値(参照されている値)は、参照先から削除できない
    • 対応1:RISTRICT「一切の削除を禁止する」
    • 対応2:CASCADE「参照元から削除する」
    • 対応3:SET NULL「NULL値を設定する」


対応3のSET NULLは、主キーの非NULL値制約より、主キーでもある外部キーの場合には適用できません。

どの対応方法を選ぶかは業務に寄りますが、対応2のCASCADEが一般的です。



代理キー(alternate key

代理キー(alternate key)とは、主キーに選ばれなかった候補キーのことです。



代替キー(surrogate key)

代替キー(surrogate key)とは、後から候補キー(主キー)として利用できるように追加した属性のことです。


例えば、通し番号や行番号だよ

通し番号があれば、候補キーとして使えるね


商品表

通し番号商品No商品名単価
1A001おにぎり100
2A003サンドイッチ200
3B002ジュース120
4B004ゼリー200


商品を探す場合、商品Noで検索はできますが、「上から何番目(通し番号が〇〇)」で答えたほうが楽です。

主キーが、複雑で面倒な時に代替キーが役立ちます。
主キー全ての要素に、必ずしも値が入るわけではない場合も代替キーが便利です。






まとめ

主キーや外部キーなどの違いについて、ご説明しました。

データベースについて、より詳しくなりたい方は、データベーススペシャリストの試験もぜひ受けてみてください。

データベーススペシャリストとは?試験概要や対策について解説

2022年7月16日





データサイエンスを本気で学ぶなら、スクールがおすすめ!
おすすめスクールは、こちらからCHECK

【2023年最新版】データサイエンスが学べるおすすめスクール5選

2022年6月4日