跳到正文

平成26年度 春期 ITパスポート試験 問60

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

問60
頻出度★★★

ファイルで管理されていた受注データを,受注に関する情報と商品に関する情報に分割して,正規化を行った上で関係データベースの表で管理する。正規化を行った結果の表の組合せとして,最も適切なものはどれか。ここで,同一商品名で単価が異なるときは商品番号も異なるものとする。 受注データ

受注番号発注者名商品番号商品名個数単価
T0001山田花子M0001商品 153,000
T0002木村太郎M0002商品 234,000
T0003佐藤秋子M0001商品 123,000
  • 上段の表
    受注番号発注者名
    下段の表
    商品番号商品名個数単価
  • 上段の表
    受注番号発注者名商品番号
    下段の表
    商品番号商品名個数単価
  • 上段の表
    受注番号発注者名商品番号個数
    下段の表
    商品番号商品名単価
  • 上段の表
    受注番号発注者名商品番号個数単価
    下段の表
    商品番号商品名
出典 平成26年度 春期 ITパスポート試験 問60
解説

問 60

  • 错误ア

    订单表中没有商品编号,因此失去了把某笔订单与某件商品关联起来的手段。而且数量本来是每笔订单的信息,却被放在了商品表一侧,当同一件商品被多笔订单订购时就无法正确保存各自的数量。这是拆分之后无法还原原始数据的错误拆分。

  • 错误イ

    订单表和商品表通过商品编号相连这一点是正确的,但数量仍然留在商品表中。数量依赖的是订单编号而不是商品编号,所以在商品表中无法确定对 M0001 应该填 5 还是 2,而且每件商品只能保存一个数量。这是把项目放错了位置。

  • ウ

    正解 规范化是指把混在一张表里的各个项目按照「该项目的值由什么决定(函数依赖)」来拆分,从而消除数据重复以及更新时产生的矛盾。观察订单数据的各个项目可以发现:订货人姓名和数量只要确定了订单编号就随之确定(属于每一笔订单的信息),而商品名和单价只要确定了商品编号就随之确定(属于每一件商品的信息)。实际上 T0001 和 T0003 的商品编号同为 M0001,商品名「商品 1」和单价 3,000 被重复记录了。因此,把与订单有关的信息拆成〈订单编号, 订货人姓名, 商品编号, 数量〉,把与商品有关的信息拆成〈商品编号, 商品名, 单价〉,就能排除商品名和单价的重复;要修改单价时,也只需改动商品表中的一行即可。两张表通过商品编号相连(在订单表一侧是外键,在商品表一侧是主键),所以原来的订单数据可以通过连接运算还原。给出这一组合的正是选项ウ。

  • 错误エ

    单价仍然留在订单表中。根据题目条件「当同一商品名而单价不同时,商品编号也不同」,单价依赖于商品编号,所以单价应当放在商品表中。若把它留在订单表,同一件商品的单价就会按订单笔数重复记录,每次调整单价都要修改多行,还会因漏改而产生矛盾(更新异常)。

ここがポイント
  • 规范化的基本做法是按照「该项目由什么决定(函数依赖)」来拆分表。依赖订单编号的项目(订货人姓名、数量)放入订单表,依赖商品编号的项目(商品名、单价)放入商品表。
  • 拆分后的各表必须能通过共同的项目(这里是商品编号=商品表的主键、订单表的外键)连接起来,并还原出原始数据。通过消除重复来防止更新异常,正是规范化的目的。
用語
解答問60ウ
练这一题

作答记录