データベースにおける「主キー(primary key)」とは、レコードを一意に識別するためのキーのことです。
参考 データベースとは?

1つのテーブル内で同じ主キーを持つレコードが2つ以上存在することはないため、主キーを指定することでレコードを明示的に一意に特定することが可能になります。結果として大量のレコードの中から必要なデータを効率良く探し出しやすくなります。

このページでは、主キーの定義や役割、主キーの選定方法などをデータベース初心者向けに1から分かりやすくご説明します。
システムエンジニアを目指す方であれば知らないと恥ずかしい超・重要知識です。是非最後までご覧ください。
主キーとは(primary keyとは)
主キー(primary key)とはレコードを一意に識別するためのキー項目のことを指します。

テーブル(データの集まりを表形式で整理したもの)の中には、「名前」や「住所」、「電話番号」などさまざまな情報(これを「カラム」と呼びます)があります。その中で「主キー」は特別なカラムで、それぞれの人や物を一意(ひとつしかない)に識別するためのものと言えます。

例えば以下のようなテーブルを見てください。このテーブルだと、どの項目を見ればレコードを一意に特定できるかがわかりません。


一見「名前」が主キーになりそうですが同姓同名の人物が存在するかもしれないのでNG。また、「電話番号」を主キーにできそうな気もしますが、そもそも電話番号を持ってない人がいるかもしれません。
このような不便を解消するために、レコードを特定できる項目として活用するのが主キー(primary key)です。
主キーは、それぞれの行(情報のまとまり)を特定するための「連番」や「出席番号」「社員番号」のようなものと考えるとわかりやすいでしょう。
主キー(primary key)の特性

主キーには大切な特性が2つあります。
ポイント1 一意性
主キーはそのテーブルの中で、1つだけしか存在しない値でなければなりません。人間で例えると、指紋のようなものです。この一意性があるおかげで、特定の情報を探したり、更新したりする際に、他の情報と間違えることなく正確に操作することが可能になります。

ポイント2 永続性
主キーは一度設定されると、その後変更されることはありません。これは、自分の名前が一生変わらない、ということに似ています。この永続性により、情報の追跡や管理が一貫して行われます。

上記2つのポイントを理解することで、主キーがどのようにデータベース内の情報を一意に識別し、整理するための重要なツールであることが理解できるでしょう。

次の章では、主キーの選び方とその重要性について詳しく見ていきましょう。
主キーの選び方とその重要性
これまでに説明したように、主キーはデータベースの中でデータを一意に識別するための重要なツールです。
そのうえで、どのカラムを主キーとして選ぶべきか?をこの章でご説明します。

主キーの定義・選定方法はデータベース設計の重要な一部であり、その選択はデータベースのパフォーマンスや利便性に大きく影響します。
主キーを選ぶ際の基本的なガイドラインは以下の通り。
チェックポイント1 その項目に一意性があるかどうか
主キーはテーブルの全てのレコードに対して一意でなければなりません。これにより各レコードが一意に識別され、データの混乱が防がれます。

例えば、「名前」や「住所」は同姓同名の人がいたり、同じ家に住んでいる家族がいるので、主キーとしての利用はできません。

チェックポイント2 非NULL
主キーはNULL値(値が存在しない状態)を許可しません。これにより、全てのレコードが確実に一意の主キーを持つことが保証されます。

例えば「電話」を持っていない人がいるかもしれないので、「電話番号」も主キーとしては利用できません。

チェックポイント3 永続性
主キーは、一度割り当てられたらそのレコードの寿命全体を通じて変更されるべきではありません。

電話番号は、将来変更になる可能性があります。この意味でも、電話番号は主キーにはなりえません。
- Qどの項目も主キーにはなりえない場合にはどうすればよい?
- A
新たに項目を追加するか、複合キー(Composite key)を利用します。
複合キーとは?
複合キー(Composite key)とは、2つ以上のカラムを組み合わせて、レコードを一意に識別するためのキーのことを指します。これは、単一の列だけではなく、複数の列の組み合わせが全てのレコードに対して一意である場合に用いられます。

例として先ほどのテーブルを考えてみましょう。

このテーブルでは、「名前」だけではなく、「住所」や「電話番号」も一緒になって初めて一意なレコードとなるかもしれません。そのため、この場合は「名前」「住所」「電話番号」の3つを組み合わせた複合キーが主キーとなります。

複合キーは、一意性を確保するための重要なツールであり、適切に利用することで、複雑なデータ構造でもデータの整合性を保つことができます。しかし、設定が複雑になるため、慎重に設計する必要があります。