よくわからない「primary_key」を『ポケモン』を例に解説する記事
はじめに
今回の記事では、データベース設計でよく耳にする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の項目は、
- ID
- 名前
- わざ
この3つになる。この3つのうち、「ID」のみprimary_key
として使うという設定をするとprimary_key
にあてはまる。
IDは絶対に空にならず、割り当てられた番号は他のポケモンと被らない。「ID001
のポケモン」となれば「ピカチュウ」のことだとわかるだろう。故に、primary_key
として使えるのだ。
一方で、「わざ」や「名前」はどうだろうか。被っている可能性がある。少々マニアックな話題になるが、「たいあたり」を使うポケモンはゼニガメなど数多くのポケモンがいる。[1]
まとめると、上述の例における「ID」のような、
- 中身が空ではないこと
- 中身が一意であること
がprimary_key
として扱える項目となる。
まとめ
primary_key
は、データベースのテーブルにおいて、各データを見分けるために重要な役割を果たす。primary_key
がないと、どのデータを意味しているのかわからなくなる。要は、primary_key
が登場したら「データを見分けるために使われる番号だ」というように認識しておこう。
余談
primary_key
に限らず、エンジニアリングは専門用語が無数にある。エンジニアリング関連の文章や技術記事を書く上で重要なことの一つとして、専門用語をむやみに並べないことが考えられる。
参考サイト
Discussion