ITの基礎知識|ITパスポート・基本情報

基本情報技術者 平成21年春 午後 問3

2026.05.19

午後問題に共通する注意事項(表記ルールなど)については、下記のリンク先を参照してください。

基本情報技術者 平成21年春 午後問題の注意事項


問題

関係データベースの設計と操作に関する次の記述を読んで,設問1~4に答えよ。

あるスーパーマーケットでは,野菜,魚,肉の各売場に,来店客が食材名を入力するとその食材を使った料理名と4人分のレシピを表示し,印刷して持ち帰ることもできる端末を設置することにした。このシステムは,料理名,使用する食材,レシピなどを関係データベースで管理し,要件に応じて適切な情報を抽出する。

このシステムで使用する表は図1のとおりである。網掛けした項目は主キーを表す。


設問1

データベースを設計するに当たって,エンティティの関係を表すE-R図を作成した。図1の構成におけるE-R図を,解答群の中から選べ。

解答群


設問2

図1の表は,料理ごとに作り方,使用する商品(食材)とその分量を記入して作成したレシピの表を正規化して得られたものである。データベース設計における第1正規化に基づいて実施した処置を,解答群の中から選べ。

解答群

  • ア:実行性能の向上を図り,料理表と分量表に分けた。
  • イ:主キーを一意にするため,料理名に料理IDを割り振った。
  • ウ:商品とその分量という繰返しの要素を排除した。
  • エ:情報の独立性を高めるため,商品名に商品IDを割り振った。

設問3

野菜売場の端末で来店客が好みの野菜を一つ選択したときに,その野菜を使用する料理名をすべて抽出して表示したい。来店客が”じゃがいも”を選択した場合,次のSQL文の空欄に入れる正しい答えを,解答群の中から選べ。

解答群

  • ア:料理表.料理ID = (SELECT 分量表.料理ID FROM 分量表,商品表
      WHERE 商品表.商品名 = ‘じゃがいも’)
  • イ:料理表.料理ID = 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID
      AND 商品表.商品名 = ‘じゃがいも’
  • ウ:料理表.料理ID = 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID
      OR 商品表.商品名 = ‘じゃがいも’
  • エ:料理表.料理ID IN (SELECT 分量表.料理ID FROM 分量表,商品表
      WHERE 商品表.商品名 = ‘じゃがいも’)

設問4

設問3のSQL文では,当日に在庫がない商品を材料に使用する料理名まで表示してしまう。このため,図2に示すとおり,開店時に在庫がある場合は1,ない場合は0を設定する項目”在庫”を追加し,使用する食材すべてについて在庫がある料理名だけを表示できるように商品表を変更する。また,同時にSQL文の可読性を向上させるため,表の結合にはJOIN句を用いる。次のSQL文の [ ]内 に入れる正しい答えを,解答群の中から選べ。

SELECT 料理表.料理名 FROM 料理表
    JOIN 分量表 ON 料理表.料理ID = 分量表.料理ID
    JOIN 商品表 ON 分量表.商品ID = 商品表.商品ID
    WHERE [                  ]

解答群

  • ア:商品表.在庫 != 0 AND 商品表.商品名 = ‘じゃがいも’
  • イ:商品表.在庫 != 0 OR 商品表.商品名 = ‘じゃがいも’
  • ウ:料理表.料理ID IN
        (SELECT 分量表.料理ID FROM 分量表
            JOIN 商品表 ON 分量表.商品ID = 商品表.商品ID
            WHERE 商品表.在庫 = 0)
        AND 商品表.商品名 = ‘じゃがいも’
  • エ:料理表.料理ID NOT IN
        (SELECT 分量表.料理ID FROM 分量表
            JOIN 商品表 ON 分量表.商品ID = 商品表.商品ID
            WHERE 商品表.在庫 = 0)
        AND 商品表.商品名 = ‘じゃがいも’

Show answer

解答

  • 設問1:イ
  • 設問2:ウ
  • 設問3:イ
  • 設問4:エ

解説

設問1

料理と商品は「分量表」を介した多対多の関係(1つの料理に複数の商品、1つの商品が複数の料理に使われる)となっている。それを表す E-R図は「料理 ←(分量)→ 商品」(両方向矢印)となる。→ イ

設問2

第1正規化とは「繰返しグループを排除すること」。元のレシピ表には同一行に複数の(商品・分量)ペアが繰り返されており、それを別テーブル(分量表)として分離した。→ ウ

設問3

3つのテーブル(料理表・分量表・商品表)を結合し、商品名で絞り込む。アは `=` でサブクエリを使っているが複数行返るのでエラー。エは `IN` だが分量表・商品表の結合条件がない。正しい結合条件がすべて揃っているのは イ。

設問4

「在庫=0の商品を使う料理IDをNOT INで除外」し、かつ商品名=’じゃがいも’を使っている料理を抽出する。
ウは「在庫=0の料理IDをIN(含む)」なので逆。→ エ
ア、イに関しては、WHERE句の条件が「各行(料理×食材の組み合わせ)」に対して評価されるため、「その料理の全食材について在庫があるか」を確認できないためNG。