ホーム > データベーススペシャリスト試験 > 2024年

データベーススペシャリスト試験 2024年 午前205


あるエンティティを関係データベース上に実装しようとしたとき, その主キーが多くの属性から構成される複合キーとなることが分かった。主キーとして扱う属性を少なくして扱いやすくしたい。この対応として, 適切なものはどれか。
複合キーを構成する属性のうち, エンティティの性格を最もよく表している一つの属性を主キーとし, 残りの属性を外部キー(foreign key)にする。
複合キーを構成する属性のうち, エンティティの性格を最もよく表している一つの属性を主キーとし, 残りの属性を代替キー(alternate key)とする。
連番などを値としてとる列を新たに設けて主キーとし, 複合キーの代理キー(surrogate key)とする。(正解)
連番などを値としてとる列を新たに設けて主キーとし, 複合キーを外部キー(foreign key)にする。

解説

# 複合キーの主キーを扱いやすくする方法の解説

## 問題の背景
関係データベースにおいて、エンティティ(表の行を一意に識別するもの)の主キーを設定する際に、複数の属性(カラム)を組み合わせて一意性を保証する「複合キー」を使うことがあります。

しかし、複合キーは属性が多くなると以下のような問題が生じることがあります。

- 複雑で扱いにくくなる
- 他のテーブルでの参照が面倒(外部キーとして複合キー全部を持つ必要がある)
- クエリが複雑になる

そのため、主キーとしての属性数を少なくし、できるだけ単純かつ扱いやすくしたい場合があります。

---

## 選択肢の比較と検討

### ア: 複合キーを構成する属性のうち一つを主キーとし、残りを外部キーにする
- 外部キーは他のテーブルに対する参照キーなので、同一テーブル内の属性を外部キーにするのは誤り。
- よって不適切。

### イ: 一つの属性を主キーとし、残りを代替キーとする
- 「代替キー(alternate key)」とは、あるテーブル内で一意に識別可能な主キー以外のキー候補のこと。
- 代替キーはあくまでユニーク制約の候補であり、これによって主キーが単一化できるわけではない。
- 複合キーの属性を無理に単一の主キーとし、残りを代替キーにするのはキーの意味を損なう恐れがある。

### ウ: 連番など新たな列(代理キー)を設けて主キーとし、複合キーの代理キーとする
- **代理キー(surrogate key)** は、意味を持たない一意の識別子(例えば連番ID)を新たに設けて主キーとする方法。
- 複合キーとして設定していた複数の属性は依然としてテーブル内に存在するが、主キーはシンプルな代理キーになる。
- 外部キーの参照も代理キーに対して行うため、扱いやすくなる。
- 実務でもよく用いられる適切な解決法。

### エ: 連番の列を主キーとし、複合キーを外部キーにする
- 外部キーは他のテーブルを参照する属性に付けるもので、自テーブルの中で複合キーを外部キーに扱うのは不適切。
- また、主キーと外部キーは役割が違うためこの方法は誤り。

---

## 正解

**ウ: 連番などを値としてとる列を新たに設けて主キーとし,複合キーの代理キーとする。**

---

## まとめ

- 複合キーは扱いにくいため、シンプルな主キーを用意したい場合、「代理キー(surrogate key)」として意味のない連番IDなどを主キーとする方法が一般的・適切。
- 複合キーは依然としてユニーク制約などで制約の対象にはできるため、一意性は保証される。
- 代理キーを使うことで、テーブル設計や他テーブルからの参照が容易になる。

---

### 参考用語

- **主キー (Primary Key)**: テーブル内の行を一意に識別する属性(または属性の集合)
- **複合キー (Composite Key)**: 複数の属性の組み合わせからなる主キー
- **代替キー (Alternate Key)**: 主キー以外で一意性を持つキー候補
- **代理キー (Surrogate Key)**: 意味のない連番やIDを主キーとして使う方法
- **外部キー (Foreign Key)**: 他のテーブルの主キーを参照するための属性

以上が複合キーの主キーを扱いやすくするために代理キーを用いる方法の解説です。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ