DBデータベーススペシャリスト試験 午後Ⅱ

平成23年度特別 データベーススペシャリスト 午後Ⅱ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 データベースの概念設計,論理設計,性能設計及び運用設計に関する次の記述を読んで,設問1~3に答えよ。 A社は,受託開発を中心とするソフトウェア開発会社である。今回,案件情報を管理する案件管理システム,及びプロジェクト(以下,PJという)の収支情報を管理するPJ収支管理システムをそれぞれ開発することにした。 〔顧客の管理〕 (1) A社では,原則として顧客単位に提案,契約,請求などの営業活動を行っている。ただし,顧客の規模によっては,顧客の部課単位に営業活動を行う場合がある。顧客には,社内で一意な顧客番号を付与し,部課単位には顧客番号ごとの連番を付与する。 (2) 営業活動の管理単位として,顧客を業種や地域などで分類した顧客グループを設けている。顧客は,いずれか一つの顧客グループに属する。 〔組織の概要〕 (1) 複数の営業部と複数の開発部がある。部には,社内で一意な部コードを付与する。使用されなくなった部コードを再利用することはない。 (2) 一つの営業部が,複数の顧客グループを担当する場合がある。一つの顧客グループを担当する営業部は一つである。 (3) 社員は,営業部又は開発部のいずれか一つの部に所属する。社員には,社内で一意な社員番号を付与する。使用されなくなった社員番号を再利用することはない。 (4) 営業部の社員は,一つの顧客グループの営業を担当する。複数の営業部社員が同じ顧客グループを担当する場合がある。 (5) 開発部の社員については,プロジェクトマネージャ(以下,PMという)とプロジェクトリーダ(以下,PLという)の経験の有無を管理する。 (6) 社員の所属部の異動月は不定であるが,異動日は,月初日である。 (7) 社員には,給与に連動した等級が定められている。社員の等級の変更は,年1回の定期人事で行う。 (8) 部の新設・廃止などの組織変更月は不定であるが,組織変更日は月初日である。 〔案件情報の管理〕 (1) 案件は,受注を目指して行う顧客への営業活動の単位である。営業活動の結果,案件の受注が確定した場合,顧客と契約を結ぶ。営業活動を進める中で,案件が具体化し,複数の案件に分かれ,それぞれ別の契約となる場合がある。また,顧客の都合によって,複数の案件が一つの契約にまとめられる場合がある。前者の場合は案件を分割,後者の場合は案件を統合し,案件と契約を1対1に対応付ける。分割された新しい案件は,分割前の案件と対応付ける。また,統合された元の案件は,統合後の案件と対応付ける。 なお,案件が契約に至らない場合もある。 (2) 顧客への営業活動開始時点で,案件として,案件名,案件内容,顧客の情報,案件起案日,開始予定日,終了予定日,売上見込額,案件状態,受注確度などを登録する。登録する場合,案件には,社内で一意な案件番号を付与する。案件状態は“提案中”,“契約済”などから選択し,受注確度は“高”,“中”,“低”の中から選択する。営業活動の進展に伴い,案件の登録内容を更新する。 (3) 年度ごと案件ごとの売上見込額を案件年度収支に登録する。複数年度にまたがる案件の場合,案件の開始予定日と終了予定日から月数を求めて,年度ごとの月数換算で売上見込額を比例配分し,その金額を案件年度収支として登録する。案件の開始予定日,終了予定日,売上見込額を変更した場合は,案件年度収支も変更する。 (4) 営業部は開発部と連携し,顧客への提案活動を行う。案件の規模が大きい場合や技術分野が多岐にわたる場合は,複数の開発部と連携することがある。案件の内容があいまいな間は,連携する開発部が決まっていないことがある。 (5) 案件ごとに営業責任者として営業部の社員を1名選定する。また,連携する開発部ごとに,開発責任者を1名選定する。営業責任者又は開発責任者の異動があった場合は,異動前の所属部の後任者に引き継ぐ。 (6) 案件明細は,案件を担当する開発部が決まるごとに作成する。案件ごと開発部ごとの案件明細として,案件明細名,開始予定日,終了予定日,売上見込額などを登録する。登録する場合,案件明細には,社内で一意な案件明細番号を付与する。 (7) 案件明細も案件と同様に,年度ごと案件ごとの売上見込額を案件明細年度収支に登録する。案件明細の開始予定日,終了予定日,売上見込額を変更した場合は,案件明細年度収支も変更する。 (8) 年度当初に,営業部では部ごとの当年度売上目標額を登録し,開発部では部ごとの当年度目標利益率を登録する。年度途中で見直しが発生した場合,見直し後の値に変更する。 〔PJ収支管理〕 (1) 受注が確定した場合,開発を担当するPM又はPLは案件明細ごとにPJを発足する。PJは収支管理の単位である。PJ収支データとして,PJ名,PJ開始日,PJ終了日,PJ種別コード,案件明細番号,担当開発部の部コード,PMとPLの社員番号,毎月のPJ収支計画データ(後述),PJ収支実績データ(後述)などを登録する。登録する場合,PJには,社内で一意なPJコードを付与する。PJ種別コードは,製造請負契約,作業請負契約,業務委任契約などの契約形態を区別するコードである。PJ実施中に,契約内容,PJ体制が変更になった場合,変更内容に合わせてPJ収支データを変更する。 (2) PJ収支計画データである毎月の売上,労務時間,外注費,材料費,その他費用の登録・変更方法は,次のとおりである。 ① 売上は,契約形態に基づいて,計画年月に計画額を登録する。製造請負契約の場合はPJ終了日の年月に計画額を一括して登録し,その他の契約の場合はPJ期間内の各月に月割りの計画額を登録する。 ② 労務時間は,担当社員ごと月ごとの計画時間を登録する。担当社員が未定の場合は,ダミー社員(後述)を選択し,月ごとの計画時間を登録する。また,一時的に他部の社員の支援を受ける場合,当該社員を選択し,計画時間を登録する。各社員の労務費は,“時間単価(以下,単価という)×計画時間”で計算する。 ③ 外注費は,外注会社ごと契約形態ごと計画年月ごとの計画額を登録する。 ④ 材料費とその他費用は,費用を区分する勘定科目コード単位に,支出の計画年月ごとの計画額を登録する。 図1にPJ収支計画データ登録時の入力イメージを示す。 図1 PJ収支計画データ登録時の入力イメージ (3) 労務費を計算するために,社員の等級1~8を四つのランクに分類する。年度当初に,昨年度の労務費実績や部の所属人数などから,当年度以降の10年間の年度ごと部ごとランクごとの単価を定める。毎月の労務費計算時の社員の単価は,当該月の所属部の単価を適用する。 (4) ダミー社員は,部ごとランクごとに設ける。ダミー社員には,社員を含めて一意な社員番号を付与する。 (5) 月次実績反映処理として,PJ収支管理システムの関連システム(後述)のデータを使用し,PJ収支実績データである売上,労務時間,外注費,材料費,その他費用を登録する。登録した値が誤っていた場合,登録済の値を修正せずに,翌月以降の値で修正する。例えば,2010年6月の値に誤りがあった場合,2010年7月の値で修正する。 (6) 前月までのPJ収支実績データとPJ収支計画データが異なる場合,PM又はPLは,その原因を調査し,必要に応じて当月以降のPJ収支計画データを変更する。 〔PJ収支管理システムとその関連システムからの受信データ及び受信契機〕 (1) PJ収支管理システムの関連システムとしては,図2に示す案件管理システム,売上管理システム,勤怠管理システム,購買管理システム,旅費管理システム,外注管理システムがある。 図2 PJ収支管理システムとその関連システム (2) 関連システムからのPJ収支管理システムの受信データ及び受信契機を,表1に示す。 表1 関連システムからのPJ収支管理システムの受信データ及び受信契機 〔概念データモデル,関係スキーマ,テーブル構造〕 (1) 案件管理システムの概念データモデルを図3に,関係スキーマを図4に示す。 なお,案件管理システムでは,社員の所属の履歴管理は不要であることを前提にしている。 図3 案件管理システムの概念データモデル(未完成) 図4 案件管理システムの関係スキーマ(未完成) (2) PJ収支管理システムのテーブル構造を図5に示す。 図5 PJ収支管理システムのテーブル構造(一部の列名は省略) 〔案件管理システム及びPJ収支管理システムでの集計処理〕 案件管理システムの主な集計処理を表2に,PJ収支管理システムの主な集計処理を表3に示す。PJ収支管理システムの主な集計処理の結果データのレコード構成は,図6のとおりである。 表2 案件管理システムの主な集計処理 表3 PJ収支管理システムの主な集計処理 図6 PJ収支管理システムの主な集計処理の結果データのレコード構成 〔集計処理に関する指摘及び要望〕 案件管理システム及びPJ収支管理システムの集計処理について,次のような指摘及び要望が出た。 指摘① 受注確度別集計と受注確度別開発部別集計のそれぞれの合計値が,一致しない場合がある。 指摘② 開発担当部を指定した開発担当部別計画集計や開発担当部別実績集計に,時間がかかりそうである。 指摘③ PJ収支管理システムに対するアクセスが,毎月の月次実績反映処理後の数日間に集中する。この数日間の応答時間が遅くなりそうである。 要望① PJ発足済の案件とそうでない案件に分けて,今年度の売上見込額を知りたい。PJ発足済の案件の場合は,先月までの売上実績を考慮した売上見込額を知りたいのでPJ収支管理システムの売上見込額を使用し,そうでない案件の場合は,案件管理システムの売上見込額を使用して,集計したい。 〔組織変更に伴うデータの変更〕 1. 組織変更後のPJ収支管理システムの集計処理への要望 開発部の組織変更があった場合,組織変更後の部単位でPJ収支データを集計することにした。集計に当たって,次のような要望があった。 (1) 年度途中で組織変更があった場合,組織変更後の部が年度当初から存在していたとして,部単位でのPJ収支データを集計できること。 (2) 前年度のPJ収支データは変更しないが,今年度の組織変更後の部単位で前年度とのPJ収支データを比較できること。 なお,組織変更に伴って,複数のPJを統合することはない。 2. データの変更方法 “1. 組織変更後のPJ収支管理システムの集計処理への要望”を実現するため,当年度のPJ収支データは,次のように変更することとした。 (1) 当年度に終了した又は進行中のPJで,組織変更後,部が分割されないPJの場合,“PJ”テーブルの当該PJの部コードを組織変更後の部コードに変更する。 (2) 当年度に終了した又は進行中のPJで,組織変更後,複数の部に分割されるPJの場合,分割後の部のPJの情報を登録する。PJ収支データは,分割後の部単位の案分比率をPJごとに定めて案分する。 (3) 前年度の部単位のPJ収支データと比較するため,前年度PJと今年度の部の対応を管理する“PJ変更”テーブルを追加する。更に,“PJ変更”テーブルでは,部コードが変更される今年度PJと,複数のPJに分割される今年度PJの案分比率と分割後PJコードも管理する。また,複数の部に分割されるPJの場合のPJ収支データについて,次の2案を検討した。 案1 分割後,新設されるPJについては,新規PJとして登録し,年度内の年月ごとに“分割前のPJ収支実績値×案分比率”の値を登録する。分割後も存続するPJについては,年度内の年月ごとに“分割前のPJ収支実績値-新規PJのPJ収支実績値”の値に変更する。また,PJ収支計画値については,組織変更後に当該組織の計画値に変更する。 案2 分割後,新設されるPJについては,新規PJとして登録し,“分割前の年度内の各年月のPJ収支実績値の合計×案分比率”の値を,組織変更年月のPJ収支実績値として登録する。分割後も存続するPJについては,分割前のPJ収支実績値(以下,変更前データという)を保持し,分割後の新規PJのPJ収支実績値のマイナス値(以下,補正データという)を,組織変更年月のPJ収支実績値として追加する。分割後も存続するPJの組織変更後のPJ実績値は,変更前データと補正データを合算する。また,PJ収支計画値については,組織変更後に当該組織の計画値に変更する。 3. データの変更方法の具体例による確認 データの変更方法の妥当性を検証するため,製造請負契約の具体例を用いて,データの変更方法を確認することにした。 (1) 2010年8月1日付けの組織変更によって,部コード“0102”の部が“0102”と“0108”の部に分割されたとする。 (2) 組織変更前の部コード“0102”の“PJ”テーブル及び“PJ売上実績”テーブルは,それぞれ表4と表5のとおりとする。組織変更前と組織変更後のPJコードと案件明細番号の対応関係は,図7のとおりとする。 表4 “PJ”テーブルの具体例 表5 “PJ売上実績”テーブルの具体例 図7 組織変更前と組織変更後のPJコードと案件明細番号の対応関係 解答に当たっては,巻頭の表記ルールに従うこと。 なお,識別可能なサブタイプが存在する場合,他のエンティティタイプとのリレーションシップは,スーパータイプ又はサブタイプのいずれか適切な方との間に記述せよ。また,テーブル構造は,第3正規形の条件を満たしていること。 また,設問2と設問3において,案件管理システムのテーブル構造は,図4の関係スキーマをそのままテーブルとして定義したものとする。ただし,サブタイプが存在する場合は,スーパータイプ側にまとめたテーブルとして定義したものとする。 設問1 案件管理システムについて,(1),(2)に答えよ。 (1) 図3中に,エンティティタイプ及びリレーションシップを追加し,図を完成させよ。サブタイプが存在する場合は,サブタイプを示せ。ただし,エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。 (2) 図4中の[a]~[c]に入れる適切な属性名を答えよ。また,(1)で追加したサブタイプの関係スキーマ及びその主キー,外部キーを示せ。 設問2 〔集計処理に関する指摘及び要望〕について,(1)~(4)に答えよ。 (1) 指摘①の事象が発生する理由を,45字以内で述べよ。 (2) 指摘②の状況となる原因は,PJごとの労務費の集計処理における,社員の単価を求めるときの複数テーブルの結合処理にあると想定し,結合処理での検索条件列とテーブルの検索順序を次のように整理した。開発担当部別計画集計のケースについて,手順2~6中の[d]~[q]に入れる適切な列名,テーブル名を答えよ。 手順1 検索条件の列として部コードを指定し,“PJ”テーブルからPJコードを求める。PJコードごとに手順2~手順6で単価を求める。 手順2 検索条件の列として[d]を指定し,[e]テーブルを検索して[f]と[g]を求める。 手順3 検索条件の列として[f]と[h]と[i]を指定し,[j]テーブルを検索して,[k]を求める。 手順4 検索条件の列として[k]を指定し,[ℓ]テーブルを検索して[m]を求める。 手順5 検索条件の列として[f]と[n]と[o]を指定し,[p]テーブルを検索して[q]を求める。 手順6 検索条件の列として[m]と[q]と年度を指定し,“部ランク単価”テーブルを検索して単価を求める。このとき,年度の検索条件には,[g]から求まる値を指定する。 また,この検索効率を改善するために,列を二つ追加する。列を追加するテーブル名と,列名を答えよ。 (3) 指摘③の状況を解決するために,月次実績反映処理で,表3の集計処理を行い,図6の結果データをテーブルとして保持することにした。これが可能な集計処理名とその理由を,20字以内で述べよ。 (4) 要望①を実現するために,次の2案を検討した。 案A PJ収支管理システムにおいて,当年度に存在するPJの案件明細番号,売上見込額を,日次バッチ処理で案件管理システムに送信する。案件管理システムでは,受信したデータを既存のテーブルに追加した列に登録し,案件管理システムにおいて,PJ発足済の売上見込額を検索できるようにする。 案B 案件管理システムとPJ収支管理システムで使用する関係データベース管理システム(RDBMS)として,複数データベース間の参照が可能なRDBMSを選択し,案件管理システムからPJ収支管理システムを参照する。 (i) 案Aで,列を追加する案件管理システムのテーブル名と追加する列名を示せ。 (ii) 案Bで,当月の第4営業日以降にPJ収支管理システムのPJごとの売上見込額を,案件管理システムから検索するときの問合せの内容を,表6のように整理した。表6中の[ア]~[ウ]に入れるテーブル名と,[エ]と[オ]に入れる適切な内容を答えよ。 表6 問合せの内容 設問3 〔組織変更に伴うデータの変更〕について,(1)~(3)に答えよ。 (1) 1回の組織変更を管理するための“PJ変更”テーブルの構造及びその主キー,外部キーを示せ。 (2) PJコードが“11000130”のPJについて,データの変更によって,案1の場合の“PJ”テーブル,案2の場合の“PJ売上実績”テーブルは,どのようなインスタンスとなるか。それぞれ適切な内容を,表7と表8にそれぞれ記入せよ。 なお,表のすべての記入欄が埋まるとは限らない。 表7 案1の場合の“PJ”テーブルの具体例 表8 案2の場合の“PJ売上実績”テーブルの具体例 (3) (2)の結果を参考に,表9に示す案2の場合のテーブルについて,データの変更処理で,行の追加・変更が発生するテーブル名の欄に○印を記入せよ。 表9 データの変更処理で,行の追加・変更が発生するテーブル
図1 PJ収支計画データ登録時の入力イメージ。PJコード11000040の2010年度について,売上,社員別労務時間,外注会社・契約形態別外注費,勘定科目別材料費とその他費用の月別計画を入力する五つの表。
図1 PJ収支計画データ登録時の入力イメージ。PJコード11000040の2010年度について,売上,社員別労務時間,外注会社・契約形態別外注費,勘定科目別材料費とその他費用の月別計画を入力する五つの表。
図2 PJ収支管理システムとその関連システム。中央のPJ収支管理システムへ,案件管理,勤怠管理,旅費管理,売上管理,購買管理,外注管理の六つのシステムから,案件明細や各種実績データを送る構成図。
図2 PJ収支管理システムとその関連システム。中央のPJ収支管理システムへ,案件管理,勤怠管理,旅費管理,売上管理,購買管理,外注管理の六つのシステムから,案件明細や各種実績データを送る構成図。
表1 関連システムからのPJ収支管理システムの受信データ及び受信契機。六つの関連システムの受信データ,受信契機,登録処理を示す。案件明細は日次22時,各種実績は月次第3営業日23時に受信し,対応する明細や実績として登録する。
表1 関連システムからのPJ収支管理システムの受信データ及び受信契機。六つの関連システムの受信データ,受信契機,登録処理を示す。案件明細は日次22時,各種実績は月次第3営業日23時に受信し,対応する明細や実績として登録する。
図3 案件管理システムの概念データモデル(未完成)。社員,部,顧客グループ,顧客,顧客部課,案件状態,案件,案件明細と各年度収支を配置した未完成の概念データモデル。顧客や案件に関する既存の対応関係が示されている。
図3 案件管理システムの概念データモデル(未完成)。社員,部,顧客グループ,顧客,顧客部課,案件状態,案件,案件明細と各年度収支を配置した未完成の概念データモデル。顧客や案件に関する既存の対応関係が示されている。
図4 案件管理システムの関係スキーマ(未完成)。顧客グループ,顧客,顧客部課,社員,部,案件状態,案件,案件年度収支,案件明細,案件明細年度収支の関係スキーマ。属性の空欄a~cと主キー・外部キーの下線を含む。
図4 案件管理システムの関係スキーマ(未完成)。顧客グループ,顧客,顧客部課,社員,部,案件状態,案件,案件年度収支,案件明細,案件明細年度収支の関係スキーマ。属性の空欄a~cと主キー・外部キーの下線を含む。
図5 PJ収支管理システムのテーブル構造(一部の列名は省略)。等級ランク,部,部ランク単価,社員と所属・等級履歴,各種マスタ,PJ,及び売上・労務時間・外注費・材料費・その他費用の計画と実績のテーブル構造を示す。
図5 PJ収支管理システムのテーブル構造(一部の列名は省略)。等級ランク,部,部ランク単価,社員と所属・等級履歴,各種マスタ,PJ,及び売上・労務時間・外注費・材料費・その他費用の計画と実績のテーブル構造を示す。
表2 案件管理システムの主な集計処理。指定年度の売上見込額を集計する五つの処理を示す。受注確度別,受注確度別営業部別,受注確度別開発部別,顧客グループ別,顧客グループ別受注確度別の処理がある。
表2 案件管理システムの主な集計処理。指定年度の売上見込額を集計する五つの処理を示す。受注確度別,受注確度別営業部別,受注確度別開発部別,顧客グループ別,顧客グループ別受注確度別の処理がある。
表3 PJ収支管理システムの主な集計処理。開発担当部別の計画集計,実績集計,見込集計の処理概要を示す。売上,原価,利益を集計し,見込額では指定実績反映年月以前の実績額と,それより後の計画額を合算する。
表3 PJ収支管理システムの主な集計処理。開発担当部別の計画集計,実績集計,見込集計の処理概要を示す。売上,原価,利益を集計し,見込額では指定実績反映年月以前の実績額と,それより後の計画額を合算する。
図6 PJ収支管理システムの主な集計処理の結果データのレコード構成。開発担当部別の計画・実績・見込集計の三種類の結果レコードを示す。部コード,PJコード,種別,年度,開始・終了日と各費目・利益の金額を含み,見込には実績反映年月も含む。
図6 PJ収支管理システムの主な集計処理の結果データのレコード構成。開発担当部別の計画・実績・見込集計の三種類の結果レコードを示す。部コード,PJコード,種別,年度,開始・終了日と各費目・利益の金額を含み,見込には実績反映年月も含む。
表4 “PJ”テーブルの具体例。組織変更前の部コード0102に属する四つのPJについて,PJコード,開始日,終了日,案件明細番号,部コードを示す。左右と中間の省略列を含む具体例。
表4 “PJ”テーブルの具体例。組織変更前の部コード0102に属する四つのPJについて,PJコード,開始日,終了日,案件明細番号,部コードを示す。左右と中間の省略列を含む具体例。
表5 “PJ売上実績”テーブルの具体例。組織変更前のPJ売上実績の具体例。2010年7月に,PJコード11000040は8,000,000円,11000130は2,000,000円の売上実績をもつ。
表5 “PJ売上実績”テーブルの具体例。組織変更前のPJ売上実績の具体例。2010年7月に,PJコード11000040は8,000,000円,11000130は2,000,000円の売上実績をもつ。
図7 組織変更前と組織変更後のPJコードと案件明細番号の対応関係。部0102の組織変更によるPJと案件明細の対応図。11000130は0102へ40%,0108の新規PJへ60%,11000150は0102へ30%,0108へ70%を案分する。
図7 組織変更前と組織変更後のPJコードと案件明細番号の対応関係。部0102の組織変更によるPJと案件明細の対応図。11000130は0102へ40%,0108の新規PJへ60%,11000150は0102へ30%,0108へ70%を案分する。
表6 問合せの内容。PJごとの売上見込額を求める問合せを整理した表。射影する列と演算,検索対象テーブル,三つの検索・集計と左外結合の手順を示し,ア~オの空欄を含む。
表6 問合せの内容。PJごとの売上見込額を求める問合せを整理した表。射影する列と演算,検索対象テーブル,三つの検索・集計と左外結合の手順を示し,ア~オの空欄を含む。
表7 案1の場合の“PJ”テーブルの具体例。案1による組織変更後のPJテーブルを記入する解答用の表。PJコード,開始日,終了日,案件明細番号,部コードと三つの省略列があり,四行の記入欄が設けられている。
表7 案1の場合の“PJ”テーブルの具体例。案1による組織変更後のPJテーブルを記入する解答用の表。PJコード,開始日,終了日,案件明細番号,部コードと三つの省略列があり,四行の記入欄が設けられている。
表8 案2の場合の“PJ売上実績”テーブルの具体例。案2による組織変更後のPJ売上実績を記入する解答用の表。PJコード,省略列,実績年月,実績額の四列からなり,四行の記入欄が設けられている。
表8 案2の場合の“PJ売上実績”テーブルの具体例。案2による組織変更後のPJ売上実績を記入する解答用の表。PJコード,省略列,実績年月,実績額の四列からなり,四行の記入欄が設けられている。
表9 データの変更処理で,行の追加・変更が発生するテーブル。案2のデータ変更で行の追加・変更が生じるテーブルに○印を記入する表。二組のテーブル名と記入列に22テーブルを並べ,PJ,PJ売上計画,PJ売上実績には○印が記入済み。
表9 データの変更処理で,行の追加・変更が発生するテーブル。案2のデータ変更で行の追加・変更が生じるテーブルに○印を記入する表。二組のテーブル名と記入列に22テーブルを並べ,PJ,PJ売上計画,PJ売上実績には○印が記入済み。
解き方のヒントを見る

検討の前提と対象範囲をそろえる

検討を始める前に、何を対象に、どの範囲で考えるのかを整理しましょう。同じ言葉でも、対象範囲が違えば意味の受け取り方が変わります。まずは与えられた条件に沿って、検討の前提をそろえることに集中してください。

この問題で問われていること

この問題では、検討の対象範囲が途中で変わっていないかに目を向けましょう。与えられた条件のうち、どこまでを一つの対象として扱うのかを確認し、その範囲を保ったまま考えを進めることが手掛かりになります。

視点

対象範囲とは、今の検討に含めるものの境界です。結論を急ぐ前に、与えられた条件からその境界を確かめ、考えている内容が範囲から外れていないかを点検しましょう。

確認ポイント

  • 検討に含める対象は明確か
  • 対象範囲を条件に沿って捉えているか
  • 考える途中で対象範囲を変えていないか
正解と解説を見る

解説

案件管理とPJ収支管理を題材に、担当関係を表すサブタイプとキーの設計、履歴を使った単価検索、集計の性能改善、実績と計画を組み合わせた見込額の算出、組織変更時の対応関係と補正データの扱いを学ぶ問題です。

問題の全体像

A社は、受注前の営業活動を扱う案件管理システムと、受注後の開発プロジェクトの収支を扱うPJ収支管理システムを開発します。案件には営業責任者がおり、担当開発部が決まるごとに案件明細と開発責任者が設定され、受注後は案件明細ごとにPJが発足します。公式の出題趣旨では、業務要件に基づく概念モデル・関係スキーマ・テーブルの設計、参照・更新操作の手順と結果の把握、性能改善のためのテーブル設計を問うとしています。解く際は、案件と案件明細の違い、社員の所属・等級の履歴、変更可能な計画値と登録済みの実績値の違いを軸に整理します。

設問1(1)

〔組織の概要〕の営業部と開発部、営業部社員と開発部社員の業務の違いから、部のサブタイプとして営業部・開発部、社員のサブタイプとして営業部社員・開発部社員を追加します。公式解答例で追加する通常のリレーションシップは、営業部→顧客グループ、営業部→営業部社員、顧客グループ→営業部社員、開発部→開発部社員、営業部社員→案件、開発部社員→案件明細で、いずれも1対多です。一つの顧客グループには一つの担当営業部があり、複数の営業部社員が担当できます。案件の営業責任者は営業部社員、案件明細の開発責任者は開発部社員なので、それぞれ該当するサブタイプにつなぎます。図3にある既存の関係は保持します。採点講評では、特に案件明細と開発部社員のリレーションシップを読み取ることが指摘されています。

設問1(2)(a)

〔組織の概要〕(2)の「一つの顧客グループを担当する営業部は一つ」に着目します。顧客グループの各行に、そのグループを担当する営業部を識別する属性を持たせます。公式解答例では「担当営業部コード」です。顧客グループ側に営業部への外部キーを置くことで、営業部と顧客グループの1対多の関係を表します。

設問1(2)(b)

〔案件情報の管理〕(5)では、案件ごとに営業部の社員を営業責任者として1名選定します。したがって案件に持たせる属性は、責任者個人を識別する社員番号です。公式解答例では「営業責任者社員番号」です。営業部社員を参照し、異動時には後任者の番号に更新することで、案件の現在の責任者を管理します。

設問1(2)(c)

〔案件情報の管理〕(5)の「連携する開発部ごとに、開発責任者を1名選定する」と、(6)の案件明細を案件ごと開発部ごとに作成するという条件を対応付けます。公式解答例では「開発責任者社員番号」です。案件明細から開発部社員を参照する属性であり、責任者の所属から担当開発部をたどれます。採点講評でも、この属性と開発部社員との関係の読み取りが重視されています。

設問1(2)(サブタイプ)

公式解答例の関係スキーマは、営業部社員(営業部社員番号、営業部コード、担当顧客グループコード)、開発部社員(開発部社員番号、開発部コード、PM経験有無、PL経験有無)、営業部(営業部コード、当年度売上目標額)、開発部(開発部コード、当年度目標利益率)です。主キーはそれぞれ先頭の属性です。営業部社員番号と開発部社員番号は、スーパータイプの社員番号を引き継ぎ、社員への外部キーにもなります。営業部コードと開発部コードも、部コードを引き継ぎ、部への外部キーになります。さらに営業部社員の営業部コード・担当顧客グループコード、開発部社員の開発部コードが、それぞれ営業部・顧客グループ・開発部への外部キーです。目標額や目標利益率、PM・PL経験有無などの固有属性を適切なサブタイプに配置します。採点講評では、主キーの継承とサブタイプ固有の属性の理解を求めています。

設問2(1)

〔案件情報の管理〕(4)では、連携する開発部が決まっていない案件も存在します。(6)によれば、その段階では案件明細が作成されません。この案件の売上見込額は受注確度別集計に含まれても、開発部別の集計には含まれません。公式解答例もこの集計対象の違いを理由としています。45字以内の答案では「開発部未定の案件の売上見込額が、開発部別集計に含まれないから。」のように、未定の案件と集計からの除外を押さえます。

設問2(2)(d)

手順1では、指定した開発担当部のPJコードをPJテーブルから取得しています。手順2では、そのPJに登録された労務時間計画を検索するので、検索条件として引き継ぐ列は「PJコード」です。公式解答例でもdはPJコードです。

設問2(2)(e)

開発担当部別計画集計では、計画時間に単価を掛けて労務費を求めます。図5でPJコード、計画年月、社員番号、計画時間を持つテーブルに着目します。公式解答例では「PJ労務時間計画」です。このテーブルから、単価を求める対象の社員と年月を取得します。

設問2(2)(f)

手順3では社員の等級履歴、手順5では社員の所属履歴を検索します。両方の履歴に共通する個人の識別列を、PJ労務時間計画から取得する必要があります。公式解答例では「社員番号」です。PJのPM・PLだけでなく、労務時間計画に登録された各担当社員を対象にします。

設問2(2)(g)

〔PJ収支管理〕(3)では、社員の単価に当該月の所属部の単価を適用し、単価は年度ごとに定めます。そのため手順2で取得する年月は「計画年月」です。公式解答例でもgは計画年月です。この年月から対象となる等級・所属の履歴と年度を決めます。図1の年度は4月から始まるので、暦年と年度を区別して扱います。

設問2(2)(h)

社員の等級には変更履歴があり、計画年月に有効な等級を選ぶ必要があります。図5の社員等級テーブルにある期間の開始側の列に着目します。公式解答例では「等級開始日」です。社員番号と開始日・終了日を使い、対象年月を含む履歴を選択します。hとiの開始日・終了日の配置は、公式解答例では順不同とされています。

設問2(2)(i)

手順3では、計画年月が等級の有効期間に含まれるかを判定します。開始日と対になる期間の終了側の列が必要です。公式解答例では「等級終了日」です。現在の等級を一律に使うのではなく、計画年月に対応する履歴の等級を取得する点が重要です。hとiは公式解答例で順不同です。

設問2(2)(j)

社員番号と等級の開始日・終了日を持ち、対象時点の等級を取得できるテーブルを図5から選びます。公式解答例では「社員等級」です。社員の基本情報を持つ社員テーブルではなく、等級の履歴を管理するテーブルを検索します。

設問2(2)(k)

手順3では社員等級から対象年月に有効な区分を取得し、手順4ではそれを四つのランクに変換します。〔PJ収支管理〕(3)にある等級1~8が変換元です。公式解答例では「等級」です。等級と、単価の区分となるランクを混同しないようにします。

設問2(2)(ℓ)

〔PJ収支管理〕(3)では、社員の等級1~8を四つのランクに分類します。図5で等級とランクの対応を持つテーブルが、その変換に使われます。公式解答例では「等級ランク」です。手順3で求めた等級を条件として、単価検索に必要なランクを取得します。

設問2(2)(m)

部ランク単価テーブルの単価は、部コード、ランク、年度の組合せで決まります。手順4で等級ランクから取得し、手順6へ渡す列は「ランク」です。公式解答例も同じです。社員の等級をそのまま単価検索に使わず、対応するランクへ変換します。

設問2(2)(n)

〔組織の概要〕(6)では社員の所属部が異動によって変わり、〔PJ収支管理〕(3)では当該月の所属部の単価を使います。そのため、対象年月の所属履歴を選ぶ開始側の列が必要です。公式解答例では「所属開始日」です。nとoの開始日・終了日の配置は順不同とされています。

設問2(2)(o)

所属履歴から計画年月に有効な部を選ぶには、所属開始日だけでなく終了日も確認します。図5の社員所属テーブルに着目すると、公式解答例は「所属終了日」です。社員番号と所属期間を使い、異動前後の履歴から対象年月の所属を特定します。nとoは公式解答例で順不同です。

設問2(2)(p)

社員番号、部コード、所属開始日、所属終了日を持つ履歴テーブルを図5から選びます。公式解答例では「社員所属」です。PJの担当開発部とは別に、実際に労務時間を計画された社員の所属部を検索する必要があります。他部から支援する社員もいるためです。

設問2(2)(q)

手順5で社員所属から求めるのは、計画年月における社員の所属部です。手順6の部ランク単価のキーにも使うため、公式解答例では「部コード」です。手順1で指定したPJの担当開発部コードを流用すると、他部から支援する社員の単価を正しく選べません。

設問2(2)(テーブル名)

手順2で取得した各計画行について、等級履歴、等級ランク、所属履歴をたどることが結合処理の負荷になっています。公式解答例では、列を追加するテーブルは「PJ労務時間計画」です。単価検索に必要なランクと所属部コードを計画行に持たせることで、部ランク単価への検索に必要な値を直接取得できます。

設問2(2)(列名)

部ランク単価の検索キーはランク、部コード、年度です。年度は既存の計画年月から求められるので、公式解答例で追加する二つの列は「ランク、部コード」です。保存するのは当該計画年月に対応する社員のランクと所属部コードです。これにより、単価検索のために等級や所属の履歴を毎回たどる処理を省けます。

設問2(3)(集計処理名)

〔PJ収支管理〕(5)では、登録済みの実績値に誤りがあっても、その値を変更せず翌月以降の値で修正します。一方、計画値は(6)によって変更され、見込値にもその変更が影響します。公式解答例で結果を保持できる集計処理名は「開発担当部別実績集計」です。採点講評でも、計画値・見込値・実績値のうち、実績値だけが変更されないことの読み取りを求めています。

設問2(3)(理由)

月次実績反映処理で登録した過去の実績は、誤りが見つかっても直接更新されません。したがって、月次処理時に実績集計の結果を作成して保持できます。公式解答例の理由は「実績値は変更されないので」です。20字以内では、この変更されない性質を端的に示します。将来月に補正値が追加されることと、登録済みの実績値を変更することを区別しましょう。

設問2(4)(i)(テーブル名)

案Aで受信するデータは、案件明細番号と当年度のPJ売上見込額です。案件明細単位に対応付け、年度単位の金額として保存できる既存テーブルを選びます。公式解答例では「案件明細年度収支」です。このテーブルの主キーは案件明細番号と年度なので、受信した当年度の見込額を適切な行に登録できます。

設問2(4)(i)(列名)

案件明細年度収支には、既に案件管理システムで算出する売上見込額があります。要望①では、PJ発足済みの場合に先月までの実績を考慮したPJ側の見込額を使うので、その金額を識別できる列を追加します。公式解答例では「PJ売上見込額」です。案件管理側の既存の売上見込額と区別して保持します。

設問2(4)(ii)(ア)

表6の手順①は、当年度に存在するPJを選び、後続の実績・計画の集計結果を結合する基準を作る処理です。図5でPJコード、案件明細番号、PJ開始日、PJ終了日を持つテーブルに着目します。公式解答例では「PJ」です。これを左外結合の左側にすることで、実績や計画の集計行がないPJも検索対象に残せます。

設問2(4)(ii)(イ)

表6の手順②では、PJコードごとに当年度の実績額を集計します。求めるのは売上見込額なので、対象は売上の実績です。公式解答例では「PJ売上実績」です。第3営業日23時の月次実績反映処理が終わった第4営業日以降には、先月分までの実績が反映されています。

設問2(4)(ii)(ウ)

表3の見込集計は、実績反映年月以前の実績と、それより後の計画を合算します。第4営業日以降の検索では先月までの実績が反映済みなので、今月以降の売上計画を取得します。公式解答例では「PJ売上計画」です。実績と計画をそれぞれPJ単位に集計してから結合します。

設問2(4)(ii)(エ)

案A・案Bが対象とするのは「当年度に存在するPJ」です。開始年度が当年度のPJだけに限定すると、前年度から継続しているPJを漏らします。公式解答例では「当年度にPJ期間が存在する行を選択する」としています。具体的には、PJ開始日が当年度末日以前、かつPJ終了日が当年度初日以降となり、PJ期間と当年度が重なる行を選びます。

設問2(4)(ii)(オ)

先月までの部分は手順②の実績額で賄うため、手順③では今月以降の計画額だけを加えます。公式解答例では「PJコードごとに当年度の今月以降の計画額を集計する」です。当年度の全計画を加えると、実績として数えた過去月の分を重複計上します。採点講評では、図5・表3・表6を基に、各表を集計して結合するSQLをイメージすることが勧められています。

設問3(1)

〔組織変更に伴うデータの変更〕2.(3)では、変更前のPJと変更後の部の対応、案分比率、分割後のPJコードを管理するとしています。公式解答例の構造は、PJ変更(変更前PJコード、変更後部コード、案分比率、分割後PJコード)です。主キーは変更前PJコードと変更後部コードの組合せです。図7のように一つの変更前PJが複数の部へ分かれるため、変更前PJコードだけでは行を識別できません。外部キーは、変更前PJコードと分割後PJコードがPJのPJコードを、変更後部コードが部の部コードを参照します。対象は1回の組織変更なので、この解答例では変更年月を識別用の列に加えていません。採点講評では、四つの列の導出と、行を一意に識別する主キーの選択を重視しています。

設問3(2)(表7)

表4ではPJコード11000130の開始日が2010-05-25、終了日が2010-07-30です。図7では、このPJを部0102の存続PJ11000130と、部0108の新規PJ11000131に分割し、新規PJの案件明細番号を14333としています。公式解答例の表7は、①11000130/2010-05-25/2010-07-30/13333/0102、②11000131/2010-05-25/2010-07-30/14333/0108の2行です。組織変更後の部が年度当初から存在したとして集計する要望に合わせ、新規PJも元のPJと同じ期間を持ちます。新規登録する日が8月だからといって、PJ開始日を8月1日に変更しない点が重要です。残りの記入行は使いません。

設問3(2)(表8)

表5の11000130の売上実績は、2010年7月の2、000、000円です。図7で新規PJ11000131の案分比率は60%なので、移す金額は2、000、000×0.6=1、200、000円となります。案2では過去の実績を保持し、組織変更月の2010年8月に新規PJの実績と存続PJのマイナス補正を追加します。公式解答例の表8は、①11000130/2010-07/2、000、000、②11000130/2010-08/-1、200、000、③11000131/2010-08/1、200、000の3行です。存続PJの年度合計は800、000円となり、40%の案分結果に一致します。採点講評では、元の7月の行が変更されないことの読み取りを求めています。

設問3(3)

公式解答例で○を付けるテーブルは、PJ、PJ売上計画、PJ売上実績、部、部ランク単価、社員所属、案件明細、PJ労務時間計画、PJ外注費計画、PJ材料費計画、PJその他費用計画、PJ労務時間実績、PJ外注費実績、PJ材料費実績、PJその他費用実績です。表9に印刷済みのPJ・PJ売上計画・PJ売上実績の○も含みます。組織変更では、新設部とその単価、社員の所属履歴、新規PJに対応する案件明細が必要になります。各計画テーブルは分割後の組織の計画に変更し、各実績テーブルには案2の案分・補正データを追加します。元の実績行を保持する場合でも、追加があるため○です。公式解答例で○がないのは、等級ランク、社員、社員等級、勘定科目、外注会社、契約形態、PJ種別です。組織変更によって更新される所属情報と、変更対象にならない社員の基本情報や等級を区別します。

学習のポイント

業務上の管理単位と時点を明確にし、サブタイプの主キー継承、履歴の期間検索、集計対象の違い、過去の実績を保持する補正処理を説明できるようにしましょう。

出典:独立行政法人 情報処理推進機構(IPA)平成23年度特別 データベーススペシャリスト試験 午後Ⅱ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針