跳到正文

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

这道题的解析和你的作答记录。

問79
頻出度★★★

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

業者コード業者名

仕入明細

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

商品

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

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

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

問 79外键与参照完整性:外键的值必须是被引用表中真实存在的主键值

  • 错误ア

    这是 业者 → 进货明细 → 商品 的顺序。在第二步添加进货明细表的时点,商品表中还没有新商品的行。进货明细表的商品编码是引用商品表的外键,因此引用目标不存在,违反参照完整性。商品必须比进货明细先添加。

  • イ

    正解 正确答案是 イ(「业者」表 → 「商品」表 → 「进货明细」表)。外键是引用其他表主键值的列。如果被引用的行尚未存在就先添加引用方的行,就会产生无处可指的引用(违反参照完整性)。因此数据必须从被引用的一方(父表)开始先添加。图中 3 个表的引用关系构成单向的链条:商品表的业者编码(虚线=外键)引用业者表的业者编码(主键),进货明细表的商品编码(虚线=外键)引用商品表的商品编码(主键)。也就是说,业者是最上层的父,商品处于中间,进货明细是最下层的子。本题是从新的业者进货了新的商品,所以要先在业者表中登记该业者、使业者编码真实存在,接着在商品表中登记带有该业者编码的商品、使商品编码真实存在,最后在进货明细表中登记使用该商品编码的进货明细。只有按 业者 → 商品 → 进货明细 这个顺序,才能在任何阶段都保持外键的引用目标已经存在。

  • 错误ウ

    这是 进货明细 → 商品 → 业者 的顺序,父子关系完全颠倒。最先添加的进货明细表中的商品编码没有引用目标(商品表),接着添加的商品表中的业者编码也没有引用目标(业者表)。从子向父回溯的顺序会先填入带有外键的表,因此总是不恰当的。

  • 错误エ

    这是 商品 → 业者 → 进货明细 的顺序。把进货明细放在最后这一点是正确的,但在最先添加商品表的时点,业者表中还没有新业者的行。商品表的业者编码是引用业者表的外键,因此在这个时点就违反了参照完整性。业者必须比商品先添加。

ここがポイント
  • 外键与参照完整性:外键的值必须是被引用表中真实存在的主键值。因此添加数据要按父(被引用表)到子(引用方表)的顺序进行,删除则相反,按子到父的顺序进行。
  • 从图中读出引用的链条:追踪虚线(外键)指向哪张表的实线(主键),就能看出 进货明细 → 商品 → 业者 这一引用方向。添加顺序就是把它反过来的 业者 → 商品 → 进货明细。
用語
解答問79イ
练这一题

作答记录