ITパスポート 2018年 秋期 問100
問題文
レコードの関連付けに関する説明のうち、関係データベースとして適切なものはどれか。
選択肢
ア:複数の表のレコードは、各表の先頭行から数えた同じ行位置で関連付けられる。
イ:複数の表のレコードは、対応するフィールドの値を介して関連付けられる。(正解)
ウ:レコードとレコードは、親子関係を表すポインタで関連付けられる。
エ:レコードとレコードは、ハッシュ関数で関連付けられる。
🔒 解説は解答すると表示されます
レコードの関連付けに関する説明【ITパスポート 解説】
正解の理由
複数の表のレコードを関連付ける関係データベース(リレーショナルデータベース:関係データを表(テーブル)で管理する方式)では、各表の対応するフィールド(列)の値を使って結び付けます。つまり、ある表の「主キー(primary key:その表でレコードを一意に識別する値)」を、別の表の「外部キー(foreign key:他の表の主キーを参照するフィールド)」として持たせることで関係を作ります。したがって、選択肢のうち正しいのは イ です。
例:顧客表(Customer)の customer_id を主キーにし、注文表(Order)の customer_id を外部キーにすると、ある顧客とその注文を結び付けられます。
解法ステップ
- 「関係データベース(リレーショナルデータベース)」の基本を思い出す:表(テーブル)どうしはキーの値で結び付ける。
- 各選択肢がこの仕組みに当てはまるかを順に検討する。
- 「値(フィールドの値)で関連付ける」説明が一致する選択肢が正しいと判断する。
実際のイメージ(SQLの例):
-- 顧客テーブル
CREATE TABLE Customer (
customer_id INT PRIMARY KEY,
name VARCHAR(100)
);
-- 注文テーブル
CREATE TABLE Order (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);
-- 顧客と注文を結び付けて取得(結合)
SELECT c.name, o.order_id
FROM Customer c
JOIN Order o ON c.customer_id = o.customer_id;
選択肢別の誤答解説
-
ア: 「各表の先頭行から数えた同じ行位置で関連付けられる」
行の位置(何行目か)で関連付けるのは表の並び順やスプレッドシート的な考え方です。関係データベースは位置に依存しません。レコードの並び順は変わることがあり、位置での関連付けは正しくありません。 -
イ: 「対応するフィールドの値を介して関連付けられる」
正しい。主キーと外部キーなど、フィールドの値でレコード同士を結び付けます。 -
ウ: 「レコードとレコードは、親子関係を表すポインタで関連付けられる」
ポインタ(pointer:メモリ上の別の場所を指す参照)はプログラミングや一部のデータ構造で使われます。古い階層型データベースやネットワーク型データベースではナビゲーション的にポインタが使われることがありますが、リレーショナルモデルの概念としてはキーによる値の一致で関連付けます。したがって誤りです。 -
エ: 「レコードとレコードは、ハッシュ関数で関連付けられる」
ハッシュ関数(データを固定長の値に変換する関数)は索引(インデックス)や高速検索に使われますが、テーブル間の論理的な関係付け(どの顧客の注文かを表す)を決める仕組みではありません。ハッシュは内部処理や検索最適化の技術であり、関係データベースの基本概念とは異なります。
よくある誤解
-
「表の行番号(位置)でつながっている」
スプレッドシートだと同じ行に関連データを置くことが多いですが、関係データベースはフィールド値(キー)で結び付けます。行の順序は保証されません。 -
「ポインタ=関係付け」
ポインタという言葉を聞くと「参照でつながる」と思いがちですが、リレーショナルモデルは値の一致(キー)を基本にします。内部実装でポインタを使う場合があっても論理モデルとは別です。 -
「ハッシュがあれば結び付けられる」
ハッシュは一致判定や高速検索に使えますが、テーブル間の参照関係(誰が誰の注文か)を定義するものではありません。
補足コラム
参照整合性(referential integrity:参照の一貫性を保つルール)という考え方があります。これは「外部キーが指す主キーが必ず存在する」ことを保証する仕組みです。例えば、注文テーブルにある customer_id に対応する顧客が存在しなければ整合性違反になります。実務ではこれをデータベースにルールとして設定して、誤ったデータ入力を防ぎます。
また、テーブル間の結び付けは SQL の JOIN(結合)で実行します。JOIN の種類(INNER JOIN、LEFT JOIN など)で「関連がある行だけ取るか」「関連がなくても親の行は残すか」を制御できます。
FAQ
Q1. 「リレーショナルデータベースでポインタはまったく使われないですか?」
A1. 論理モデルとしては使いませんが、データベース管理システム(DBMS:Database Management System、データベースを管理するソフトウェア)の内部実装では効率化のためにポインタやリンク構造を使うことがあります。ただし学習や設計ではキーによる関連付けを考えます。
A1. 論理モデルとしては使いませんが、データベース管理システム(DBMS:Database Management System、データベースを管理するソフトウェア)の内部実装では効率化のためにポインタやリンク構造を使うことがあります。ただし学習や設計ではキーによる関連付けを考えます。
Q2. 「外部キーと主キーの違いは何ですか?」
A2. 主キーはその表でレコードを一意に識別する値です。外部キーは別の表の主キーを参照するフィールドで、表どうしをつなぐために使います。
A2. 主キーはその表でレコードを一意に識別する値です。外部キーは別の表の主キーを参照するフィールドで、表どうしをつなぐために使います。
Q3. 「ハッシュ関数は全く出てこないのですか?」
A3. 出てきますが主に検索やインデックス(高速化)の場面です。テーブル間の論理的な関係(誰と誰が結びつくか)を決めるものではありません。
A3. 出てきますが主に検索やインデックス(高速化)の場面です。テーブル間の論理的な関係(誰と誰が結びつくか)を決めるものではありません。
関連キーワード: 関係データベース、リレーショナルモデル、主キー、外部キー、参照整合性、フィールド、レコード、JOIN、ハッシュ関数、ポインタ、SQL、DBMS

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

