データベース設計(全65問中42問目)
No.42解説へ
関係データベースの"注文"表又は"商品"表の行を削除する場合,"注文明細"表に対する操作として,適切な組合せはどれか。ここで,表定義中の実線の下線は主キーを,破線は外部キーを表す。〔削除時の操作〕
A: 主キー側の行を削除する際,それを参照している外部キー側の行を同時に削除する。
B: 主キー側の行を削除する際,それを参照している外部キー側の行があれば,主キー側の行の削除を許さない。
A: 主キー側の行を削除する際,それを参照している外部キー側の行を同時に削除する。
B: 主キー側の行を削除する際,それを参照している外部キー側の行があれば,主キー側の行の削除を許さない。
出典:平成21年春期 問34
広告
解説
まず"注文"表の行の削除ですが、一般に1回の注文について複数の商品を受注することが考えられるので"注文"表の1つの行について"注文明細"表の行が複数存在することになります(注文-注文明細=1対多)。"注文"表の行を削除する(1つの注文を取り消す)場合にはそれに対応する"注文明細"表の行のすべてを削除する必要があるので、このときの操作は[A]が適切となります。
次に"商品"表の行の削除ですが、1つの商品は複数の注文に使われるので"商品"表のある1つの行を参照する"注文明細"表の行が複数存在する可能性があります。"商品"の行を削除する場合、"注文明細"表に"商品"表内の存在しない行を参照する行が生じることがあり、参照整合性が崩れる可能性があります。(このときに[A]の処理を適用して対応する"注文明細"表の行をすべて削除してしまうと、商品のデータ削除したいだけなのに注文明細のデータまで削除してしまうことになります。)このような場合には「"注文明細"表に"商品"表の削除対象の行を参照する行がある場合にはその行を削除できない」という参照制約を設定することでデータの矛盾を防ぎます。
したがって注文"表の行の削除→[A]の操作、"商品"表の行の削除→[B]の操作 が適切となります。
次に"商品"表の行の削除ですが、1つの商品は複数の注文に使われるので"商品"表のある1つの行を参照する"注文明細"表の行が複数存在する可能性があります。"商品"の行を削除する場合、"注文明細"表に"商品"表内の存在しない行を参照する行が生じることがあり、参照整合性が崩れる可能性があります。(このときに[A]の処理を適用して対応する"注文明細"表の行をすべて削除してしまうと、商品のデータ削除したいだけなのに注文明細のデータまで削除してしまうことになります。)このような場合には「"注文明細"表に"商品"表の削除対象の行を参照する行がある場合にはその行を削除できない」という参照制約を設定することでデータの矛盾を防ぎます。
したがって注文"表の行の削除→[A]の操作、"商品"表の行の削除→[B]の操作 が適切となります。
広告