本文へスキップ

平成22年度 秋期 ITパスポート試験 問79

この問題の解説と、これまでの解答の記録です。

問79
頻出度★★★

関係データベースで管理された“業者”表,“仕入明細”表及び“商品”表がある。新たな業者から新たな商品を仕入れた場合,表にデータを追加する順序のうち,適切なものはどれか。ここで,下線は主キーを示し,破線は外部キーを示す。解答群の→はデータを追加する表の順序を示す。 業者

業者コード業者名

仕入明細

伝票番号枝番日付商品コード数量

商品

商品コード商品名業者コード単価

(下線のうち実線は主キー,破線は外部キーを表す。業者表:業者コードが実線下線。仕入明細表:伝票番号・枝番が実線下線,商品コードが破線下線。商品表:商品コードが実線下線,業者コードが破線下線。)

出典 平成22年度 秋期 ITパスポート試験 問79
解説

問 79

  • 不正解ア

    業者 → 仕入明細 → 商品 の順。2 番目に 仕入明細 表を追加する時点では、商品 表にまだ新商品の行がない。仕入明細表の商品コードは商品表を参照する外部キーなので、参照先が存在せず参照整合性に違反する。商品 は 仕入明細 より先に追加しなければならない。

  • イ

    正解 正解は イ (“業者”表 → “商品”表 → “仕入明細”表)。外部キーは、他の表の主キーの値を参照する列である。参照先の行がまだ存在しないうちに参照する側の行を追加すると、行き先のない参照が生まれてしまう (参照整合性の違反)。したがってデータは必ず参照される側 (親) の表から先に追加する。図の 3 表の参照関係は、商品表の業者コード (破線=外部キー) が業者表の業者コード (主キー) を参照し、仕入明細表の商品コード (破線=外部キー) が商品表の商品コード (主キー) を参照する、という一方向の連なりになっている。つまり 業者 が最上位の親、商品 が中間、仕入明細 が最下位の子である。新たな業者から新たな商品を仕入れた今回は、まず 業者 表にその業者を登録して業者コードを実在させ、次に 商品 表にその業者コードをもつ商品を登録して商品コードを実在させ、最後に 仕入明細 表にその商品コードを使った仕入れの明細を登録する。この 業者 → 商品 → 仕入明細 の順だけが、どの段階でも外部キーの参照先が既に存在している状態を保てる。

  • 不正解ウ

    仕入明細 → 商品 → 業者 の順で、親子関係がまったく逆になっている。最初に追加する 仕入明細 表の商品コードは参照先 (商品表) がなく、続く 商品 表の業者コードも参照先 (業者表) がない。子から親へ遡る順序は、外部キーをもつ表を先に埋めることになるため常に不適切である。

  • 不正解エ

    商品 → 業者 → 仕入明細 の順。仕入明細 を最後にする点は正しいが、最初の 商品 表の追加時点で 業者 表に新業者の行がない。商品表の業者コードは業者表を参照する外部キーなので、この時点で参照整合性に違反する。業者 は 商品 より先でなければならない。

ここがポイント
  • 外部キーと参照整合性: 外部キーの値は参照先の表に実在する主キーの値でなければならない。そのためデータの追加は親 (参照される表) から子 (参照する表) の順に、削除はその逆に子から親の順に行う。
  • 図から参照の連鎖を読む: 破線 (外部キー) がどの表の実線 (主キー) を指しているかを追うと 仕入明細 → 商品 → 業者 という参照の向きが分かる。追加順序はこれを逆にたどった 業者 → 商品 → 仕入明細 になる。
用語

解答の記録