平成30年度 春期 午前Ⅱ 問2
データベース設計
主キーに関する問題
関係データベースの表を設計する過程で,A表とB表が抽出された。主キーはそれぞれ列aと列bである。この二つの表の対応関係を実装する表の設計に関する記述のうち,適切なものはどれか。
A表とB表(原典は図。各表の先頭の列だけ名があり,2列目は空欄。原典の実線の下線は …、破線の下線は〔破線の下線〕で表した):
A
| a |
|---|
B
| 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表に追加して外部キーとしてもよいし,列bをA表に追加して外部キーとしてもよい。
解説
1対1なら、どちらの表に相手の主キーを外部キーとして置いてもよいです。
見分ける軸は、対応関係の種類ごとに、外部キーをどちらの表に置けば1行に1つの値で表せるかです。1対1の場合、A表の1行に対応するB表の行は高々1つで、逆も同じです。そのため、列aをB表に足しても、列bをA表に足しても、1行に1つの値で対応を表せます。正解の記述はこの点を述べています。1対多では、多の側の表に1の側の主キーを外部キーとして置きます。多対多では、どちらの表に置いても1行に複数の値が必要になるので、列aと列bの両方を持つ新しい表を作ります。外部キーは、相手が1つに決まる側に置く、と覚えると迷いません。
ほかの選択肢はなぜ違うのか
- イA表とB表の対応関係が1対多の場合,列b…:1対多では、A表の1行にB表の行が複数対応します。列bをA表に足すと、A表の1行に複数のbの値を持たせる必要が出てしまいます。外部キーは多の側のB表に列aとして置きます。
- ウA表とB表の対応関係が多対多の場合,新し…:多対多を新しい表で表すのは正しい方向ですが、その表に片方の列だけを置いたのでは、どの行とどの行が対応するかを表せません。新しい表には列aと列bの両方を外部キーとして持たせます。
- エA表とB表の対応関係が多対多の場合,列a…:多対多では、A表の1行にもB表の1行にも相手が複数対応します。列aをB表に、列bをA表に足しても、1行には1つの値しか入らないので、複数の相手との対応を表せません。
この問題の用語
- 関係データベースデータを表の形で持ち、表どうしを結びつけて扱う、最も広く使われているデータベース。データの定義や操作にはSQLを使います。
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問2
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問11:参照制約に関する問題(関係データベース)
- 令和6年度 秋期 午前Ⅱ 問5:主キーに関する問題(関係データベース)
- 令和6年度 秋期 午前Ⅱ 問3:ノード分割後のB^+木構造(関係データベース)
- 令和3年度 秋期 午前Ⅱ 問15:入れ子ループ法に関する問題(関係データベース)
- 令和3年度 秋期 午前Ⅱ 問2:UMLに関する問題(関係データベース)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)