午後問題に共通する注意事項(表記ルールなど)については、下記のリンク先を参照してください。
問題
関係データベースの設計と操作に関する次の記述を読んで,設問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 商品表.商品名 = ‘じゃがいも’



