PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
生徒
「PostgreSQLでテーブルを作るときに、主キーとか外部キーって言葉が出てきて混乱しています…」
先生
「主キーと外部キーは、表と表を正しく管理するための大事なルールです。紙の名簿に番号を振ったり、別のノートとひも付けたりする感覚で考えると分かりやすいですよ。」
生徒
「パソコンが苦手でも理解できますか?」
先生
「大丈夫です。一つひとつ、表を眺めながら説明していきます。」
1. SQLとは何か?
SQLは、データベースという「情報をきれいに整理して保存する箱」に指示を出すための言葉です。 会員名簿や商品一覧のような表を作ったり、探したり、書き換えたりするときに使います。
PostgreSQLは、そのSQLを使って操作する代表的なデータベースのひとつです。 主キーや外部キーは、PostgreSQLで表を安全に管理するための基本ルールになります。
2. 主キーとは何か?
主キーとは、「その行を絶対に見分けるための番号」です。 同じ値が重複せず、必ず1行に1つだけ存在します。
紙の会員名簿で考えると、会員番号のようなものです。 名前が同じ人がいても、番号が違えば別人だと判断できます。
PostgreSQLでは、主キーを設定することで「重複してはいけない」「空白はダメ」というルールを自動で守ってくれます。
3. 主キーの設定方法
主キーは、テーブルを作るときに指定するのが一般的です。 よく使われるのが、自動で番号が増えるSERIAL型です。
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT,
age INTEGER,
email TEXT
);
この例では、idが主キーです。 データを追加するたびに、1、2、3…と自動で番号が振られます。
4. 外部キーとは何か?
外部キーとは、「別のテーブルの主キーを参照する列」です。 表と表を正しくつなぐための仕組みです。
たとえば、「注文表」と「会員表」がある場合、 注文が誰のものかを示すために会員番号を使います。 この会員番号が外部キーになります。
外部キーを設定すると、「存在しない番号は登録できない」という安全装置が働きます。
5. 外部キーの設定方法
ここでは、usersテーブルとordersテーブルを使って説明します。 usersのidが主キー、ordersのuser_idが外部キーです。
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
order_date DATE
);
REFERENCES users(id) と書くことで、 「usersテーブルのidが存在する場合のみ登録できる」というルールになります。
6. 主キー・外部キーを使ったデータ例
■ usersテーブルのデータ
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
■ ordersテーブルにデータを追加
INSERT INTO orders (user_id, order_date) VALUES
(1, '2024-01-10'),
(2, '2024-01-12'),
(1, '2024-01-15');
■ ordersテーブルの状態
id | user_id | order_date
---+---------+------------
1 | 1 | 2024-01-10
2 | 2 | 2024-01-12
3 | 1 | 2024-01-15
user_idには、usersテーブルに存在するidしか入っていません。 これが外部キーの効果です。
7. 主キー・外部キーを設定するメリット
主キーを設定すると、1行ずつ確実に区別できるようになります。 データを探したり、更新したりする作業が安全で速くなります。
外部キーを設定すると、表と表の関係が壊れにくくなります。 間違った番号を入れてしまうミスを、データベース自身が防いでくれます。
これは、ノート同士を正しい番号でひも付けして管理するイメージです。
8. 初心者が意識したい設計の考え方
主キーは「その行を一意に決められるもの」を選ぶことが大切です。 名前やメールアドレスは変わる可能性があるため、番号を使うのが安全です。
外部キーは、「必ず関連するデータが存在するか」を考えて設定します。 無関係な表同士を無理につなげないことも重要です。
主キーと外部キーを正しく使うことで、PostgreSQLのテーブルはぐっと分かりやすく、壊れにくくなります。