2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちは。アメリカに住みながら、独学でエンジニアを目指している Taira です。

現在 SQL を学習中ですが、教材の中で「主キーとは?」と問われた時、「テーブルの中にある一意性をもったキー」と答えました。

しかし、主キーにはそれ以外にも重要な性質があることがわかりました。

私のようにパッと答えられない人は、今回の記事で一度主キーの定義を整理してもらえると幸いです。

主キー (Primary Key) とは?

主キーとは,「テーブルの中で、この 1 行はこれ!と一意に特定できるカラム」のことを言います。

主キーには下記の 3 つの性質が決められています。

性質 説明
非 NULL 性 空にならず、必ず値が入っている
一意性 重複しない(すべての行で異なる値)
不変性 原則、変更されない

主キーに適しているかのチェック

1. 学生テーブルの「メールアドレス」

  • 重複しないか? : 基本一意
  • NULL にならないか? :未登録で NULL になる可能性
  • 変更されないか? :変更の可能性

→ 一意性はあるが、不変性が不完全なため、主キーには向かない。

(大学発行メールなら主キー向きになる可能性もあり)

2. 商品テーブルの「商品名」

  • 重複しないか? :重複の可能性あり
  • NULL にならないか? :基本登録
  • 変更されないか? :リニューアルで変更の可能性

→ 一意性が保証されないため、主キーに向かない。

3. 社員テーブルの「社員 ID」

  • 重複しないか? :一意に割り振る
  • NULL にならないか? :必要登録
  • 変更されないか? :変更しない設計

→ 主キーに適している!

4. 本テーブルの「出版日」

  • 重複しないか? :同日に複数本発売可能
  • NULL にならないか? :登録もれる可能性
  • 変更されないか? :基本変更なし

→ 一意性がないため、主キーに向かない。

5. 会員テーブルの「電話番号」

  • 重複しないか? :家族共有などの可能性
  • NULL にならないか? :未登録の可能性
  • 変更されないか? :変更可能

→ 一意性や不変性に疑問があり、適しているとは言い難い。

6. 注文履歴テーブルの「注文 ID」

  • 重複しないか? :一意発行
  • NULL にならないか? :登録必須
  • 変更されないか? :基本変更なし

→ 主キーに最適!


まとめ

主キーは、単に「一意性あれば良い」というものではありません。

非 NULL 性、一意性、不変性の 3 つの観点から検証し、実際の運用も見込んで選ぶことが重要です。

最初は記憶だけでも足りるので、数を習れるつもりでチェックしてみてください!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?