🔑 サロゲートキー vs 複合主キー:実例で解説
✅ サロゲートキーとは?
テーブルの主キーとして人工的に付けた意味のないIDを使う方法です。
🌟 特徴
- 意味を持たないただの連番やUUID
- 他の列の変更に影響されない
- テーブル結合がシンプル
💡 実例:ユーザーと注文テーブル
-- usersテーブル(サロゲートキー:id)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
-- ordersテーブル(user_idは外部キー)
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),
item VARCHAR(100),
quantity INT
);
- users.id や orders.id がサロゲートキー
- 結合例:
SELECT o.id, u.name, o.item
FROM orders o
JOIN users u ON o.user_id = u.id;
✅ 複合主キーとは?
複数のカラムの組み合わせで主キー制約をつける方法。
🌟 特徴
- 業務上の意味を持つ組み合わせ(自然キー)
- 冗長だが整合性が高い
- 結合やインデックスがやや複雑に
💡 実例:ユーザーごとのお気に入り商品
-- favorite_itemsテーブル(複合主キー)
CREATE TABLE favorite_items (
user_id INT,
item_id INT,
added_at TIMESTAMP,
PRIMARY KEY (user_id, item_id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
- user_id + item_id のペアが一意
- 同じユーザーが同じ商品を複数回登録できないよう制約
⚖ 比較まとめ
特徴 | サロゲートキー | 複合主キー |
---|---|---|
主キーの意味 | 意味なし(人工的) | 意味あり(業務ロジック) |
可読性 | 低い | 高い(内容がわかる) |
柔軟性 | 高い(設計変更に強い) | 低い(構造変更に弱い) |
結合の簡易さ | シンプル | 複雑になりがち |
制約の厳格さ | 緩い | 厳密(自然キーの一意性を守れる) |