【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を割り振ることで、レコードを一意に識別することが可能です。
このようにプライマリーキーは一意の値であり、レコードを識別するために使用します。