平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問2
テクノロジ/データベース関係データベースの表を設計する過程で,A表とB表が抽出された。主キーはそれぞれ列aと列bである。この二つの表の対応関係に基づいた表の設計に関する記述のうち,適切なものはどれか。
出典:平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問2
- ア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対1の対応関係の場合はどちらを「1」側とみなしてもよいため,どちらの向きに外部キーを追加してもよい。1対多の場合は,多側の表に1側の主キーを追加しなければならず,逆向きに追加すると多側の実体が複数の1側の実体に対応してしまい,対応関係を正しく表現できない。多対多の場合は,どちらか一方の表に相手表の主キーを外部キーとして追加するだけでは表現できず,両方の表の主キーを外部キーとしてもつ新しい連関表を作成する必要がある。
選択肢ごとの解説
- ア正しい。1対1の対応関係では,どちらの表を「1」側とみなしても矛盾なく表現できるため,列aをB表に外部キーとして追加してもよいし,列bをA表に外部キーとして追加してもよい。
- イ誤り。1対多の対応関係では,「多」側の表に「1」側の表の主キーを外部キーとして追加する必要がある。A表とB表のどちらが「多」側であるかを踏まえずに,一律に列bをA表に追加するという記述は,A表が「多」側である場合にしか成り立たず,適切な一般論とはいえない。
- ウ誤り。多対多の対応関係を新しい表で表現する場合,その新しい表には,A表とB表の両方の主キー(列aと列bの組合せ)を外部キーとしてもたせる必要がある。どちらか一方だけを外部キーとする方法では,多対多の対応関係を過不足なく表現できない。
- エ誤り。多対多の対応関係を,A表・B表に相手表の主キーをそのまま外部キーとして追加する方法で表現しようとすると,1件のA(又はB)に対して複数のB(又はA)が対応する場合に,一つの列に複数の値を保持する必要が生じてしまい,関係データベースの第1正規形の条件(属性値の原子性)に反する。多対多の対応関係は,新たな連関表を作成することによって表現するのが適切である。