📌 結論から理解する
主キー=「テーブルの行を一意に特定する列」
主キー(Primary Key / PK)は、テーブルの中でどの行なのかを一意に識別するための列(または列の組み合わせ)です。
「主キーさえわかれば、その行のすべての情報を取り出せる」という保証を与えます。
主キーの3つの条件
① 一意性(ユニーク)
同じ値が2行以上に存在してはならない
→「1001の顧客」が2人いたら特定できない
同じ値が2行以上に存在してはならない
→「1001の顧客」が2人いたら特定できない
② NOT NULL
NULL(不明)であってはならない
→「わからない顧客ID」では行を特定できない
NULL(不明)であってはならない
→「わからない顧客ID」では行を特定できない
③ 最小性(redundancy-free)
複合主キーの場合、列を減らしても一意性が保てるなら減らす
→ 余分な列を含まない
複合主キーの場合、列を減らしても一意性が保てるなら減らす
→ 余分な列を含まない
複合主キー
1列だけでは一意に特定できない場合、複数の列を組み合わせて主キーにします。
注文明細テーブル(order_details)
| order_id(PK) | product_id(PK) | quantity | unit_price |
|---|---|---|---|
| 1001 | P001 | 2 | 89,800 |
| 1001 | P003 | 1 | 7,500 |
| 1002 | P001 | 3 | 89,800 |
order_idだけでは重複、product_idだけでも重複。2列の組み合わせで初めて一意に特定できる。
候補キー・代理キーとの違い
| 用語 | 説明 |
|---|---|
| 候補キー | 主キーの条件を満たす列の候補(複数ある場合も) |
| 主キー | 候補キーの中から実際に採用したもの |
| 代替キー | 候補キーのうち主キーにならなかったもの |
| 代理キー | 意味を持たない連番(ID)を人工的に追加したもの |
| スーパーキー | 一意性を満たす列の組み合わせ(最小性不要) |
「候補キー」「代替キー」「スーパーキー」の違いが午前問題に出る。候補キー=一意性+最小性、スーパーキー=一意性のみ。
🧠 確認クイズ
Q1. 主キーとして選択できる列の条件として誤っているものはどれか?
Q2. 候補キーとスーパーキーの違いとして正しいのはどれか?
Q3. 注文明細テーブルで「注文ID」と「商品ID」の組み合わせを主キーとする理由は?