🗝️

よくわからない「primary_key」を『ポケモン』を例に解説する記事

2023/10/05に公開

はじめに

今回の記事では、データベース設計でよく耳にするprimary_keyを『ポケットモンスター』を具体例に解説する。

対象とする読者

  • データベース設計の初心者
  • これからデータベースを学ぶ人
  • primary_keyをどうしても理解できない人

primary_keyとは?

primary_key(主キー)とは、データベースのテーブルにおいて、各行を一意に識別するためのキーのことを意味する。言いかえれば、データベースにおいてデータの出席番号として扱われる項目だ。データベースにおけるIDがprimary_keyにあてはまる。

primary_keyの利点

  • データベースにあるデータをわかりやすくするため
  • データベースのテーブルにあるデータの「被り」を防ぐため
  • 特定のデータだけを更新したり、削除したり、取り出したりできるため

ポケモンを例に考える

ここまでprimary_keyの概要と利点を解説したが、これだけ言っても理解できないので『ポケットモンスター』を具体例に解説する。

「一意に識別する」とは、以下の表1のように「データがかぶらない様子」を意味する。

▼表1

ID 名前
001 ピカチュウ
002 イーブイ
003 ミュウツー
004 ミミッキュ

下記の表2であれば、IDがなくてもデータを識別できるだろう。

▼表2

ID 名前
ピカチュウ
イーブイ
ミュウツー
ミミッキュ

ところが、表3で「ピカチュウ」というデータが2つあるとどうだろうか。

▼表3

ID 名前
ピカチュウ
イーブイ
ピカチュウ
ミミッキュ

この表3で、「ピカチュウ」のデータを一つ取り出したい場合を考えると、一番上の「ピカチュウ」なのか、あるいは「イーブイ」の下に位置する「ピカチュウ」なのかわからなくなる。そこで、IDを使ってデータを識別しなければならない

▼表4

ID 名前
001 ピカチュウ
002 イーブイ
003 ピカチュウ
004 ミミッキュ

表4のように、データにIDを追加しておけば「IDが001のピカチュウのデータを取り出したい」というように、扱いたいデータを明確にできるのだ。

primary_keyの条件

データをprimary_keyとして扱うためには以下の条件が必要となる。

  • データが空ではないこと(nullではないこと)
  • データが一意であること(データが被らないこと)

データが空ではないこと

これに関しては、表2をイメージするとわかりやすいだろう。

▼表2

ID 名前
ピカチュウ
イーブイ
ミュウツー
ミミッキュ

データを取り出すときに、IDが空なのか、IDが割り当てられていないのか判断できないからだ。

データが一意であること

例えば、下記の表5の場合を考えてみよう。

▼表5

ID 名前 わざ
001 ピカチュウ 10まんボルト
002 イーブイ たいあたり
003 ミュウツー サイコキネシス

表5の項目は、

  1. ID
  2. 名前
  3. わざ

この3つになる。この3つのうち、「ID」のみprimary_keyとして使うという設定をするとprimary_keyにあてはまる。

IDは絶対に空にならず、割り当てられた番号は他のポケモンと被らない。「ID001のポケモン」となれば「ピカチュウ」のことだとわかるだろう。故に、primary_keyとして使えるのだ。

一方で、「わざ」や「名前」はどうだろうか。被っている可能性がある。少々マニアックな話題になるが、「たいあたり」を使うポケモンはゼニガメなど数多くのポケモンがいる。[1]

まとめると、上述の例における「ID」のような、

  • 中身が空ではないこと
  • 中身が一意であること

primary_keyとして扱える項目となる。

まとめ

primary_keyは、データベースのテーブルにおいて、各データを見分けるために重要な役割を果たす。primary_keyがないと、どのデータを意味しているのかわからなくなる。要は、primary_keyが登場したら「データを見分けるために使われる番号だ」というように認識しておこう。

余談

primary_keyに限らず、エンジニアリングは専門用語が無数にある。エンジニアリング関連の文章や技術記事を書く上で重要なことの一つとして、専門用語をむやみに並べないことが考えられる。

参考サイト

https://www.ibm.com/docs/en/iodg/11.3?topic=reference-primary-keys

https://www.techtarget.com/searchdatamanagement/definition/primary-key

https://wa3.i-3-i.info/word1991.html

脚注
  1. 詳細はポケモンWikiを参照。「たいあたり」を使うポケモンが数多く存在することから、「わざ」をprimary_keyとして使えないことがわかるだろう。 ↩︎

GitHubで編集を提案

Discussion