HOME»基本情報技術者平成25年秋期問題»午後問2
基本情報技術者過去問題 平成25年秋期 午後問2
⇄問題文と設問を画面2分割で開く⇱問題PDF問2 データベース
選手情報を管理する関係データベースの設計及び運用に関する次の記述を読んで,設問1~4に答えよ。
ある少年野球リーグの事務局では,登録選手の氏名や成績などの個人情報を管理するために,関係データベースを構築することにした。このリーグには,近隣の8チームが参加している。
まず,リーグに所属するチームと登録選手の情報を管理するために,図1に示すチーム表と選手表を設計した。下線付きの項目は,主キーを表す。
ある少年野球リーグの事務局では,登録選手の氏名や成績などの個人情報を管理するために,関係データベースを構築することにした。このリーグには,近隣の8チームが参加している。
まず,リーグに所属するチームと登録選手の情報を管理するために,図1に示すチーム表と選手表を設計した。下線付きの項目は,主キーを表す。
設問1
チームの対戦成績を管理する表を設計する。次の記述中の に入れる適切な答えを,解答群の中から選べ。
このリーグでは,毎年4月から翌年の3月までを1シーズンとし,試合は各チームが他のチームの全てと1回だけ対戦する総当たり方式で行う。
このデータベースでは,各チームの対戦成績や,勝利投手,敗戦投手などの情報を管理する。チーム成績は勝点によって順位付けする。勝点は,勝利チームに3点,敗戦チームに0点,引分けの場合は両チームに1点ずつを付与する。
最初,図1に示すチーム表に,必要な項目を追加することを考えたが,総当たりで対戦することから,表に繰返し項目が発生することになる。これを改善するためにaした。また,管理する情報の性質上,チーム表や選手表は更新しながら継続的に使用するが,対戦成績はシーズンごとに表を作成して管理したい。さらに,勝利投手や敗戦投手といった,個々の試合に関する情報を管理するには,別の表にした方が扱いやすいと判断して,図2に示す日程表と結果表を作成することにした。ここで,1シーズンで作成される結果表のレコード件数は,b件になる。
このリーグでは,毎年4月から翌年の3月までを1シーズンとし,試合は各チームが他のチームの全てと1回だけ対戦する総当たり方式で行う。
このデータベースでは,各チームの対戦成績や,勝利投手,敗戦投手などの情報を管理する。チーム成績は勝点によって順位付けする。勝点は,勝利チームに3点,敗戦チームに0点,引分けの場合は両チームに1点ずつを付与する。
最初,図1に示すチーム表に,必要な項目を追加することを考えたが,総当たりで対戦することから,表に繰返し項目が発生することになる。これを改善するためにaした。また,管理する情報の性質上,チーム表や選手表は更新しながら継続的に使用するが,対戦成績はシーズンごとに表を作成して管理したい。さらに,勝利投手や敗戦投手といった,個々の試合に関する情報を管理するには,別の表にした方が扱いやすいと判断して,図2に示す日程表と結果表を作成することにした。ここで,1シーズンで作成される結果表のレコード件数は,b件になる。
a に関する解答群
- インデックスを設定
- 第1正規化
- 第2正規化
- 第3正規化
- セキュリティを強化
b に関する解答群
- 48
- 56
- 64
- 98
- 112
- 128
解答選択欄
- a:
- b:
解答
- a=イ
- b=イ
解説
〔aについて〕
関係データベースでは、以下の流れで正規化を行います。
∴a=イ:第1正規化
〔bについて〕
リーグに参加しているチームは8チームで、総当たり方式で試合が行われます。1年間の総試合数は、8チームの中から2チームを選ぶ組合せ数と同じになるので、
8C2=(8×7)/(2×1)=28(試合)
表2の結果表を見ると、1試合につき2件のレコードが作成されることがわかるので、1年間に作成されるレコード件数は、
28×2=56(レコード)
∴b=イ:56
関係データベースでは、以下の流れで正規化を行います。
- 第1正規化
- 繰り返し項目をなくす
- 第2正規化
- 主キー、または主キーの一部によって一意に決まる項目を別表に移す
- 第3正規化
- 主キー以外の項目によって一意に決まる項目を別表に移す
∴a=イ:第1正規化
〔bについて〕
リーグに参加しているチームは8チームで、総当たり方式で試合が行われます。1年間の総試合数は、8チームの中から2チームを選ぶ組合せ数と同じになるので、
8C2=(8×7)/(2×1)=28(試合)
表2の結果表を見ると、1試合につき2件のレコードが作成されることがわかるので、1年間に作成されるレコード件数は、
28×2=56(レコード)
∴b=イ:56
設問2
勝点が多いチームから降順にチーム番号,チーム名,勝点,総得点を表示する。このとき,勝点が等しい場合は,総得点の降順に表示する。次のSQL文の に入れる正しい答えを,解答群の中から選べ。
c に関する解答群
解答選択欄
- c:
解答
- c=イ
解説
SELECT文で、集計関数のSUMを使用して合計勝点と総得点を表示しようとしているので、集計対象をグループ化する必要があります。
勝点と得点が記録されている結果表をチーム番号とチーム名ごとに集計したいので、チーム表と結果表を「チーム表=結果表」で結合させた後 GROUP BY句でチーム番号とチーム名を指定します。
今回は、勝点の降順に整列し、勝点が同じ場合には総得点の降順(数値の大きい順)で表示させたいので、整列方法の指定は以下のようになります。
∴イ
勝点と得点が記録されている結果表をチーム番号とチーム名ごとに集計したいので、チーム表と結果表を「チーム表=結果表」で結合させた後 GROUP BY句でチーム番号とチーム名を指定します。
GROUP BY チーム表.チーム番号,チーム表.チーム名
ORDER BY句は、表の整列を指定する句で整列の基準となる列名と ASC(昇順)、DESC(降順) の組を指定します。(指定がない場合は昇順となる)今回は、勝点の降順に整列し、勝点が同じ場合には総得点の降順(数値の大きい順)で表示させたいので、整列方法の指定は以下のようになります。
ORDER BY 勝点 DESC,総得点 DESC
この2つが適切に指定されている「イ」が正解です。∴イ
設問3
選手個人の打撃成績を管理するために,図3に示す打席表と打撃表を作成した。ホームランを打った数(以下,ホームラン数という)が多い選手から降順に選手番号,選手名,ホームラン数を表示する。次のSQL文の に入れる正しい答えを,解答群の中から選べ。ただし,d1 と d2 に入れる答えは,d に関する解答群の中から組合せとして正しいものを選ぶものとする。
d に関する解答群
解答選択欄
- d:
解答
- d=ア
解説
まずWHERE句の副問合せから考えます。
この副問合せでは、打撃表の中から"名称"がホームランである"打撃結果"を取得しているので、返される結果は"003"になります。
本体のSELECT文のWHERE句では、「打撃表.打者=選手表.選手番号」で打撃表と選手表を結合し、「打撃表.打撃結果=(副問合せ)」で打撃表の打撃結果が"003"である行を抽出しているので、打撃結果がホームランのレコードのみからなる表が返されます。
〔d1について〕
WHERW句による条件指定によって、レコード件数がホームラン数である表ができているので、打者ごとのレコード数を COUNT(*) 数えることでホームラン数を集計できます。
∴d1:COUNT(*)
〔d2について〕
ホームラン数が多い順(降順)に整列して表示したいので、ORDER BY句に DESC を指定するのが適切です。
∴d2:DESC
したがって正しい組合せは「ア」です。
この副問合せでは、打撃表の中から"名称"がホームランである"打撃結果"を取得しているので、返される結果は"003"になります。
本体のSELECT文のWHERE句では、「打撃表.打者=選手表.選手番号」で打撃表と選手表を結合し、「打撃表.打撃結果=(副問合せ)」で打撃表の打撃結果が"003"である行を抽出しているので、打撃結果がホームランのレコードのみからなる表が返されます。
〔d1について〕
WHERW句による条件指定によって、レコード件数がホームラン数である表ができているので、打者ごとのレコード数を COUNT(*) 数えることでホームラン数を集計できます。
∴d1:COUNT(*)
〔d2について〕
ホームラン数が多い順(降順)に整列して表示したいので、ORDER BY句に DESC を指定するのが適切です。
∴d2:DESC
したがって正しい組合せは「ア」です。
設問4
このリーグでは,チーム表や選手表は更新しながら継続的に使用する。対戦成績と打撃成績はシーズンごとに表を作成するが,過去の情報も参照できるように,シーズン終了後も蓄積しておく。
リーグに所属する選手情報の管理について,次の記述中の に入れる適切な答えを,解答群の中から選べ。
新しい選手の情報は,選手表に追加すればよい。リーグを離れる選手の情報は,蓄積されている情報の参照を考慮して,削除せずに残しておいた方がよい。
ある選手がシーズン途中に別のチームへ移籍する場合,選手表のチーム番号を更新すると,例えば,SQL文を用いて当該シーズンにおけるeの集計はできなくなる。移籍前の情報は,抹消日を格納した上でそのまま残して,当該選手に新しい選手番号を割り振って登録する方法もあるが,その場合は,SQL文を用いてfの集計ができなくなる。そこで,このリーグでは,選手の移籍にも柔軟に対処できるように,選手の情報を図4に示すとおり所属選手表と選手表で管理するように変更した。ただし,移籍して元のチームに戻ることはないものとする。
リーグに所属する選手情報の管理について,次の記述中の に入れる適切な答えを,解答群の中から選べ。
新しい選手の情報は,選手表に追加すればよい。リーグを離れる選手の情報は,蓄積されている情報の参照を考慮して,削除せずに残しておいた方がよい。
ある選手がシーズン途中に別のチームへ移籍する場合,選手表のチーム番号を更新すると,例えば,SQL文を用いて当該シーズンにおけるeの集計はできなくなる。移籍前の情報は,抹消日を格納した上でそのまま残して,当該選手に新しい選手番号を割り振って登録する方法もあるが,その場合は,SQL文を用いてfの集計ができなくなる。そこで,このリーグでは,選手の移籍にも柔軟に対処できるように,選手の情報を図4に示すとおり所属選手表と選手表で管理するように変更した。ただし,移籍して元のチームに戻ることはないものとする。
e,f に関する解答群
- 選手ごとのホームラン数
- チームごとの勝点
- チームごとの総得点
- チームごとのホームラン数
- リーグの総得点
- リーグのホームラン数
解答選択欄
- e:
- f:
解答
- e=エ
- f=ア
解説
〔eについて〕
チームごとのホームラン数を集計する場合、打撃表内のレコードのうち打撃結果が"003(ホームラン)"で、「打者が集計対象チームに所属する選手である」レコード数を数えることになります。
別チームへの移籍があるとチーム番号が更新されますが、移籍前のチームや在籍期間などの情報は記録されていません。したがって移籍があった後にホームラン数の集計を行うと、移籍前のチームで記録したホームランが、移籍後チームのものとして集計されてしまうという不具合が生じます。
∴e=エ
〔fについて〕
移籍前のレコードを残したまま、移籍後の情報を新たに登録する方法では、選手表のレコードが1人の選手に対して複数件、存在することになります。
ホームラン数の集計は、打席表の打者と選手表の選手番号を関連付けて行の選択が行われます。しかしこの方式では、同じ選手の打席情報でも移籍前と移籍後で選手番号が異なるために別々での集計がされてしまい、選手ごとのホームラン数の合計が集計できないという不具合が生じます。
∴f=ア
チームごとのホームラン数を集計する場合、打撃表内のレコードのうち打撃結果が"003(ホームラン)"で、「打者が集計対象チームに所属する選手である」レコード数を数えることになります。
別チームへの移籍があるとチーム番号が更新されますが、移籍前のチームや在籍期間などの情報は記録されていません。したがって移籍があった後にホームラン数の集計を行うと、移籍前のチームで記録したホームランが、移籍後チームのものとして集計されてしまうという不具合が生じます。
∴e=エ
〔fについて〕
移籍前のレコードを残したまま、移籍後の情報を新たに登録する方法では、選手表のレコードが1人の選手に対して複数件、存在することになります。
ホームラン数の集計は、打席表の打者と選手表の選手番号を関連付けて行の選択が行われます。しかしこの方式では、同じ選手の打席情報でも移籍前と移籍後で選手番号が異なるために別々での集計がされてしまい、選手ごとのホームラン数の合計が集計できないという不具合が生じます。
∴f=ア