1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サロゲートキー vs 複合主キー

Posted at

🔑 サロゲートキー 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.idorders.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 のペアが一意
  • 同じユーザーが同じ商品を複数回登録できないよう制約

⚖ 比較まとめ

特徴 サロゲートキー 複合主キー
主キーの意味 意味なし(人工的) 意味あり(業務ロジック)
可読性 低い 高い(内容がわかる)
柔軟性 高い(設計変更に強い) 低い(構造変更に弱い)
結合の簡易さ シンプル 複雑になりがち
制約の厳格さ 緩い 厳密(自然キーの一意性を守れる)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?