【RDB】プライマリーキー(主キー) - データを一意に識別するカラム
RDBのレコードを一意に識別できるカラムをプライマリーキーと呼びます。
ここではプライマリーキーについて解説します。
プライマリーキー
プライマリーキーは“レコードを一意に識別するカラムの集合”のことです。
関係スキーマなどの主キーと同義で、複数カラムにより構成する場合は複合キーと呼びます。
プライマリーキーのフィールドは重複せず、固有の値を格納します。
同じテーブルに“レコードを一意に識別するカラムの集合”が複数ある場合は、最も適したモノをプライマリーキーとします。
一般的にはIDや連番のように重複しない特性を持つカラムをプライマリーキーとすることが多くあります。
具体例
プライマリーキーを具体例で確認しましょう。
次のユーザーテーブルのプライマリーキーを決める場合、どのようになるでしょうか。
| 名前 | 生年月日 | 性別 |
|---|---|---|
| 田中 太郎 | 20XX年01月01日 | 男 |
| 佐藤 一葉 | 20XX年04月07日 | 女 |
| 高橋 二海 | 20XX年08月15日 | 女 |
| 鈴木 次郎 | 20XX年12月31日 | 男 |
| 田中 太郎 | 20XX年09月09日 | 男 |
結論としては、いずれのカラムもレコードを識別することができないため、IDカラムを追加することになります。
プライマリーキーは、そのカラムのフィールドによって1レコードだけに絞り込める(識別できる)必要があります。
各カラムを1つずつ確認しましょう。
名前
名前カラムはレコードを一意に識別できません。
例えば、このカラムのフィールドが田中 太郎であるレコードは2つあります。
| 田中 太郎 | 20XX年01月01日 | 男 |
| 田中 太郎 | 20XX年09月09日 | 男 |
生年月日
生年月日カラムはレコードを一意に識別できないことが想定されます。
上記レコードでは重複はありませんが、現実的に考えると同じ生年月日の人は存在します。
| 佐々木 三久 | 20XX年01月01日 | 女 |
このような重複する可能性があるレコードが後を追加する可能性があるため、このカラムはプライマリーキーに適していません。
性別
性別カラムもレコードを一意に識別できません。
男は3レコード、女は2レコードあり、一意に識別することが不可能です。
| 田中 太郎 | 20XX年01月01日 | 男 |
| 鈴木 次郎 | 20XX年12月31日 | 男 |
| 田中 太郎 | 20XX年09月09日 | 男 |
| 佐藤 一葉 | 20XX年04月07日 | 女 |
| 高橋 二海 | 20XX年08月15日 | 女 |
以上のようにいずれのカラムもプライマリーキーには適しておらず、このテーブルではレコードを識別する方法がありません。
そのため、プライマリーキーを設定するためのカラムとしてIDカラムを追加します。
| ID | 名前 | 生年月日 | 性別 |
|---|---|---|---|
| 0001 | 田中 太郎 | 20XX年01月01日 | 男 |
| 0002 | 佐藤 一葉 | 20XX年04月07日 | 女 |
| 0003 | 高橋 二海 | 20XX年08月15日 | 女 |
| 0004 | 鈴木 次郎 | 20XX年12月31日 | 男 |
| 0005 | 田中 太郎 | 20XX年09月09日 | 男 |
IDカラムのフィールドはデータ管理者またはシステム等が任意に決められる値とします。
重複しないようにIDを割り振ることで、レコードを一意に識別することが可能です。
このようにプライマリーキーは一意の値であり、レコードを識別するために使用します。