ホーム > データベーススペシャリスト試験 > 2013年
データベーススペシャリスト試験 2013年 午前2 問03
データモデリングの過程で、二つのエンティティ間に多対多の対応が生じた。これを関係データベース上に実装する場合、二つのエンティティを表として定義した上で、多対多の対応を表す方策はどれか。
ア:それぞれの表の主キーに対して明示的にインデックスを定義する。
イ:それぞれの表の主キーへの部分関数従属性を排除するように表を分解する。
ウ:それぞれの表の属性間の推移的な関数従属性を排除するように表を分解する。
エ:それぞれの表を参照する外部キーの組合せを主キーの一部とする表を新たに定義する。(正解)
解説
多対多の関係を関係データベースで実装する方法
データモデリングの過程で、二つのエンティティ間に多対多 (many-to-many) の対応関係が生じることがあります。例えば、「学生」と「講義」という二つのエンティティがあり、一人の学生が複数の講義を受講し、また一つの講義にも複数の学生が参加する場合です。
多対多の対応をそのままテーブルで表すと?
- 学生テーブル:主キーは学生ID
- 講義テーブル:主キーは講義ID
このままでは、多対多の対応を一つのテーブルに表すことはできません。
多対多を関係データベースで扱うための方法
多対多の対応を持つ場合は、**中間テーブル(連結テーブル、橋渡しテーブル)**を作成して対応します。
- 中間テーブルには、両方のエンティティの主キーを組み合わせた複合主キーを設定します。
- これにより、中間テーブルの一つのレコードは、学生1人と講義1つの対応を示します。
選択肢の解説
-
ア:「それぞれの表の主キーに対して明示的にインデックスを定義する。」
- インデックスは検索の高速化に役立ちますが、多対多を表現する方法ではありません。
-
イ:「それぞれの表の主キーへの部分関数従属性を排除するように表を分解する。」
- 部分関数従属性を排除することは正規化の一部ですが、多対多の対応を直接表現する方法ではありません。
-
ウ:「それぞれの表の属性間の推移的な関数従属性を排除するように表を分解する。」
- これも正規化の一環であり、多対多の対応とは直接関係ありません。
-
エ:「それぞれの表を参照する外部キーの組合せを主キーの一部とする表を新たに定義する。」
- これは「中間テーブル」を作成することに相当し、多対多の対応を正しく表す方法です。
- 中間テーブルは、二つのエンティティの主キーを外部キーとして持ち、この二つのキーの組合せを主キーとします。
まとめ
- 多対多の関係は、中間テーブルを作ることで関係データベース上で表現する。
- 中間テーブルは、両エンティティの主キーを外部キーとして持ち、その組合せを複合主キーにする。
- これにより、多対多の対応を正しく実装できる。
図解イメージ
以上のことから、正解は エ の「それぞれの表を参照する外部キーの組合せを主キーの一部とする表を新たに定義する。」になります。