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

平成27年度春期 データベーススペシャリスト 午後Ⅰ 問2

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

問題

問2 データベースの設計に関する次の記述を読んで、設問1、2に答えよ。 D社は、電気設備工事を受注し、自社で施工する会社である。D社では、今回、工事案件を管理するシステム(以下、案件管理システムという)を構築することになった。 〔対象業務の概要〕 1.組織の管理 (1)三つの営業部と九つの工事部がある。部は、部コードで一意に識別する。 (2)年度当初に、営業部の当年度目標受注額と、工事部の当年度目標原価率を設定して管理する。 2.社員の管理 (1)社員は、社員番号で一意に識別する。 (2)社員は、営業部又は工事部のいずれか一つの部に所属する。 3.顧客の管理 (1)顧客は、顧客番号で一意に識別する。 (2)顧客を類別する顧客グループを設ける。顧客グループは、顧客グループコードで一意に識別する。 (3)顧客は、顧客グループのいずれか一つに所属する。 4.顧客グループと営業部の関係 (1)一つの営業部は、複数の顧客グループを担当する。一つの顧客グループを、複数の営業部が担当することはない。 (2)1人の営業部社員は、一つの顧客グループを担当する。一つの顧客グループを、複数の営業部社員が担当する場合がある。 5.案件の管理 (1)案件は、営業活動の単位である。案件は、案件番号で一意に識別する。 (2)案件ごとに、案件名、案件状態(“商談中”、“受注”、“失注”、“消滅”)、案件内容、案件開始日、顧客、受注見込額、担当営業部などを記録する。案件状態が“失注”又は“消滅”となった案件は無効とする。 (3)商談が進み、案件を担当する工事部が決定した時点で、案件詳細を記録する。 ① 案件詳細は、案件詳細全体で一意な案件詳細番号で識別し、案件詳細名、工事開始予定日、工事終了予定日、担当工事部、売上見込額、見込原価(労務費、材料費など)などを記録する。 ② 受注した案件の規模・難易度・期間などによって、複数の工事部が担当することになった場合、工事部ごとに案件詳細を記録する。 ③ 複数の案件詳細を記録した後に、作業内容の見直しによって担当工事部が減った場合、担当から外れた工事部の案件詳細は無効とする。 ④ 一つの案件に対応する無効としていない案件詳細の売上見込額の合計は、案件の受注見込額と一致させる。 (4)案件の詳細化によって、一つの案件を複数に分割する場合がある。逆に、複数の案件を一つに統合する場合がある。ただし、案件の分割と統合が、同時に行われることはない。案件ごとに、分割の場合は分割元案件番号を、統合の場合は統合先案件番号を記録する。また、案件の統合後、不要となった案件は無効とする。 (5)案件を分割した場合、分割前の案件詳細が分割後の案件のいずれかに対応付けられたり、案件詳細が分割前の案件に対応付けられたままとなったりすることがある。 (6)複数の案件を一つに統合した場合、統合前の案件詳細が統合後の案件に対応付けられる。これらの案件詳細のうち、工事部が同じものは一つに統合し、不要となった案件詳細は無効とする。 (7)案件の変更は、担当営業部の社員が実施する。案件詳細の変更は、担当営業部の社員又は担当工事部の社員のいずれかが実施する。案件の変更時、その変更履歴及び変更を実施した社員を記録する。案件詳細についても同様に記録する。 6.受注の記録 案件状態が“受注”となった時点で、案件ごとに受注として記録する。これ以降、案件及び案件詳細が変更されることはない。受注は、受注番号で一意に識別する。受注ごとに、受注名、受注日、契約開始日、契約終了日、受注額、契約種別(“請負”、“保守”など)、対応する案件番号などを記録する。また、受注明細として、担当工事部ごとの受注明細名、受注明細額などを記録する。受注明細は、受注番号、受注明細番号で一意に識別する。 7.案件の集計 (1)顧客グループ名ごと案件状態名ごとに、受注見込額を集計する。 (2)顧客グループ名ごと案件状態名ごと工事部名ごとに、売上見込額を集計する。 〔概念データモデルと関係スキーマ〕 〔対象業務の概要〕に基づいて作成した、案件管理システムの概念データモデルを図1に、関係スキーマを図2に示す。 図1 概念データモデル(未完成) 図2 関係スキーマ(未完成) 解答に当たっては、巻頭の表記ルールに従うこと。 設問1 図1の概念データモデル及び図2の関係スキーマについて、(1)、(2)に答えよ。 (1)図2中の【a】~【h】に入れる適切な外部キーとなる属性の属性名を答えよ。 (2)図1のリレーションシップは未完成である。必要なリレーションシップを全て記入し、図を完成させよ。ここで、図2の関係“案件変更履歴”の案件名以降の属性に対応するリレーションシップ、及び関係“案件詳細変更履歴”の案件詳細名以降の属性に対応するリレーションシップの表記は不要である。また、エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。 なお、識別可能なサブタイプが存在する場合、他のエンティティタイプとのリレーションシップは、スーパタイプ又はサブタイプのいずれか適切な方との間に記述せよ。 設問2 図2の関係スキーマを、テーブルとして定義する。ここで、サブタイプの関係とスーパタイプの関係は、スーパタイプの関係にまとめたテーブルとして定義することを前提として、案件の集計について、(1)、(2)に答えよ。 (1)図3中の【ア】~【シ】に入れる適切なテーブル名又は列名を答えよ。 ① 有効な案件(無効フラグが0である案件)について、顧客グループ名ごと案件状態名ごとに受注見込額を集計するSQL文 図3 案件の集計用のSQL文 ② 有効な案件及び案件詳細(無効フラグが0である案件及び案件詳細)について、顧客グループ名ごと案件状態名ごと工事部名ごとに売上見込額を集計するSQL文 (2)図3中の①と②のSQL文を実行すると、①の受注見込額の合計と、②の売上見込額の合計が一致しない場合がある。その理由を45字以内で述べよ。
図1 概念データモデル(未完成)。社員、部、営業部、工事部、顧客グループ、顧客、案件、案件詳細、受注などのエンティティを配置した未完成の概念データモデル。
図1 概念データモデル(未完成)。社員、部、営業部、工事部、顧客グループ、顧客、案件、案件詳細、受注などのエンティティを配置した未完成の概念データモデル。
図2 関係スキーマ(未完成)。部、社員、顧客、案件、案件詳細、変更履歴、受注及び受注明細の関係と属性を示した未完成の関係スキーマ。
図2 関係スキーマ(未完成)。部、社員、顧客、案件、案件詳細、変更履歴、受注及び受注明細の関係と属性を示した未完成の関係スキーマ。
図3 案件の集計用のSQL文。案件と案件詳細を対象に、顧客グループ名、案件状態名、工事部名ごとに金額を集計するSQL文の空欄付き設問。
図3 案件の集計用のSQL文。案件と案件詳細を対象に、顧客グループ名、案件状態名、工事部名ごとに金額を集計するSQL文の空欄付き設問。
解き方のヒントを見る

概念と集計の対応を見直す視点

概念設計から関係スキーマ、さらに集計処理へ読み進めるときは、各段階で表している対象と情報の粒度が保たれているかを一貫して確認しましょう。表現の違いに惑わされず、意味の対応を丁寧に追うことが大切です。

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

一つの情報がどの対象に属し、どの単位でまとめられているかに注目し、設計上の表現と集計時の扱いが同じ意味を保っているかを確認しましょう。特定の答えではなく、対応関係の一貫性に絞って考えます。

視点

概念上の対象、データの持ち方、集計結果を順に対応づけ、名称だけで判断せず、対象・関係・粒度のつながりを追って整理する。

確認ポイント

  • 対象同士の関係を、どの単位の情報として捉えているか確認する。
  • 設計上の情報が、後段の処理でどの粒度に対応するか確認する。
  • 集計前後で、対象の意味や対応関係が変わっていないか確認する。
正解と解説を見る

解説

本問は、案件管理業務の要件を概念データモデルと関係スキーマに反映し、外部キー、履歴、サブタイプ、集計SQLの対応を説明する問題です。

問題の全体像

D社の案件管理では、部・社員・顧客・案件・案件詳細・受注を管理する。設問1は業務要件から外部キーと概念データモデルの関係を補い、設問2はそのスキーマを使って顧客グループ、案件状態、工事部別の集計SQLを完成させる。出題の中心は、担当関係、サブタイプ、変更履歴の記録主体、案件と案件詳細の登録契機を正確に読み取ることです。

設問1(1)(a)

営業部社員は一つの顧客グループを担当し、顧客グループ側には複数の営業部社員が担当する場合がある。したがって、営業部社員に顧客グループを特定する外部キーを置く。公式解答例では、aは顧客グループコードです。

設問1(1)(b)

一つの顧客グループを担当できる営業部は一つだけなので、顧客グループ側に担当営業部を示す外部キーを持たせる。公式解答例では、bは担当営業部コードです。

設問1(1)(c)

案件の分割では、分割前の案件を記録する必要があるため、案件自身を参照する外部キーが必要になる。公式解答例では、cは分割元案件番号です。

設問1(1)(d)

案件の統合では、統合後に対応する案件を記録する必要があるため、案件自身を参照する外部キーが必要になる。公式解答例では、dは統合先案件番号です。cとdは図中の順序を入れ替えてもよいとされている。

設問1(1)(e)

案件変更履歴には、変更を実施した社員を記録する。社員番号で社員を特定するため、公式解答例ではeは社員番号です。

設問1(1)(f)

案件詳細変更履歴についても、変更を実施した社員を記録する。したがって、公式解答例ではfも社員番号です。

設問1(1)(g)

受注は案件状態が受注になった案件を案件単位で記録し、対応する案件番号を持つ。公式解答例では、gは案件番号です。

設問1(1)(h)

受注明細は担当工事部ごとに記録するため、工事部を特定する外部キーが必要です。公式解答例では、hは担当工事部コードです。

設問1(2)

公式解答例の完成図で必要となる関係は、部と社員、社員と工事部社員・営業部社員、部と営業部・工事部のサブタイプ関係、営業部と顧客グループ、営業部社員と顧客グループ、顧客グループと顧客、顧客と案件、営業部と案件、案件状態と案件、案件と案件詳細、工事部と案件詳細、案件と案件変更履歴、営業部社員と案件変更履歴、案件詳細と案件詳細変更履歴、社員と案件詳細変更履歴、案件と受注、受注と受注明細、工事部と受注明細です。案件変更履歴は案件を変更する営業部社員に結び付け、案件詳細変更履歴は営業部社員又は工事部社員が変更できるため社員スーパタイプに結び付ける。

設問2(1)(ア)

①は顧客グループ名ごとに集計するため、顧客グループ表の顧客グループ名をSELECTし、GROUP BYにも指定する。公式解答例では、アは顧客グループ名です。

設問2(1)(イ)

①は案件状態名ごとにも集計するため、案件状態表の案件状態名をSELECTし、GROUP BYにも指定する。公式解答例では、イは案件状態名です。

設問2(1)(ウ)

①では受注見込額と無効フラグを持つ案件を基準にするため、公式解答例ではウは案件です。

設問2(1)(エ)

案件の顧客番号から顧客グループをたどるため、顧客表を結合する必要がある。公式解答例ではエは顧客です。

設問2(1)(オ)

顧客グループ名を取得するため、顧客表から顧客グループ表を結合する。公式解答例ではオは顧客グループです。

設問2(1)(カ)

案件状態名を取得するため、案件の案件状態コードから案件状態表を結合する。公式解答例ではカは案件状態です。

設問2(1)(キ)

案件と顧客を結合する条件は、案件が保持する顧客番号と顧客表の顧客番号の一致です。公式解答例ではキは顧客番号です。

設問2(1)(ク)

顧客と顧客グループを結合する条件は、顧客グループコードの一致です。公式解答例ではクは顧客グループコードです。

設問2(1)(ケ)

案件と案件状態を結合する条件は、案件状態コードの一致です。公式解答例ではケは案件状態コードです。

設問2(1)(コ)

②は顧客グループ名、案件状態名、工事部名ごとに集計するため、部表から部名を取得する。公式解答例ではコは部名です。

設問2(1)(サ)

②では案件詳細の売上見込額と無効フラグを利用し、案件と案件詳細を案件番号で結合する。公式解答例ではサは案件詳細です。

設問2(1)(シ)

案件詳細の担当工事部コードから部を結合し、部名を取得する。公式解答例ではシは部です。

設問2(2)

45字以内では、案件と案件詳細の登録契機が異なる点を押さえる。案件を担当する工事部が未決定なら案件詳細は記録されず、案件だけが存在する場合があるため、①には含まれても②には含まれない金額が生じる。公式解答例と採点講評では、案件詳細未登録の可能性と両者の記録契機の違いが示されている。

学習のポイント

業務上の担当者・所属・記録契機を、関係とSQLの結合条件へ変換する力を養う。

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

関連する過去問一覧

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