よくわからない「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