FE22春後問3

FE22春後問3

基本情報技術者試験平成22年度春午後問3


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


 ある中学校では,これまで表計算ソフトを使用して管理していた試験の成績をデータベース化することになった。この中学校に在籍している,又は過去に在籍したことがある生徒及び教員の情報を管理するデータベースは既に運用中であり,これらと連携させて運用する。

 現在運用中のデータベースの構造は図1のとおりである。下線付きの項目は主キーを表す。

生徒表
f:id:tamagopanda:20100802204722p:image

履歴表
f:id:tamagopanda:20100802204724p:image
注 教員番号には,担任教員を識別する教員番号が格納されている。

教員番号
f:id:tamagopanda:20100802204723p:image


図1 現在運用中のデータベースの構造

 この中学校は,1 年度が 3 期に分かれており,それぞれの期中に中間試験と期末試験を実施している。試験科目は,国語,数学,英語,理科,社会の 5 科目である。また,試験は学年別,科目別に統一した問題で行われている。


設問1

 成績を管理するデータベースの構造について,案A及び案Bが提案された。次の記述中の [  ] に入れる正しい答えを,解答群の中から選べ。


案 A
生徒番号,年度,試験 ID を主キーとして管理する。
成績表
f:id:tamagopanda:20100802205442p:image
注 国語,数学,英語,理科,社会には,それぞれの科目の得点が格納される。

試験表
f:id:tamagopanda:20100802205532p:image
注 試験名には,試験の名称(1学期中間,1学期期末,2学期中間,2 学期期末,3 学期中間,3 学期期末)が格納される。

案 B
生徒番号,年度,試験 ID,科目 ID を主キーとして管理する。
成績表
f:id:tamagopanda:20100802204725p:image
注 得点には,当該試験の科目IDで識別される科目の得点が格納される。

試験表
f:id:tamagopanda:20100802205532p:image
注 試襲名には,試験の名称(1 学期中間,1 学期期末,2 学期中間,2 学期期末,3 学期中間,3 学期期末)が格納される。

科目表
f:id:tamagopanda:20100802205633p:image
注 科目名には,科目の名称(国語,数学,英語,理科,社会)が格納される。

 データベースを設計する上で,拡張性の考慮は重要である。その点,案 B は案 A と比較して [ a ] に対して柔軟に対応することができる。その反面,表の増加に伴い,データを検索する際の SQL 文が複雑になりやすく,また, 1 人の生徒の 1 年間の成績を格納するために必要な成績表のレコード件数は,案 A では [ b ] 件で済むが,案 B では [ c ] 件となる。扱うデータの総量にもよるが,長期の運用を考えた場合,これらの点はデータ操作時の性能にも影響を与えるおそれがある。

 データベースの設計においては,運用時の利用形態を想定した上で,操作性,拡張性,実行性能などを多角的に評価する必要がある。この中学校では操作性を重視して案 A を採用した。


a に関する解答群
ア 学期の増減
イ 試験回数の増減
ウ 試験科目の増減
エ 生徒の増減
b,c に関する解答群
ア 2
イ 4
ウ 6
エ 12
オ 24
カ 30
キ 48
ク 60

設問2

 2009 年度 1 学年の 2 学期中間試験を対象に,生徒ごとの全科目合計点を求め,降順に整列して表示する。次の SQL 文の [  ] に入れる正しい答えを,解答群の中から選べ。


SELECT 生徒表.氏名,クラス,国語+数学+英語+理科+社会
  FROM生徒表,履歴表,成績表,試験表
  WHERE生徒表.生徒番号=履歴表.生徒番号
     AND 履歴表.生徒番号=成績表.生徒番号
     AND 成績表.試験ID=試験表.試験ID
     AND [            ]
  ORDER BY 国語+数学+英語+理科+社会 DESC

解答群
ア 履歴表.年度=2009 AND 履歴表.学年=1
  AND 試験表.試験名='2学期中間'

イ 履歴表.年度=2009 AND 履歴表.学年=1
  AND 試験表.試験名='2学期中間' AND 成績表.年度=2009

ウ 履歴表.年度=2009 AND 履歴表.学年=1
  AND 試験表.試験ID=(SELECT試験ID FROM 試験表 WHERE 試験表.試験名='2学期中間')

エ 履歴表.年度=2009 AND 履歴表.学年=1
  AND 試験表.試験ID=ANY(SELECT 試験ID FROM 試験表 WHERE 試験表.試験名='2学期中間')

設問3

 2008 年度 1 学年を対象に,1 年間に実施したすべての試験の各科目の平均点をクラスごとに求め,担任教員の氏名とともに表示する。次の SQL 文の [  ] に入れる正しい答えを,解答群の中から選べ。

SELECT クラス,教員表.氏名,AVG(国語),AVG(数学),AVG(英語),AVG(理科),AVG(社会)
  FROM履歴表,成績表,教員表
  WHERE [             ] 
  ORDER BY クラス

解答群
ア 履歴表.生徒番号=成績表.生徒番号
  AND履歴表.教員番号=教員表.教員番号
  AND履歴表.年度=2008 AND 履歴表.学年=1
  GROUP BY クラス,教員表.氏名

イ 履歴表.生徒番号=成績表.生徒番号
  AND 履歴表.教員番号=教員表.教員番号
  AND 履歴表.年度=2008 AND 履歴表.学年=1
  AND 成績表.年度=2008
  GROUP BY クラス,教員表.氏名

ウ 履歴表.生徒番号=成績表.生徒番号
  AND 履歴表.年度=2008 AND 履歴表.学年=1
  AND 成績表.試験ID=ANY(SELECT 試験ID FROM 試験表)
  GROUP BY クラス,教員表.氏名

エ 履歴表.生徒番号=成績表.生徒番号
  AND 履歴表.年度=2008 AND 履歴表.学年=1
  AND 履歴表.教員番号=ANY(SELECT 教員番号 FROM 教員表)
  GROUP BY クラス,教員表.氏名

設問4

 生徒“情報太郎”の成績を,試験 ID の昇順に表示する。次の SQL 文の [  ] に入れる正しい答えを,解答群の中から選べ。

 なお,生徒“情報太郎”が複数人いた場合は,過去に在籍したことがある生徒も含めて生徒番号の昇順に表示する。


SELECT生徒表.生徒番号,成績表.年度,試験名,国語,数学,英語,理科,社会
  FROM生徒表,成績表,試験表
  WHERE [              ] 
  ORDER BY生徒表.生徒番号,成績表.年度,試験表.試験ID

解答群
ア 生徒表.生徒番号=成績表.生徒番号
  AND 成績表.試験ID=試験表.試験ID
  AND 生徒表.氏名='情報太郎'

イ 生徒表.生徒番号=成績表.生徒番号
  AND 成績表.試験ID=試験表.試験ID
  AND 生徒表.氏名='情報太郎'
  AND 生徒表.生徒番号=(SELECT 生徒番号 FROM 生徒表)

ウ 成績表.生徒番号=(SELECT 生徒番号 FROM 生徒表 WHERE 氏名='情報太郎')
  GROUP BY 試験表.試験ID

エ 成績表.生徒番号=(SELECT 生徒番号 FROM 生徒表 WHERE 氏名='情報太郎')
  GROUP BY 成績表.年度


問題掲載者による注意書き

  • 実際の問題文をテキスト化するにあたり,表記の難しい部分を以下のように置き換えている。
    • 空欄[ a ][ b ][ c ]等は,実際の問題文中では,四角で囲まれた,a,b,c だったが,[ ]で置き換えた。