ITパスポート 2013年 秋期 問51
問題文
関係データベースの表に設定する主キー、外部キー及びインデックスのうち、一つの表に対して複数設定できるものだけを全て挙げたものはどれか。
選択肢
ア:インデックス
イ:外部キー、インデックス(正解)
ウ:主キー
エ:主キー、外部キー、インデックス
🔒 解説は解答すると表示されます
関係データベースのキーとインデックスの設定【ITパスポート 解説】
問題の要点:関係データベースの表に設定する「主キー」「外部キー」「インデックス」のうち、1つの表に対して複数設定できるものだけをすべて挙げるとどれか。
まず用語をやさしく説明します(初出で一言ずつ):
- 主キー(primary key):表の各行を一意に識別する列や列の組み合わせ。重複やNULLを許さないことが一般的です。
- 外部キー(foreign key):別の表の主キーなどを参照して、表同士の関係を保つための列。参照整合性を守ります。
- インデックス(index):検索を速くするためのデータ構造。本の索引のような役割を果たします。
この問題では、複数設定できるものだけを選ぶ必要があります。選択肢のうち、複数設定できるのは イ(外部キー、インデックス)です。以下で理由を丁寧に説明します。
正解の理由
- 主キーは「表に1つだけ」設定するのが原則です。表全体の「代表的な識別子」を決めるため、複数の主キーを同じ表に持つことは基本的にできません(ただし、主キーは複数列を組み合わせた複合主キーにできる点は別扱いです)。
- 外部キーは、1つの表で複数設定できます。たとえば「社員」表が「部署AのID」「部署BのID」をそれぞれ別の表の同じ列や別テーブルを参照する場合、外部キーが複数必要になります。
- インデックスは検索や結合性能向上のために列ごとに何本でも作れます。複数の列に複数のインデックスを持つのは普通です。
したがって、複数設定できるのは外部キーとインデックスで、選択肢の イ が正解です。
解法ステップ
- 各用語の意味を確認する(主キー=一意の識別子、外部キー=他表を参照、インデックス=検索高速化)。
- 「複数設定できるか?」という観点でそれぞれ考える。
- 主キー:通常1つだけ → ×
- 外部キー:複数可 → ○
- インデックス:複数可 → ○
- 複数可の組合せを選ぶ → 外部キーとインデックス → イ。
選択肢別の誤答解説
- ア: インデックス
- インデックスは複数設定できますが、外部キーも複数可能なので「インデックスだけ」では不十分です。
- イ: 外部キー、インデックス
- 外部キーもインデックスも1つの表に複数設定可能です。主キーは通常1つなので、この組合せが正解です。
- ウ: 主キー
- 主キーは表につき通常1つだけです(複合主キーは「1つの主キーが複数列で構成される」ので別の扱い)。よって誤りです。
- エ: 主キー、外部キー、インデックス
- 主キーが含まれているため誤り。主キーは複数持てないため「すべて複数設定できる」とは言えません。
よくある誤解
- 複合主キーと「複数の主キー」を混同する
- 複合主キーは「1つの主キーが複数の列でできている」だけで、同じ表に主キーを二つ設定するわけではありません。ここを「複数の主キーが持てる」と勘違いしやすいです。
- インデックスは無制限に作ればよいと思う
- インデックスは検索を速くしますが、追加・更新・削除のたびにメンテナンスコストがかかります。必要な列に絞って作るのが実務です。
補足コラム
- 実際のSQL例(MySQL/PostgreSQLでのイメージ):
CREATE TABLE customers (
id INT PRIMARY KEY, -- 主キー(テーブルに1つ)
name VARCHAR(100),
country_id INT,
sales_rep_id INT
);
-- 外部キーを複数設定(country_id と sales_rep_id)
ALTER TABLE customers
ADD CONSTRAINT fk_country FOREIGN KEY (country_id) REFERENCES countries(id),
ADD CONSTRAINT fk_salesrep FOREIGN KEY (sales_rep_id) REFERENCES employees(id);
-- インデックスを複数作成
CREATE INDEX idx_customers_name ON customers(name);
CREATE INDEX idx_customers_country ON customers(country_id);
- DBMSによる違いメモ:
- 主要な違いの一例として、MySQLのInnoDBでは主キーがクラスタ化インデックス(データが主キー順に格納)になるためクラスタ化インデックスは1つだけです。とはいえ、インデックス自体は複数作れます。
FAQ
Q. 「主キーは必ず1つだけ」と覚えてよいですか?
A. はい。主キー制約は通常テーブルにつき1つだけです。ただし、その主キーが複数列の組合せ(複合主キー)になることはあります。
A. はい。主キー制約は通常テーブルにつき1つだけです。ただし、その主キーが複数列の組合せ(複合主キー)になることはあります。
Q. 同じ列に複数のインデックスを作れますか?
A. 同じ列にまったく同じ内容のインデックスを重複して作ることは意味がなく、多くのDBMSで禁止または無意味です。別の型や別の条件(部分インデックスなど)であれば別途作れる場合があります。
A. 同じ列にまったく同じ内容のインデックスを重複して作ることは意味がなく、多くのDBMSで禁止または無意味です。別の型や別の条件(部分インデックスなど)であれば別途作れる場合があります。
Q. 外部キーは同じ参照先を複数の列で参照できますか?
A. できます。ある表の複数列が別表の主キーの異なる列を参照する、といった設計はあり得ます(設計上の注意は必要)。
A. できます。ある表の複数列が別表の主キーの異なる列を参照する、といった設計はあり得ます(設計上の注意は必要)。
関連キーワード: 主キー、外部キー、インデックス、複合キー、SQL、参照整合性、データベース設計

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

