はじめに
こんにちは。アメリカに住みながら、独学でエンジニアを目指している Taira です。
現在 SQL を学習中ですが、教材の中で「主キーとは?」と問われた時、「テーブルの中にある一意性をもったキー」と答えました。
しかし、主キーにはそれ以外にも重要な性質があることがわかりました。
私のようにパッと答えられない人は、今回の記事で一度主キーの定義を整理してもらえると幸いです。
主キー (Primary Key) とは?
主キーとは,「テーブルの中で、この 1 行はこれ!と一意に特定できるカラム」のことを言います。
主キーには下記の 3 つの性質が決められています。
性質 | 説明 |
---|---|
非 NULL 性 | 空にならず、必ず値が入っている |
一意性 | 重複しない(すべての行で異なる値) |
不変性 | 原則、変更されない |
主キーに適しているかのチェック
1. 学生テーブルの「メールアドレス」
- 重複しないか? : 基本一意
- NULL にならないか? :未登録で NULL になる可能性
- 変更されないか? :変更の可能性
→ 一意性はあるが、不変性が不完全なため、主キーには向かない。
(大学発行メールなら主キー向きになる可能性もあり)
2. 商品テーブルの「商品名」
- 重複しないか? :重複の可能性あり
- NULL にならないか? :基本登録
- 変更されないか? :リニューアルで変更の可能性
→ 一意性が保証されないため、主キーに向かない。
3. 社員テーブルの「社員 ID」
- 重複しないか? :一意に割り振る
- NULL にならないか? :必要登録
- 変更されないか? :変更しない設計
→ 主キーに適している!
4. 本テーブルの「出版日」
- 重複しないか? :同日に複数本発売可能
- NULL にならないか? :登録もれる可能性
- 変更されないか? :基本変更なし
→ 一意性がないため、主キーに向かない。
5. 会員テーブルの「電話番号」
- 重複しないか? :家族共有などの可能性
- NULL にならないか? :未登録の可能性
- 変更されないか? :変更可能
→ 一意性や不変性に疑問があり、適しているとは言い難い。
6. 注文履歴テーブルの「注文 ID」
- 重複しないか? :一意発行
- NULL にならないか? :登録必須
- 変更されないか? :基本変更なし
→ 主キーに最適!
まとめ
主キーは、単に「一意性あれば良い」というものではありません。
非 NULL 性、一意性、不変性の 3 つの観点から検証し、実際の運用も見込んで選ぶことが重要です。
最初は記憶だけでも足りるので、数を習れるつもりでチェックしてみてください!