インフラエンジニアは人間じゃない

インフラエンジニアのブログ。毎週水曜日19:00更新。

データベーススペシャリスト試験 午前2 問題と解説

こんばんは。

データベーススペシャリストのねるです。

 

今回は次の問題を解いてみましょう。

平成30年春季 午前2の問2の問題です。

 

<問題>

関係データベースの表を設計する過程でA表とB表が抽出された。

主キーはそれぞれ列aと列bである。

この二つの表の対応関係を実装する表の設計に関する記述のうち、

適切なものはどれか。

 

<選択肢>

ア A表とB表の対応関係が1対1の場合、列aをB表に追加して外部キーとしてもよいし、列bをA表に追加して外部キーとしてもよい。

イ A表とB表の対応関係が1対多の場合、列bをA表に追加して外部キーとする。

ウ A表とB表の対応関係が多対多の場合、新しい表を作成し、その表に列aか列bのどちらかを外部キーとして設定する。

エ A表とB表の対応関係が多対多の場合、列aをB表に、列bをA表にそれぞれ追加して外部キーとする。

 

<解説>

A表とB表の対応関係が1対1の場合、アの通りどちらかの表に、

どちらかの主キーであるa列またはb列を外部キーとする事で、関係が成り立ちます。

 

A表とB表の対応関係が1対多の場合、多側であるB表に列aを外部キーとして追加します。

例えば、A表を注文テーブルと仮定して、B表を注文明細テーブルと仮定します。

注文明細テーブルに注文テーブルの主キー(例えば注文番号)を追加します。

注文テーブルに注文明細番号があると、おかしいですよね。

したがって、イは逆になっているため誤りです。

 

A表とB表の対応関係が多対多の場合、新しい表を1つ作成します。

この新しい表のことを「連関テーブル(中間テーブル)」と呼びます。

そして、この連関テーブルには、A表とB表の主キーの組み合わせを追加します。

したがって、ウはどちらか一方の主キーしか追加しないと記述しているため誤りです。

 

また、エもウと同様で対応関係が多対多の場合の対応として誤っています。