DBデータベーススペシャリスト試験 午後Ⅱ
平成23年度特別 データベーススペシャリスト 午後Ⅱ 問1
事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。
問題
















解き方のヒントを見る
検討の前提と対象範囲をそろえる
検討を始める前に、何を対象に、どの範囲で考えるのかを整理しましょう。同じ言葉でも、対象範囲が違えば意味の受け取り方が変わります。まずは与えられた条件に沿って、検討の前提をそろえることに集中してください。
この問題で問われていること
この問題では、検討の対象範囲が途中で変わっていないかに目を向けましょう。与えられた条件のうち、どこまでを一つの対象として扱うのかを確認し、その範囲を保ったまま考えを進めることが手掛かりになります。
視点
対象範囲とは、今の検討に含めるものの境界です。結論を急ぐ前に、与えられた条件からその境界を確かめ、考えている内容が範囲から外れていないかを点検しましょう。
確認ポイント
- 検討に含める対象は明確か
- 対象範囲を条件に沿って捉えているか
- 考える途中で対象範囲を変えていないか
正解と解説を見る
解説
案件管理と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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針