平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3
テクノロジ/データベース関係データベースの表を設計する過程で,A表とB表が抽出された。主キーはそれぞれ列aと列bである。この二つの表の対応関係を実装する表の設計に関する記述のうち,適切なものはどれか。 A(a,…) ※aが主キー B(b,…) ※bが主キー
出典:平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問3
- アA表とB表の対応関係が1対1の場合,列aをB表に追加して外部キーとしてもよいし,列bをA表に追加して外部キーとしてもよい。
- イA表とB表の対応関係が1対多の場合,列bをA表に追加して外部キーとする。
- ウA表とB表の対応関係が多対多の場合,新しい表を作成し,その表に列aか列bのどちらかを外部キーとして設定する。
- エA表とB表の対応関係が多対多の場合,列aをB表に,列bをA表にそれぞれ追加して外部キーとする。
正解:ア
解説
二つの表の対応関係を関係データベースの表として実装する場合,1対1の関係では,どちらの表に相手の主キーを外部キーとして追加してもよい(A表に列bを追加してもよいし,B表に列aを追加してもよい)。1対多の関係では,多側の表に,1側の表の主キーを外部キーとして追加する。多対多の関係では,どちらか一方の表に相手の主キーを追加するだけでは表現できないため,両方の主キーを組み合わせた新しい表(連関表)を作成し,その表に両方の主キー(列aと列bの両方)を外部キーとして設定する必要がある。
選択肢ごとの解説
- ア正しい。1対1の関係では,一方の表の主キーを他方の表に外部キーとして追加すればよく,どちら向きに追加してもよい。列aをB表に追加してもよいし,列bをA表に追加してもよい。
- イ誤り。1対多の関係の場合,多側の表に1側の表の主キーを外部キーとして追加する必要がある。「列bをA表に追加する」のではなく,A表とB表のどちらが多側かによって,多側の表に相手の主キーを追加するのが正しい(例えばA表が多側であれば,列bをA表に追加するのは正しいが,設問の記述だけでは常に成り立つとは限らない一般的な誤りを含む)。
- ウ誤り。多対多の関係を実装するには新しい表(連関表)を作成する必要がある点は正しいが,その表には列aと列bの両方を外部キーとして設定する必要があり,どちらか一方だけでは元の対応関係を表現できない。
- エ誤り。多対多の関係を新しい表を作らずにA表・B表に互いの主キーを追加するだけで実装しようとしても,1対多の関係の組合せにしかならず,多対多の対応関係を正しく表現できない。多対多の関係には新しい連関表が必要である。