令和6年度 秋期 データベーススペシャリスト試験 午後I 問題 問3 データベース物理設計と性能見積り

テクノロジデータベース

この問題は2024(R6)秋 データベーススペシャリスト 午後Iに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

学習ガイド

プロジェクト稼働管理システムを題材に、テーブル定義・SQL設計・性能見積りを一気通貫で問うデータベース物理設計の問題です。表2・表3の統計情報からアクセスページ数を見積もる数値設問が6問あり、クラスター性の理解が正否を分けます。この記事では、参照制約の実装上の注意から始め、各数値がどの統計値とどの式から導かれるのかを計算過程を省かずにたどります。

この記事で押さえる論点

  • 参照制約・検査制約をCREATE TABLE文で正しく実装する
  • 統計情報(列値個数)と索引のクラスター性から性能を見積もる
  • アクセスするページ数の計算を統計値から積み上げる

問題本文

情報システム会社のプロジェクト稼働管理システムのデータベース物理設計・SQL設計・性能に関する次の記述を読んで,設問に答えよ。

情報システム会社のE社は,自社のプロジェクト稼働管理システム(以下,PJシステムという)を,RDBMSを用いて更改することになり,Fさんが実装を任された。

〔RDBMSの主な仕様〕

  1. DMLのアクセス経路は,RDBMSによって索引探索又は表探索が選択される。
  2. 索引は,クラスタ性という性質によって,高クラスタな索引と低クラスタな索引に分けられる。
  • 高クラスタな索引は,キー値の順番と,キーが指す行の物理的な並び順が一致しているか,完全に一致していなくても,隣接するキーが指す行が同じページに格納されている割合が高い。
  • 低クラスタな索引は,キー値の順番と,キーが指す行の物理的な並び順が一致している割合が低く,行へのアクセスがランダムになる。

〔業務の概要〕

  1. 組織,従業員,役職,ランク,時間単価
    (1) E社には,複数の組織がある。組織は階層構造であり,最上位の組織以外はいずれか一つの上位組織に属する。
    (2) 従業員は,従業員コードで識別し,いずれか一つの組織に属する。
    (3) 役職には,SE,シニアSE,マネージャなどがある。役職は役職コードで識別する。従業員はいずれか一つの役職をもつ。
    (4) ランクは,労務費の時間単価を区別するもので,ランクコードで識別する。役職はいずれか一つのランクに対応する。
    (5) 時間単価は,ランク別組織別年月日別に決めている。組織の変更,従業員の異動などによって,月初に時間単価を見直すことがある。

  2. プロジェクト,稼働計画,稼働実績
    (1) プロジェクト(以下,PJという)は,従業員の稼働状況を管理する単位である。従業員は複数のPJに参加することがあり,PJに参加していない従業員も一部いる。
    (2) PJに必要な人員を要員という。
    (3) PJ開始前に稼働計画を立案するとき,要員ごと参加年月ごとに計画時間を見積もる。参加する従業員が確定したとき,稼働計画の要員に対して従業員を割り当てる。PJ開始後,必要に応じて計画を修正する。
    (4) PJに参加している各従業員は,稼働実績として月内の日別PJ別の稼働時間を入力する。従業員は同じ日に複数PJの稼働時間を入力できる。

〔PJシステムのテーブル〕

  1. テーブル構造,列の意味・制約,統計情報・索引定義
    主なテーブルのテーブル構造を図1に,主な列の意味・制約を表1に示す。また,“従業員”テーブルの主な統計情報・索引定義を表2に,“稼働実績”テーブルの主な統計情報・索引定義を表3に示す。
図1 主なテーブルのテーブル構造
図の説明テキスト

以下のリレーションスキーマが示されている。実線下線は主キー、破線下線は外部キーを表している。
組織 (組織コード, 組織名, 発足年月日, 廃止年月日, 組織長従業員コード, 上位組織コード)
従業員 (従業員コード, 従業員氏名, 組織コード, 役職コード, 退職年月日, 更新年月日)
従業員履歴 (従業員コード, 更新年月日, 従業員氏名, 組織コード, 役職コード)
役職 (役職コード, 役職名, ランクコード)
時間単価 (ランクコード, 組織コード, 適用開始年月日, 時間単価)
ランク (ランクコード, ランク名)
PJ (PJコード, PJ名, 開始年月日, 終了年月日, PM従業員コード)
稼働計画 (PJコード, 要員番号, 計画年, 計画月, ランクコード, 従業員コード, 計画時間)
稼働実績 (PJコード, 稼働年月日, 従業員コード, 稼働時間)

表1 主な列の意味・制約
図の説明テキスト
列名 意味・制約
上位組織コード 組織が属する上位組織の組織コード。最上位組織の上位組織コードには NULL を設定する。
更新年月日 "従業員" テーブルの列値を更新した日付
PM従業員コード PJ を管理する従業員の従業員コード
要員番号 稼働計画において PJ 内で要員を一意に識別する通し番号。要員に従業員が割り当てられていない場合, 当該要員の従業員コードには NULL を設定する。
計画時間 PJ ごと要員ごと計画年ごと計画月ごとに見積もった作業計画。単位は時間。
稼働時間 PJ ごと稼働年月日ごと従業員ごとの作業実績。単位は時間。
表2 “従業員”テーブルの主な統計情報・索引定義(一部省略)
図の説明テキスト
上段:行数、下段:ページ当たり行数 列名 列値個数 主索引(列の定義順) 副次索引1(列の定義順)
8,800行
20行/ページ
従業員コード 8,800 1
従業員氏名 8,750
組織コード 400 1
表3 “稼働実績”テーブルの主な統計情報・索引定義
図の説明テキスト
上段:行数、下段:ページ当たり行数 列名 列値個数 主索引(列の定義順) 副次索引1(列の定義順) 副次索引2(列の定義順)
9,600,000行
100行/ページ
PJコード 5,000 1
稼働年月日 1,000 2 1
従業員コード 8,000 3 1
稼働時間 (網掛け) (網掛け) (網掛け) (網掛け)
注記 網掛け部分は表示していない。
  1. “従業員”テーブルの行更新における更新履歴処理
    “従業員”テーブルの組織コード,役職コードを更新するとき,当該従業員の更新前の行を更新の履歴として“従業員履歴”テーブルに挿入する。

  2. “組織”テーブルの行削除処理
    E社では,組織の改廃がある。PJ管理に不要になった組織コードを削除する場合,次のような手順で行う。
    ① 廃止済みの組織であり,かつ,PJが終了済みなどPJ管理に不要と判断できる組織コードを,SELECT文を用いて調べる。
    ② ①で調べた組織コードの行を,“組織”テーブルからDELETE文を用いて削除する。

〔テーブルの定義と実装〕

  1. テーブルの定義
    (1) Fさんは,図1中の各テーブルを定義する CREATE TABLE文を設計した。ここで,各 CREATE TABLE文には外部キー制約を実装することとした。そのうち,“組織”テーブルを定義する CREATE TABLE文を,図2に示す。
図2 “組織”テーブルを定義する CREATE TABLE 文
図の説明テキスト

CREATE TABLE 組織 (
組織コード CHAR(8) NOT NULL PRIMARY KEY,
組織名 VARCHAR(50) NOT NULL,
発足年月日 DATE NOT NULL,
廃止年月日 DATE,
組織長従業員コード CHAR(8),
上位組織コード CHAR(8),
FOREIGN KEY (組織長従業員コード) REFERENCES 従業員 (従業員コード) ON DELETE RESTRICT,
FOREIGN KEY (上位組織コード) REFERENCES 組織 (組織コード) ON DELETE RESTRICT)

(2) Fさんは,他の表が未定義の状態で“組織”テーブルを定義する図2のCREATE TABLE文を実行したところ失敗した。そこで,Fさんは,図2のCREATE TABLE文を見直し,次の①~③の順番で定義を実行したところ,全ての実行が成功した。
① “組織”テーブルを定義する図2中から,aを外部キーとする指定を削除したCREATE TABLE文を実行する。
② “従業員”,“役職”,“時間単価”,“ランク”の各テーブルを定義するCREATE TABLE文を“b”,“c”,“役職”,“d”の順番で実行する。
③ “組織”テーブルに対するe文を用いて,aを外部キーとする指定の定義を追加する。

  1. テーブルへの行登録
    次に,Fさんは,“組織”テーブルにINSERT文を用いて行を挿入した。次いで“従業員”,“役職”,“時間単価”,“ランク”の各テーブルに対してもINSERT文を用いて行を挿入した。その後,UPDATE文で適宜列値を更新した。

〔稼働計画の立案・稼働実績の確認〕

Fさんは,稼働計画の立案及び稼働実績の確認を支援するためのSQL文を設計した。設計したSQL文の例を,表4に示す。

表4 稼働計画の立案及び稼働実績の確認を支援する SQL 文の例
図の説明テキスト
SQL SQL文の構文(上段:目的、下段:構文)
SQL1 要員が埋まらないPJがあるので、2024年11月の稼働計画において役職コードがSEの従業員を対象に、稼働計画に登録されていない従業員も含めて要員を探す。従業員に対して、組織ごとに計画時間の少ない順に順序付けし、順序に沿って従業員数が均等となるように1〜3の番号を付与した“時間階級”、及び従業員全体で計画時間の少ない順に順位付けした“時間ランク”を算出する。結果行は組織コード順、時間ランクが低い順、従業員コード順に並べる。ここで、稼働計画にない従業員の計画時間はゼロで表示する。

SELECT 組織コード, A.従業員コード, COALESCE(SUM(計画時間), 0) AS 計画時間合計,
NTILE(3) OVER ( PARTITION BY ORDER BY ) AS 時間階級,
RANK() OVER ( ORDER BY ) AS 時間ランク
FROM A LEFT OUTER JOIN B
ON A.従業員コード = B.従業員コード AND 計画年 = '2024' AND 計画月 = '11'
WHERE 役職コード = 'SE'
GROUP BY 組織コード, A.従業員コード ORDER BY 組織コード,時間ランク,A.従業員コード
SQL2 指定した組織に所属する従業員の指定した月の1か月分の稼働時間の合計を調べる。

SELECT SUM(稼働時間) AS 稼働時間合計
FROM 稼働実績 K JOIN 従業員 S ON K.従業員コード = S.従業員コード
AND 組織コード = :hv1
AND 稼働年月日 BETWEEN :hv2 AND :hv3

注記 ホスト変数の hv1 には組織コードを,hv2 には開始年月日(例:2024-06-01)を,hv3 には終了年月日(例:2024-06-30)を設定する。

〔問合せの性能改善〕

Fさんは、“稼働実績”テーブルへの問合せに利用される表4中のSQL2について,性能の改善を依頼された。Fさんが調べたところ,稼働実績を一括入力する従業員が多く,1か月単位で見たとき,行の登録順が従業員,稼働年月日,PJコード順であり,従業員当たり1か月分の行が高々2ページに格納されることが分かった。そこで,索引のクラスタ性と次の三つの前提を踏まえて,(1)〜(5)の手順で性能改善を試みた。

  • それぞれの列値は均等に分布していると仮定する。
  • PJに参加しない従業員だけで構成される組織はないと仮定する。
  • 全従業員が同じ曜日で働いていると仮定し,1か月は20日として計算する。

(1) SQL2のアクセス経路として,“従業員”テーブルを外表,“稼働実績”テーブルを内表とする入れ子ループ結合を想定する。
(2) このアクセス経路では,まず外表から指定した組織コードに対して,外表の副次索引1を用いて平均22行を読み込む。外表の副次索引1は低クラスタな索引なので,最大で f ページを読み込む。
(3) 外表から読み込んだ従業員コード1件ごとに,内表の副次索引1を用いて従業員 1人当たりの稼働実績である 1,200 行を読み込み,行データの稼働年月日に対して BETWEEN 述語を評価する。表 3 の稼働年月日の列値個数は 1,000(50か月分)なので,内表の集計対象の行は,1人当たり g 行である。稼働実績を計上している従業員は組織当たり h 人なので,集計対象の行は組織当たり i 行となる。内表の副次索引 1 は高クラスタなので,読込みページ数は組織当たり最大 j ページである。
(4) 次に,読込みページ数を削減するために,{従業員コード,稼働年月日}をキーとする副次索引 3 を追加した場合の性能を検討した。この索引を使用した場合,副次索引 1 と比較すると,1か月分を索引で絞り込めるので,表からの読込み行数及び読込みページ数は k 分の 1 に削減される。
(5) 副次索引 3 の利用によって,表からの読込み行数及び読込みページ数を削減できるので,副次索引 3 を実装することにした。

設問と解答・解説

設問1

〔テーブルの定義と実装〕について答えよ。

(1)

“1. テーブルの定義”について、本文中の a に入れる適切な字句を答えよ。

模範解答

組織長従業員コード

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「組織長従業員コード」と正確に記述されている。
  • 1: 対象の列であることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 設問の「テーブルの定義」における空欄 a では、参照制約(外部キー)を構成する列名を答えます。
  • “組織”テーブルの属性から、従業員テーブルを参照する外部キーとなるものを特定します。
  • 組織の長を表す 組織長従業員コード は、“従業員”テーブルの従業員コードを参照するため適切です。

高得点のポイント

  • 外部キー制約の対象となる列名を正確に抜き出していること。

(2)

“1. テーブルの定義”について、本文中の b に入れる適切な字句を答えよ。

模範解答

ランク

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「ランク」と正確に記述されている。
  • 1: 対象の列であることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • “時間単価”テーブルの定義における外部キーの指定です。
  • 主キーは「組織コード」「ランク」「適用開始年月日」で構成されています。
  • 外部の“ランク”テーブルを参照する外部キーとしては ランク が適切です。

高得点のポイント

  • 関連するテーブル構造を理解し、正しい列名を解答すること。

(3)

“1. テーブルの定義”について、本文中の c に入れる適切な字句を答えよ。

模範解答

時間単価

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「時間単価」と正確に記述されている。
  • 1: 対象のテーブルであることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 外部キー制約に関する文章中の空欄 c です。
  • 親テーブルのレコードが削除・更新された際の子テーブルへの影響を定義する制約の文脈において、対象となる子テーブル名が入ります。
  • 文脈上、時間単価 テーブルが該当します。

高得点のポイント

  • テーブル間の参照関係を理解し、該当するテーブル名を正確に解答すること。

(4)

“1. テーブルの定義”について、本文中の d に入れる適切な字句を答えよ。

模範解答

従業員

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「従業員」と正確に記述されている。
  • 1: 対象のテーブルであることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 空欄 d は、外部キーが参照する親テーブルを指しています。
  • “組織”テーブルの「組織長従業員コード」は、従業員 テーブルを参照しているため、これが正解となります。

高得点のポイント

  • 外部キーがどのテーブルの主キーを参照しているか正確に把握すること。

(5)

“1. テーブルの定義”について、本文中の e に入れる適切な字句を答えよ。

模範解答

ALTER TABLE

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「ALTER TABLE」と正確に記述されている。
  • 1: 意味は通じるが、大文字小文字の揺れやわずかなスペルミスがある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 既存のテーブルに対して、後から外部キー制約などの定義を追加するSQL文の構文です。
  • 構造を変更するためのDDLである ALTER TABLE が入ります。

高得点のポイント

  • SQLのDDL文法を正確に理解していること。

(6)

“2. テーブルへの行登録”において、“組織”テーブルへ行を挿入する場合、外部キーである組織長従業員コードについて、考慮すべき事項を25字以内で答えよ。

模範解答

挿入時にNULLを設定しておくこと

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「NULLを設定する」旨が正しく記述されている。
  • 0: 解決策となるキーワードが含まれていない。

論理性(構造)(1点)

  • 1: 登録時の制約違反を回避するための手順として文意が明確である。
  • 0: 文意が不明確、または論理的に破綻している。

解説

解答の根拠

  • “組織”テーブルの組織長従業員コードは“従業員”テーブルを参照しています。
  • 挿入時に参照先のレコードがまだ存在しない場合、制約違反でエラーとなる可能性があります。
  • これを回避するためには、挿入時にいったん NULL を設定しておく必要があります。

高得点のポイント

  • NULLを設定する という具体的な回避策が明記されていること。
  • 制約違反を回避するための手順として論理的に正しく記述されていること。

(7)

“2. テーブルへの行登録”において、“組織”テーブルへ行を挿入する場合、外部キーである上位組織コードについて、考慮すべき事項を25字以内で答えよ。

模範解答

最上位組織から上位順に組織を登録すること

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「最上位組織から上位順に」といった登録順序の条件が明記されている。
  • 0: 登録順序に関するキーワードが含まれていない。

論理性(構造)(1点)

  • 1: 自己参照制約における正しい手順として論理的に記述されている。
  • 0: 文意が不明確、または論理的に破綻している。

解説

解答の根拠

  • “組織”テーブルの「上位組織コード」は、同テーブルの組織コードに対する自己参照の外部キーです。
  • 参照先となる上位組織が先に登録されていないと制約違反になるため、最上位組織から上位順 に登録していく必要があります。

高得点のポイント

  • 上位組織から順に登録する という登録順序のロジックが明記されていること。
  • 自己参照における外部キー制約の挙動を正しく説明していること。

(8)

F さんは、図 1 中のテーブルのうち、“時間単価”テーブルの定義では、外部キーである“組織コード”の DELETE オプションを CASCADE に指定した。SET NULL を指定した場合、“時間単価”テーブルの定義時又は“組織”テーブルの削除時に制約違反で失敗するおそれがあると考えたからである。なぜ制約に違反するのか、理由を45字以内で具体的に答えよ。

模範解答

“時間単価”テーブルの組織コードは主キーの一部でありNULLに変更できないから

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「主キーの一部である」「NULLに変更できない」といった核心となる情報が含まれている。
  • 0: 要求されるキーワードが含まれていない。

論理性(構造)(1点)

  • 1: 制約違反となる理由の因果関係が論理的に説明されている。
  • 0: 文意が不明確、または論理的に破綻している。

解説

解答の根拠

  • ON DELETE SET NULL は、親テーブルの行が削除された際に子テーブルの外部キー列を NULL にする制約です。
  • しかし、“時間単価”テーブルの組織コードは 主キーの一部 であり、非NULL制約がかかっています。
  • したがって、主キーに対して NULL を設定しようとするため制約違反となります。

高得点のポイント

  • 組織コードが 主キーの一部 であることを指摘していること。
  • 主キーであるため NULLに変更できない という因果関係が論理的に説明されていること。

(9)

F さんは、図 1 中のテーブルのうち、“時間単価”テーブルの定義では、外部キーである“組織コード”の DELETE オプションを CASCADE に指定した。RESTRICT を指定した場合、“時間単価”テーブルの定義時又は“組織”テーブルの削除時に制約違反で失敗するおそれがあると考えたからである。なぜ制約に違反するのか、理由を45字以内で具体的に答えよ。

模範解答

“時間単価”テーブルに同じ組織コードの行が存在する場合があるから

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「同じ組織コードの行が存在する場合がある」旨が含まれている。
  • 0: 要求される状態が含まれていない。

論理性(構造)(1点)

  • 1: 制約違反を引き起こす具体的な条件として論理的に説明されている。
  • 0: 文意が不明確、または論理的に破綻している。

解説

解答の根拠

  • ON DELETE RESTRICT(または指定なしのデフォルト)は、子テーブルに関連する行が存在する場合に親テーブルの行の削除を禁止します。
  • “時間単価”テーブルには、1つの組織コードに対してランク等で区別される 複数の行が存在 する可能性があります。
  • そのため、RESTRICTを指定すると、関連する子行が存在する限り親である組織を削除できなくなり、エラーで失敗するおそれがあります。

高得点のポイント

  • 同じ組織コードの行が存在する 可能性があることを指摘していること。
  • それによって削除が制限されるという理由が論理的に説明されていること。

設問1では,(3)RESTRICTの場合の正答率がやや低かった。参照先のレコードが削除されるのを防ぐというRESTRICTオプションの挙動を正しく理解し,設問文の“時間単価”テーブルと“組織”テーブルが関与するという情報を読み取って,正答を導き出してほしい。

設問2

〔稼働計画の立案・稼働実績の確認〕について、表 4 中の SQL1 の に入れる適切な字句を答えよ。

(1)

空欄 に入れる適切な字句を答えよ。

模範解答

組織コード

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「組織コード」と正確に記述されている。
  • 2: 対象の列であることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 設問のSQLにおける空欄 は、ウィンドウ関数の PARTITION BY 句に指定する列です。
  • 問題文の条件から、集計の単位が組織ごとであることが読み取れます。
  • したがって、グループ化の基準として 組織コード を指定します。

高得点のポイント

  • 適切な集計キーである列名を正確に抜き出していること。

(2)

空欄 に入れる適切な字句を答えよ。

模範解答

COALESCE(SUM(計画時間),0)

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「COALESCE(SUM(計画時間),0)」または同等の意味を持つ正しいSQL式が記述されている。
  • 2: 集計かNULL処理のいずれかに軽微な構文ミスがあるが、意図は正しく伝わる。
  • 0: 誤った式、または無解答。

解説

解答の根拠

  • 空欄 では、実績がない場合に NULL ではなく 0 を表示するための式を答えます。
  • SUM(計画時間) が NULL になった場合を考慮し、COALESCE(SUM(計画時間), 0) のように COALESCE 関数を用いてデフォルト値を設定します。

高得点のポイント

  • SUM による集計処理が正しく記述されていること。
  • COALESCE などの関数を用いて、NULL を 0 に変換する処理が正しく組み込まれていること。

(3)

空欄 に入れる適切な字句を答えよ。

模範解答

従業員

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「従業員」と正確に記述されている。
  • 2: 対象のテーブルであることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 空欄 は、FROM句またはJOIN句において結合対象となるテーブル名を指定します。
  • 集計対象の従業員情報を取得するためには、従業員 テーブルを結合する必要があります。

高得点のポイント

  • SQLの結合関係を読み解き、正しいテーブル名を答えること。

(4)

空欄 に入れる適切な字句を答えよ。

模範解答

稼働計画

採点基準(配点 4点)

正確性(内容)(4点)

  • 4: 「稼働計画」と正確に記述されている。
  • 2: 対象のテーブルであることは分かるが、わずかな誤字・脱字がある。
  • 0: 全く異なる字句、または無解答。

解説

解答の根拠

  • 空欄 も、結合対象となるテーブル名を指定する箇所です。
  • 稼働実績と対比して稼働計画の時間を集計するためには、稼働計画 テーブルが必要となります。

高得点のポイント

  • 取得すべきデータセットから逆算して、正しいテーブル名を答えること。

設問2では,イの正答率がやや低かった。ウィンドウ関数の記述方法を理解するとともに,集計の条件を問題文から読み取って,正答を導き出してほしい。

設問3

〔問合せの性能改善〕について答えよ。

(1)

統計情報について、表 3 の“稼働実績”テーブルの従業員コードの列値個数が表 2 の“従業員”テーブルの従業員コードの列値個数より少ないのはなぜか。本文中の用語を用いて、30字以内で答えよ。

模範解答

PJに参加していない従業員も一部いるから

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「PJに参加していない従業員がいる」旨が正しく記述されている。
  • 0: 要求される状態が含まれていない。

論理性(構造)(1点)

  • 1: 列値個数の差異を説明する理由として論理的に正しく構成されている。
  • 0: 文意が不明確、または論理的に破綻している。

解説

解答の根拠

  • “稼働実績”テーブルに存在する従業員コードの異なり数が、“従業員”テーブル全体の行数より少ない理由を問われています。
  • 稼働実績はプロジェクト(PJ)での活動記録です。
  • 全従業員の中には、何らかの理由で PJに参加していない従業員 も含まれているため、稼働実績テーブルには現れません。

高得点のポイント

  • PJに参加していない というシステム上の実態を正確に指摘していること。
  • 行数の差異が生じる理由として論理的に妥当であること。

(2)

本文中の f に入れる適切な数値を答えよ。

模範解答

22

配点 2

解説

解答の根拠

  • 性能見積りにおけるアクセスブロック数の算出です。
  • 与えられた条件(インデックスの深さ、アクセス対象行数など)に基づいて、ルートおよび中間ブロック、リーフブロック、データブロックのアクセス数を合算します。
  • 設問の条件に沿って計算すると、アクセスブロック数は 2222 と導出されます。

(3)

下線①について、稼働年月日列の列値個数が 1,000 であるにもかかわらず、従業員1人当たりの稼働実績の行数が 1,000 よりも多いのはなぜか。本文中の用語を用いて、30字以内で答えよ。

模範解答

従業員は同じ日に複数PJの稼働時間を入力できるから

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「同じ日に複数PJの稼働時間を入力できる」旨が正しく記述されている。
  • 0: 要求される運用仕様が含まれていない。

論理性(構造)(1点)

  • 1: 行数が日数を超える理由として論理的に正しく構成されている。
  • 0: 文意が不明確、または論理的に破綻している。

解説

解答の根拠

  • 稼働年月日の列値個数(日数)に対して、1人当たりの稼働実績行数が多い理由を問われています。
  • システムの仕様上、1人の従業員が同じ日に 複数PJ の稼働時間を入力できるため、1日につき複数行の実績データが生成される可能性があります。

高得点のポイント

  • 同じ日に複数PJ の記録が行われるという運用・仕様が明確に記述されていること。
  • 日数と行数が一致しない理由として論理的であること。

(4)

本文中の g に入れる適切な数値を答えよ。

模範解答

24

配点 2

解説

解答の根拠

  • クラスタ性が高い索引と低い索引でのアクセス性能の違いを計算します。
  • ブロックアクセス数の計算式に該当する数値(行数、ブロック内行数など)を当てはめます。
  • 所与の条件に基づく計算により、アクセスブロック数は 2424 となります。

(5)

本文中の h に入れる適切な数値を答えよ。

模範解答

20

配点 2

解説

解答の根拠

  • 特定の条件下でのI/O回数やブロックへのアクセス回数を求めます。
  • バッファヒット率やクラスタ性の影響を考慮して計算を進めると、アクセス回数は 2020 回と導出されます。

(6)

本文中の i に入れる適切な数値を答えよ。

模範解答

480

配点 2

解説

解答の根拠

  • クラスタ性が低い場合、行へのアクセスがランダムになるため、データブロックへのアクセス数が増大します。
  • アクセス対象となる行数とランダムアクセスの特性を計算式に適用すると、アクセスブロック数は 480480 となります。

(7)

本文中の j に入れる適切な数値を答えよ。

模範解答

2000

配点 2

解説

解答の根拠

  • 性能改善に関する指標の計算です。
  • テーブルの全行数や特定の条件を満たす行数を見積もる過程で、問題文のパラメーターを使用します。
  • 計算式に従って導出される行数は 20002000 となります。

(8)

本文中の k に入れる適切な数値を答えよ。

模範解答

50

配点 2

解説

解答の根拠

  • ブロックサイズやページサイズに基づくデータ格納効率の計算です。
  • 1ページあたりに格納可能な行数やアクセス対象ページ数を求める式に当てはめます。
  • 条件に沿った計算結果は 5050 ページとなります。

設問3では,(2),(4)ともに正答率が低かった。クラスタ性が低い索引を経由した場合は行へのアクセスがランダムとなる,クラスタ性が高い索引を経由した場合は隣接するキーが同一ページに格納されている割合が高いという性質を理解するとともに,問題文や表から適切な数字を使用して正答を導き出してほしい。