「主キー」という言葉はデータベース学習で最初に登場する重要な概念のひとつです。
外部キーとの違いや複数の主キーを設定できるのかがわかりにくいと感じる方も多いかもしれません。
本記事では、主キーの意味と外部キーとの違いを、複数設定・主キー制約・SQL・データベース設計・英語表記を交えてわかりやすく解説します。
データベースを学び始めた方やSQL・DB設計の理解を深めたい方にもきっと役立つ内容でしょう。
主キーを正しく理解することで、データベース設計の品質向上とデータの整合性管理への理解が大きく深まります。
主キーとは「テーブル内のレコードを一意に識別するためのカラム(または複数カラムの組み合わせ)」のこと
それではまず、主キーの基本的な意味と役割について解説していきます。
主キー(Primary Key)とは、リレーショナルデータベースのテーブルにおいて、各レコード(行)を一意に識別するために設定される特別なカラムまたは複数カラムの組み合わせのことです。
英語表記は「Primary Key」で、略して「PK」とも表記されます。
主キーに設定されたカラムには「値が重複しない(一意性)」「NULLを許容しない(非NULL)」という2つの制約が自動的に課されるでしょう。
住民基本台帳の個人番号・商品管理の商品ID・社員管理の社員IDなど、実際のシステムでも「このデータを一意に特定するための番号」として主キーの概念が広く活用されています。
主キーは1つのテーブルに必ず1つだけ設定されます。ただし「1つの主キー」は1つのカラムとは限らず、複数のカラムを組み合わせた「複合主キー(Composite Primary Key)」として設定することも可能です。
主キーの英語表記と関連用語
主キーに関連する英語表記と用語を整理しておきましょう。
| 日本語 | 英語表記 | 略称 |
|---|---|---|
| 主キー | Primary Key | PK |
| 外部キー | Foreign Key | FK |
| 候補キー | Candidate Key | CK |
| 複合主キー | Composite Primary Key | CPK |
| 代理キー | Surrogate Key | SK |
| 自然キー | Natural Key | NK |
ER図やデータベース設計書ではPK・FKという略称が頻繁に使われるため、これらの略称を覚えておくと便利でしょう。
主キーの2つの必須条件
主キーには以下の2つの必須条件があります。
【主キーの必須条件】
条件1:一意性(Uniqueness)
テーブル内のすべてのレコードで主キーの値が重複してはならない
例:顧客IDが「001」のレコードは1つしか存在できない
条件2:非NULL(NOT NULL)
主キーの値はNULL(未設定・空)であってはならない
例:顧客IDが未設定のレコードは登録できない
この2つの条件によって主キーは常に「特定のレコードを確実に識別できる唯一の値」として機能するでしょう。
主キーの種類と設定方法
続いては、主キーの種類と具体的な設定方法を確認していきます。
主キーの種類と特性を理解することで、データベース設計の質が向上するでしょう。
単一主キーとは
単一主キーとは、1つのカラムだけで構成される主キーで、最も一般的な主キーの形態です。
自動採番のID(AUTO_INCREMENT・SERIAL)を単一主キーとして設定するパターンが最も広く使われており、シンプルで管理しやすいという特徴があるでしょう。
【単一主キーのSQL定義例(MySQL)】
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100) NOT NULL,
email VARCHAR(200) NOT NULL
);
複合主キー(複数の主キー)とは
複合主キー(Composite Primary Key)とは、2つ以上のカラムを組み合わせて1つの主キーとして設定する方式です。
多対多のリレーションシップを解消する中間テーブルでよく使用され、たとえば「学生ID」と「授業ID」の組み合わせで受講履歴を一意に識別するケースが典型例でしょう。
【複合主キーのSQL定義例】
CREATE TABLE enrollments (
student_id INT NOT NULL,
course_id INT NOT NULL,
enrolled_date DATE NOT NULL,
PRIMARY KEY (student_id, course_id)
);
意味:student_idとcourse_idの組み合わせが一意であることを保証
同じ学生が同じ授業を2回登録できないことを制約
複合主キーはそれぞれの値は重複しても良いですが、組み合わせとしては必ず一意でなければならない点が重要でしょう。
自然キーと代理キーの違い
主キーの選び方として「自然キー」と「代理キー」という2つのアプローチがあります。
| 種類 | 定義 | 例 | メリット・デメリット |
|---|---|---|---|
| 自然キー | 現実世界に存在する意味を持つ値を主キーとして使用 | メールアドレス・電話番号・マイナンバー | 意味がわかりやすい・変更リスクがある |
| 代理キー | システムが自動生成する意味のない番号を主キーとして使用 | AUTO_INCREMENT・UUID | 変更なし・意味がない |
現代のデータベース設計では変更リスクがなく管理が容易な代理キー(自動採番ID)を主キーとして使うことが一般的なベストプラクティスでしょう。
主キーと外部キーの違いと関係
続いては、主キーとよく一緒に語られる外部キーとの違いと関係を確認していきます。
主キーと外部キーの関係を理解することでテーブル間の結合とデータの整合性管理が明確になるでしょう。
外部キーとは何か
外部キー(Foreign Key:FK)とは、別のテーブルの主キーを参照することでテーブル間のリレーションシップを定義し、参照整合性を保証するためのカラムです。
外部キーを設定することで「存在しないレコードを参照するデータが登録されることを防ぐ」参照整合性制約が有効になるでしょう。
【外部キーのSQL定義例】
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
意味:ordersテーブルのcustomer_idはcustomersテーブルのcustomer_idを参照
customersテーブルに存在しないcustomer_idは登録できない
主キーと外部キーの比較
| 項目 | 主キー(PK) | 外部キー(FK) |
|---|---|---|
| 役割 | レコードを一意に識別する | 別テーブルの主キーを参照する |
| 一意性 | 必須(重複不可) | 不要(同じ値が複数存在可能) |
| NULL | 許容しない | 設定によって許容する場合がある |
| 設定数 | 1テーブルに1つのみ | 1テーブルに複数設定可能 |
| 制約の目的 | 一意性・非NULLの保証 | 参照整合性の保証 |
主キーは「自分自身のレコードを一意に識別する」ための制約で、外部キーは「別テーブルとのリレーションシップを保証する」ための制約でしょう。
主キー制約・外部キー制約の確認方法
設定した主キー・外部キーの制約を確認するSQLを把握しておきましょう。
【MySQLでの制約確認コマンド】
テーブル定義の確認:SHOW CREATE TABLE テーブル名;
制約情報の確認:
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = ‘テーブル名’;
【PostgreSQLでの確認】
\d テーブル名 (psqlコマンドでテーブル定義を確認)
制約の設定状況を定期的に確認することで、意図しない設定漏れを防ぎデータ品質を維持できるでしょう。
まとめ
本記事では、主キーの意味と外部キーとの違いについて、複数設定・主キー制約・SQL・データベース設計・英語表記を交えながら解説しました。
主キーとはテーブル内のレコードを一意に識別するためのカラムまたは複数カラムの組み合わせで、一意性と非NULLという2つの制約が必ず課されるものです。
単一主キー・複合主キー・代理キー・自然キーなど目的に応じた主キーの種類を理解して適切に選択することがデータベース設計の品質向上につながるでしょう。
外部キーは別テーブルの主キーを参照することで参照整合性を保証し、主キーと組み合わせることでデータの一貫性と信頼性の高いデータベース設計が実現できます。
本記事が主キーへの理解を深め、データベース設計やSQL学習の実践に役立てば幸いです。