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

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

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

問題

問2 データベースの設計に関する次の記述を読んで,設問1~3に答えよ。 J社は,完成品を組み立てる製造業者に部品を供給する部品製造業者である。J社では,生産管理のための新システムを開発する予定である。そこで,システム部のK部長の下にプロジェクトチームを編成し,L君がデータベースの設計を担当することになった。 〔業務概要〕 1.部品管理 部品は,一つ又は複数の部品から構成され,図1に示すような階層構造で管理されている。 図1 部品の階層構造の例 図1において,各階層の上位から見た下位の部品を子部品,下位から見た上位の部品を親部品と呼ぶ。子部品を組み立てて親部品を作る。図1では,部品Aは部品B,C及びDの親部品であり,部品B,C及びDは部品Aの子部品である。部品Bは部品E,Dの親部品であり,逆に部品Dから見ると,部品A,Bはともに親部品である。 親部品と子部品は,ともに部品として管理する。部品は,部品番号によって,J社内で一意に識別される。 (1) 部品の区分 部品は次の三つの観点で区分されている。 (a) 調達区分 部品には,社外から調達するものとJ社で製造するものがあり,調達区分はこの観点から分類する場合の区分である。前者を調達品,後者を製造品と呼ぶ。調達品か製造品かは,部品ごとに決められている。図1で,部品A,Bは製造品,部品C,D及びEは調達品である。同じ調達品でも多くの場合,複数の調達先から仕入れている。 (b) 販売区分 部品には,販売するものと販売しないものがあり,販売区分はこの観点から分類する場合の区分である。前者を製品と呼ぶ。製品は,部品番号とは別に,製品番号によってJ社内で一意に識別される。製造品だけが製品として販売され,調達品はそのまま製品として販売されることはない。 (c) 顧客仕様区分 部品には,J社が顧客の設計仕様に従って製造又は調達するものとそれ以外のものがあり,顧客仕様区分はこの観点から分類する場合の区分である。前者を顧客仕様部品と呼ぶ。顧客仕様部品の中で,顧客に販売するものを顧客仕様製品と呼ぶ。顧客仕様製品を構成する子部品には,顧客仕様部品以外の部品が含まれることがある。 (2) リードタイム 部品には,部品ごとにリードタイム(以下,LTという)が決められている。 LTには,1階層LTと全階層LTがある。 (a) 1階層LT 製造品の場合は製造LTと呼び,子部品がすべてそろっている状態での親部品の組立期間である。調達品の場合は調達LTと呼び,社外から調達するのに必要な期間で,調達先ごとに設定される。 (b) 全階層LT 全階層LTはすべての子部品をそろえるための期間に親部品の組立期間を加えたものである。部品の全階層LTを算出するときに,子部品に調達品がある場合は,同じ調達品の中で,最大の調達LTが用いられる。全階層LTは,構成部品が変更になるたびに一括して再計算される。 図1で示した部品の調達LT,製造LT及び全階層LTを,表1に示す。 表1 部品の調達LT,製造LT及び全階層LT (3) 部品使用開始日・部品使用終了日と部品販売開始日・部品販売終了日 一つの部品は,子部品として使用されたり,製品として販売されたりする。部品が,子部品として使用される日,又は製品として出荷される日を,使用日と呼ぶ。新規部品の最初の使用日を部品使用開始日,最後の使用日を部品使用終了日と呼ぶ。部品は,製造又は調達された日の翌日から使用可能になる。 新規部品の注文受付を開始する日を部品販売開始日と呼び,部品の注文受付を終了する日を部品販売終了日と呼ぶ。 (4) 製品番号の付与 製品には,通常,一つの製品番号を付与するが,複数の製品番号を付与する場合もある。後者は,量産効果によってコストを抑えるため,性能の高い部品を集中製造し,性能の低い製品として転用する場合である。このため,部品,製品に対して,それぞれ部品仕様,製品仕様を分けて定義する。 (5) 部品構成の管理 (a) 構成管理 一つの親部品を製造するときの,子部品の種類とその使用数量を表したものを部品構成表と呼ぶ。表2に部品構成表の例を示す。構成適用開始日,構成適用終了日は,部品構成表の各子部品に関する情報の有効期間を規定するものである。ここで,構成適用終了日の初期値には,9999-12-31が設定されている。 部品構成表は,新規の親部品の製造時に新規作成され,子部品の変更時に変更される。表2では,部品Aについて,次の新規作成・変更が行われたことを表している。 ① 2007年9月1日に,部品B,C及びDを使用して,部品Aを新規に製造開始。 ② 2008年9月30日に,部品Cの使用を終了。2008年10月1日から部品Fの使用を開始。 ③ 2008年10月1日から,部品Dの使用数量を8個から4個に変更。 表2 部品構成表の例 (b) 登録日付のチェック 部品構成表の新規作成・変更に伴い,子部品の手配計画も変更される。構成適用開始日に当該子部品をそろえられるよう手配する日を,部品手配開始日と呼ぶ。また,当該子部品の手配を終了する日を,部品手配終了日と呼ぶ。部品手配開始日を設定する際には,構成適用開始日と部品の各LTとを比較し,実現性をチェックする。 2.顧客管理 (1) 顧客と企業の登録 顧客とは,J社が取引を行う事業所の単位である。複数の事業所を有するような企業では,一つの企業で複数の顧客が登録されることがある。顧客に対しては,J社内で一意な顧客番号を付与し,顧客番号とは別に企業に対しては,J社内で一意な企業コードを付与する。顧客単位に取引の開始・終了を管理し,一度取引が終了した顧客と取引を再開する場合は,新たな顧客番号を付与する。 (2) 顧客と営業担当者との関係 1顧客に対して,1人の営業担当者が割り当てられる。1人の営業担当者は複数の顧客を担当することができる。組織変更によって,営業担当者が変わることがあるが,契約内容の問合せなどに備えて,過去の営業担当者を特定する仕組みが必要である。1人の営業担当者がある顧客の担当から外れた後,再度同じ顧客を担当することがある。 3.顧客仕様製品の新システムへの登録 顧客仕様製品を新規に受注する場合には,J社側で顧客仕様製品を新システムに登録する。その場合,顧客から指定された顧客仕様製品名と顧客ごとに一意な顧客仕様製品コードを登録し,対応する部品番号は新システムで一意な値が自動採番される。ただし,受注したときに顧客仕様製品名と顧客仕様製品コードが未定の場合,顧客仕様製品名と顧客仕様製品コードは空値(NULL)のままで新システムに登録される。その後,顧客仕様製品名と顧客仕様製品コードが決定した時点で,それぞれ登録する。 〔テーブル設計〕 L君はデータベースの設計に当たり,まず図2に示すテーブルを設計した。これに対し,K部長からは次のような指摘があった。 [指摘事項] ① 主キー,外部キーが設定されていないテーブルがある。 ② “顧客担当”テーブルは第3正規形にした方がよい。 ③ “部品構成”テーブルの日付は,実現性の面から矛盾しない日付となるように制約を整理する必要がある。 ④ “部品”テーブルは主キーの設定に誤りがあるので,再設計する必要がある。 図2 L君が設計したテーブル構造(未完成) 解答に当たっては,巻頭の表記ルールに従うこと。 なお,テーブル構造の表記は,“関係データベースのテーブル(表)構造の表記ルール”を用いること。さらに,主キー及び外部キーを明記せよ。 設問1〔テーブル設計〕におけるK部長の指摘事項①,②について,(1)~(3)に答えよ。 (1)“顧客担当”テーブルは,第1正規形である。第2正規形でない理由を,列名を用いて具体的に60字以内で述べよ。 (2)“顧客担当”テーブルを第3正規形に分割し,分割後の“顧客担当”テーブル及び新たなテーブルの主キー及び外部キーも併せて答えよ。ここで,新たに作成するテーブルについては,内容を表す適切なテーブル名として本文中の用語を用いること。 (3)“顧客仕様製品”テーブルには二つの候補キーがある。これらの候補キーに関して,(a),(b)に答えよ。 (a)二つの候補キーのうち,適切な主キーを答えよ。 (b)もう一方の候補キーが主キーとして不適切な理由を,候補キーを具体的に示し,60字以内で述べよ。 設問2〔テーブル設計〕におけるK部長の指摘事項③について,(1),(2)に答えよ。 なお,解答に当たっては,本文中の用語を用いて,具体的に述べること。 (1)子部品の種類が変更される場合,変更後の子部品の,部品手配開始日,構成適用開始日,全階層LTとの間に生じる制約を,50字以内で述べよ。 (2)親部品が新規に製造される場合,新規作成された部品構成表の構成適用開始日と,親部品の,部品使用開始日と製造LTとの間に生じる制約を,60字以内で述べよ。 設問3〔テーブル設計〕におけるK部長の指摘事項④について,(1),(2)に答えよ。 (1)“部品”テーブルを第3正規形に再設計し,主キー及び外部キーを正しく設定せよ。ここで,再設計したテーブルについては,内容を表す適切なテーブル名として,本文中の用語を用いること。 (2)“部品”テーブルの列の値が設定されるかどうかは,部品によって異なる。これを表すために,図2の“部品”テーブルに,部品区分を表す列を追加する。 そこで,部品区分とその組合せを,表3のように整理した。表3中のY,Nの意味を,本文中の用語を用いて述べよ。ここで,組合せ3(部品区分1~3がそれぞれY,N,Yである部品)は顧客仕様製品を表す。 表3 部品区分と組合せを整理した表
図1 部品の階層構造の例。部品Aを最上位とし,部品B・C・Dを子部品として配置し,部品Bの下に部品EとDを配置した階層構造図。
図1 部品の階層構造の例。部品Aを最上位とし,部品B・C・Dを子部品として配置し,部品Bの下に部品EとDを配置した階層構造図。
表1 部品の調達LT,製造LT及び全階層LT。部品A~Eについて,調達先,調達LT,製造LT,全階層LTを一覧にした表。
表1 部品の調達LT,製造LT及び全階層LT。部品A~Eについて,調達先,調達LT,製造LT,全階層LTを一覧にした表。
表2 部品構成表の例。部品Aの構成表で,子部品B・C・F・Dの使用数量と構成適用開始日・終了日を示す表。
表2 部品構成表の例。部品Aの構成表で,子部品B・C・F・Dの使用数量と構成適用開始日・終了日を示す表。
図2 L君が設計したテーブル構造(未完成)。顧客担当,調達先,社員,部課,部品,顧客仕様製品,部品構成のテーブル名と列名を列挙した未完成のテーブル構造。
図2 L君が設計したテーブル構造(未完成)。顧客担当,調達先,社員,部課,部品,顧客仕様製品,部品構成のテーブル名と列名を列挙した未完成のテーブル構造。
表3 部品区分と組合せを整理した表。三つの部品区分のY・Nの組合せ1~8と,該当する部品の有無を整理した表。組合せ1・2は無,組合せ3~8は有。
表3 部品区分と組合せを整理した表。三つの部品区分のY・Nの組合せ1~8と,該当する部品の有無を整理した表。組合せ1・2は無,組合せ3~8は有。
解き方のヒントを見る

項目どうしの決定関係を確かめる

データベース設計の設問では、ある項目の値が決まると他のどの項目の値が決まるのかという関係を、業務上の意味に照らして一つずつ確かめることが検討の出発点になります。記述された業務ルールと項目の対応を丁寧に読み取りましょう。

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

問われているのは、各項目がどの項目の組合せによって一意に定まるかを業務の約束事から読み解けるかどうかです。値の出現例だけで判断せず、ルールとして常に成り立つ関係かを見極める視点が問われます。

視点

表の分け方、行を識別する項目、項目の値に課す条件は、どれも「どの項目の値が決まれば、別の項目の値が決まるのか」という関係の捉え方に左右されます。この関係は、たまたま手元にあるデータの並びから決まるものではありません。業務の約束事として常に成り立つかどうかで判断します。まず業務の説明から、何が何を決めるのかを自分の言葉で書き出してください。そのうえで、問われている内容と照らし合わせる進め方が有効です。

確認ポイント

  • 業務の説明の中で、ある項目の値が決まれば別の項目の値も決まると読み取れる記述を拾い出したか
  • その関係が一時的な例ではなく、業務ルールとして常に成り立つものかを確かめたか
  • 書き出した関係と問われている内容を突き合わせ、根拠を業務の記述に戻って説明できるか
正解と解説を見る

解説

部品製造業者J社の生産管理システムについて、L君が設計したテーブルをK部長の指摘に沿って見直す問題です。問われているのは、顧客担当テーブルの第3正規形への分割、顧客仕様製品テーブルの主キー選定(NULLになり得る候補キーを避ける)、部品構成の日付とLTの間の制約の整理、部品テーブルの部品・製品・調達品への再設計、部品区分フラグの意味付けです。いずれも本文の業務ルールから関数従属性・多重度・日付の大小関係を読み取れば、公式解答例の内容を導けます。

問題の全体像

J社は部品製造業者で、部品を階層構造で管理しています。部品は三つの観点で区分されます(調達品か製造品か、製品かどうか、顧客仕様部品かどうか)。リードタイムには製造LT・調達LT・全階層LTがあり、部品構成表では構成適用期間が管理されます。L君が作った図2のテーブルに対して、K部長は四つの指摘をしました。①主キー・外部キーの未設定、②顧客担当テーブルを第3正規形にすべき、③部品構成の日付制約の整理、④部品テーブルの主キー設定の誤り、です。出題趣旨によると、この問題のねらいは項目数の多い業務でデータ項目を整理する能力を問うことです。具体的には、正規化によるテーブル分割、区分列の追加によるサブタイプの識別、データ項目間の制約の分析とテーブル設計への織り込みが問われています。

設問1(1)

本文2.(2)に注目します。1顧客には1人の営業担当者が割り当てられますが、担当者は変わることがあり、過去の担当者も特定する必要があります。さらに、同じ担当者が再び同じ顧客を担当することもあります。そのため、顧客担当テーブルの1行は「ある顧客のある担当期間」を表し、{顧客番号、 顧客担当開始日}が候補キーになります(担当社員番号は再担当があるため識別に使えません)。一方、顧客名は顧客番号だけで決まります。公式解答例では、非キー列の顧客名が候補キー{顧客番号、 顧客担当開始日}の一部である顧客番号に部分関数従属するため、としています。答案には「候補キーの具体的な列」「部分関数従属する非キー列」「従属先の顧客番号」の三要素を60字以内で入れます。

設問1(2)

まず、顧客番号だけで決まる列(顧客名、企業コード、顧客取引開始日、顧客取引終了日)を顧客テーブルに分けます。本文2.(1)にあるとおり、取引の開始・終了は顧客単位で管理され、取引を再開すると新しい顧客番号が付与されるためです。次に、企業名は顧客番号→企業コード→企業名という推移的関数従属になるので、企業テーブルに分けます。公式解答例の構成は次のとおりです。顧客(顧客番号、 顧客名、 企業コード、 顧客取引開始日、 顧客取引終了日)の主キーは顧客番号で、企業コードは企業テーブルを参照する外部キーです。企業(企業コード、 企業名)の主キーは企業コードです。顧客担当(顧客番号、 顧客担当開始日、 顧客担当終了日、 担当社員番号)の主キーは{顧客番号、 顧客担当開始日}で、担当社員番号は図2の社員テーブルの主キーである社員番号を参照する外部キーです。営業担当者は社員なので、指摘事項①にある外部キーの設定もここで満たします。なお、主キーの一部である顧客番号は顧客テーブルの顧客番号に対応し、顧客担当の各行がどの顧客のものかを示しています。新しいテーブル名には、本文の用語「顧客」「企業」を使います。

設問1(3)(a)

本文3.によると、顧客仕様製品を登録すると、対応する部品番号がシステムで一意な値として自動採番されます。一方、顧客仕様製品コードは顧客ごとに一意なので、{顧客番号、 顧客仕様製品コード}ももう一つの候補キーです。しかし、この顧客仕様製品コードは登録時に未定(NULL)の場合があります。登録時点で必ず値が決まるのは部品番号だけです。公式解答例でも主キーは部品番号です。

設問1(3)(b)

本文3.には、受注時に顧客仕様製品名と顧客仕様製品コードが未定の場合はNULLのまま登録する、とあります。主キーを構成する列はNULLにできないので、{顧客番号、 顧客仕様製品コード}は主キーに向きません。公式解答例では、候補キーである顧客番号・顧客仕様製品コードのうち顧客仕様製品コードが空値のまま登録される場合があるから、としています。答案には「候補キーを具体的に示すこと」と「顧客仕様製品コードがNULLで登録され得ること」の二点を60字以内で入れます。

設問2(1)

本文1.(5)(b)に注目します。部品手配開始日は、構成適用開始日に子部品をそろえられるよう手配する日です。また、全階層LTはすべての子部品をそろえる期間に組立期間を加えたもので、子部品を種類ごと変更する場合は、変更後の子部品をゼロからそろえる必要があります。さらに、本文1.(3)によると部品は製造・調達した日の翌日から使用可能です。そのため、手配開始から全階層LTちょうどでは間に合わず、差が全階層LTより大きい必要があります。公式解答例では、変更後の子部品の構成適用開始日から部品手配開始日を引いた日数が全階層LTよりも大きいこと、としています。答案には「構成適用開始日−部品手配開始日」と「全階層LTより大きい」という不等式を50字以内で書きます。

設問2(2)

親部品を新規に製造する場合を考えます。部品構成表の構成適用開始日は、子部品を使い始める日、つまり子部品がそろって親部品の組立を始められる日です。製造LTは、子部品がすべてそろった状態での親部品の組立期間です(本文1.(2)(a))。親部品は製造した日の翌日から使用可能なので、親部品の部品使用開始日から製造LTをさかのぼった日付は、構成適用開始日より後である必要があります。公式解答例では、親部品の部品使用開始日から製造LTを引いた日付が、新規作成された部品構成表の構成適用開始日よりも後であること、としています。答案では、比較する二つの日付と「後である」という大小関係を60字以内で明確にします。

設問3(1)

図2の部品テーブルは部品番号だけを主キーにしていますが、本文には二つの1対多の関係があります。一つ目は、1部品に複数の製品番号を付与する場合があること(本文1.(4))です。そのため、製品番号・製品名・製品仕様・部品販売開始日・部品販売終了日は製品番号で決まります。二つ目は、同じ調達品を複数の調達先から仕入れ、調達LTは調達先ごとに設定されること(本文1.(1)(a)、1.(2)(a))です。そのため、調達LTは{部品番号、 調達先コード}で決まります。公式解答例の構成は次のとおりです。部品(部品番号、 部品名、 部品使用開始日、 部品使用終了日、 部品仕様、 製造LT、 全階層LT)の主キーは部品番号です。製品(製品番号、 製品名、 部品販売開始日、 部品販売終了日、 製品仕様、 部品番号)の主キーは製品番号で、部品番号は部品テーブルを参照する外部キーです。調達品(部品番号、 調達先コード、 調達LT)の主キーは{部品番号、 調達先コード}です。この主キーの構成列のうち、部品番号は部品テーブルを参照し、調達先コードは図2の調達先テーブルの主キーである調達先コードを参照する外部キーでもあります。つまり、調達品テーブルは部品と調達先の多対多の関係を表す連関のテーブルで、調達LTはその組合せの属性です。テーブル名には本文の用語「製品」「調達品」を使います。

設問3(2)

表3では、組合せ1・2(部品区分1=Y、部品区分2=Y)だけが「部品無」です。本文1.(1)(b)に「製造品だけが製品として販売され、調達品はそのまま製品として販売されることはない」とあるので、区分1=製品、区分2=調達品と対応させると矛盾がありません。組合せ3(Y、 N、 Y)が顧客仕様製品を表すという条件は、製品であり、製造品であり、顧客仕様部品であるという意味になり、本文1.(1)(c)と一致します。公式解答例では、部品区分1はYが製品・Nが製品以外、部品区分2はYが調達品・Nが製造品、部品区分3はYが顧客仕様部品・Nが顧客仕様部品以外です。本文の用語をそのまま使って答えるのがポイントです。

学習のポイント

本文の業務ルールから関数従属性と多重度を読み取り、正規化とキー設定に結び付ける力が必要です。あわせて、LTと日付の制約を不等式として正確に表現する練習をしましょう。

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

関連する過去問一覧

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