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

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

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

問題

問1 データベースの設計に関する次の記述を読んで,設問1~3に答えよ。 D社は,グループウェア(以下,GWという)を主力商品とするソフトウェア開発会社である。D社では現在,次期のGWを開発しており,S君がデータベースの設計を行っている。 〔GWの主な機能〕 1. 利用者管理機能 GWでは,ユーザ,グループなどを用いてGWの利用者の情報を管理する。 (1)ユーザとは,GW上の利用者である。GWの利用者は,GW上でユーザ登録を行い,ユーザID及びパスワードを使用してGWにログインし,GWの各機能を利用する。 (2)グループとは,GW上の組織である。例えば,営業部,経理部などである。グループには,上位のグループを一つ定めることができる。 (3)ロールとは,GW上の役割である。例えば,経理担当者,経理責任者などである。ロールは,ロールIDで一意に識別し,ロール名をもつ。 (4)ユーザは,一つのグループに必ず所属し,これを主務グループと呼ぶ。ユーザは,一つ又は複数のグループに兼務として所属することができる。また,ユーザには,必要に応じて一つ又は複数のロールを付与でき,一つのロールを複数のユーザに付与することもできる。 なお,上位のグループの中には,ユーザが一人も所属しないグループが存在する。 2. 予約機能 GWでは,スケジュール予約及び設備予約を行うことができる。例えば,打合せを行う場合に,出席者のスケジュール予約と会議室の設備予約を行うことができる。 (1)スケジュール予約とは,ユーザ自身又は他のユーザのスケジュールを予約する機能である。スケジュールを予約されたユーザは,そのスケジュールに参加するか否かを回答することができる。 (2)設備予約とは,会議室,プロジェクタなど,あらかじめGWに登録された設備を予約する機能である。設備には,必要に応じて,当該設備の管理を行うグループを一つ定めることができる。 (3)スケジュール予約及び設備予約は,それぞれを同時に予約することも,いずれか一方を予約することもできる。 3. コミュニケーション機能 GWには,ユーザ間で直接メッセージをやり取りするメッセージ機能,及び特定のテーマに関してユーザ同士で議論できる電子会議機能が備えられている。 (1)ユーザは,1人又は複数のユーザにメッセージを送信することができる。送信先のユーザがメッセージを開封すると,開封日時が記録される。 (2)電子会議とは,GW上の会議の単位である。電子会議には,例えば“プロジェクタの利用について”などの議題が定められる。ユーザは,新たな電子会議を作成することができる。 (3)投稿とは,ユーザが電子会議上に文章を書き込むことである。 (4)分野とは,電子会議を分類する単位である。例えば,総務,営業などである。電子会議は,いずれか一つの分野に属し,分野ごとに定められた表示順に従って一覧表示される。 4. ワークフロー機能 GWには,簡易なワークフロー機能があり,申請及び承認の流れを定義し,定型業務として利用できる。 (1)申請ひな形とは,各種申請のテンプレートである。例えば,経費申請,交通費申請などの種類がある。 (2)決裁ルートとは,申請ひな形ごとに定められた,申請を処理する承認経路であり,一つ以上のステップによって構成される。 (3)ステップには,承認可能なユーザ,グループ又はロールを指定する。ユーザ,グループ又はロールのいずれで指定されているかは,承認者区分で識別する。 (4)ユーザは,申請ひな形を指定して各種申請を行うことができる。申請を行うと,決裁ルートの最初のステップに進む。 (5)決裁ルートの各ステップに指定されている承認者は,自身が処理すべき申請に対して,承認処理として次のいずれかの処理を行う。 ・承認:最後のステップでは,申請状態を決裁済にする。それ以外のステップでは,次のステップに進める。 ・差戻し:一つ前のステップに戻す。ただし,最初のステップでは,差戻しができない。 ・否認:申請状態を否認済にする。 (6)申請を行ったユーザは,申請中の申請を取り消すことができる。取消しを行うと,申請状態は取消済となる。 (7)承認処理を行うと,その都度処理内容がデータベースに新規登録される。 なお,ステップの承認者をグループ又はロールで指定している場合,そのステップで複数のユーザが同時に承認処理を行うことはできない。 ワークフロー機能の決裁ルートの例を図1に,承認画面の例を図2に示す。 図1 決裁ルートの例 図2 承認画面の例 〔データモデルの設計〕 S君は,概念データモデル(図3)及び関係スキーマ(図4)の設計を行った。 図3 S君が設計した概念データモデル(未完成) 図4 S君が設計した関係スキーマ(未完成) 図4の関係スキーマの主な属性とその意味・制約を,表1に示す。 表1 主な属性とその意味・制約 〔T部長の指摘事項〕 S君の上司であるT部長は,S君が設計した成果物を確認し,次の事項を指摘した。 指摘事項①:ロールを管理するデータ構造が設計されていないので,ロールを用いて承認者を指定することができない。 指摘事項②:承認処理を行う際に,不具合が発生するおそれがある。 設問1 関係“電子会議投稿”について,(1),(2)に答えよ。 (1)関係“電子会議投稿”の候補キーを全て答えよ。また,部分関数従属性,推移的関数従属性の有無を,“あり”又は“なし”で答えよ。“あり”の場合は,次の表記法に従って,その関数従属性の具体例を一つ示せ。 表 関数従属性の表記法 なお,候補キー及び表記法に示されている属性1,属性3,属性4が複数の属性から構成される場合は,{}でくくること。 (2)関係“電子会議投稿”は,第1正規形,第2正規形,第3正規形のうち,どこまで正規化されているか答えよ。また,第3正規形でない場合は,第3正規形に分解し,主キー及び外部キーを明記した関係スキーマを示せ。 設問2 図3,4及び表1について,(1),(2)に答えよ。 (1)図4中の[a]~[f]に入れる適切な属性名を答えよ。また,主キーを構成する属性の場合は実線の下線を,外部キーを構成する属性の場合は破線の下線を付けること。 (2)図3のエンティティタイプ間のリレーションシップを全て記入せよ。また,リレーションシップには,エンティティタイプ間の対応関係にゼロを含むか否かの表記(“○”又は“●”)も記入すること。 なお,図3に表示されていないエンティティタイプは考慮しなくてよい。 設問3 〔T部長の指摘事項〕について,(1),(2)に答えよ。 (1)指摘事項①に対応するために,新たな関係を二つ追加し,既存の関係に属性を一つ追加することにした。新たに追加する関係の主キー及び外部キーを明記した関係スキーマ,属性を追加する関係名及び追加する属性名を答えよ。 (2)指摘事項②の不具合はどのようなときに発生するか。その状況を,具体的に40字以内で述べよ。また,不具合に対応するために,関係を一つ修正することにした。修正後の関係の主キー及び外部キーを明記した関係スキーマを答えよ。 なお,修正後の関係スキーマは,第3正規形の条件を満たしていること。
図1 決裁ルートの例。申請者がステップ1~3を順に進み,各承認者が承認・差戻し・否認を行う決裁ルートと,取消し及び最終状態を示すフロー図。
図1 決裁ルートの例。申請者がステップ1~3を順に進み,各承認者が承認・差戻し・否認を行う決裁ルートと,取消し及び最終状態を示すフロー図。
図2 承認画面の例。交通費申請の申請者・日時・内容,各ステップの承認履歴,現在の承認者のコメント入力欄と承認操作を示す画面例。
図2 承認画面の例。交通費申請の申請者・日時・内容,各ステップの承認履歴,現在の承認者のコメント入力欄と承認操作を示す画面例。
図3 S君が設計した概念データモデル(未完成)。予約,ユーザ,メッセージ,設備,グループなどのエンティティタイプと,予約先や兼務,送信先などの未完成の関係を配置した概念データモデル。
図3 S君が設計した概念データモデル(未完成)。予約,ユーザ,メッセージ,設備,グループなどのエンティティタイプと,予約先や兼務,送信先などの未完成の関係を配置した概念データモデル。
図4 S君が設計した関係スキーマ(未完成)。グループ,ユーザ,設備,メッセージ,電子会議投稿,予約,ワークフロー関連などの関係名と属性を列挙した未完成の関係スキーマ。
図4 S君が設計した関係スキーマ(未完成)。グループ,ユーザ,設備,メッセージ,電子会議投稿,予約,ワークフロー関連などの関係名と属性を列挙した未完成の関係スキーマ。
表1 主な属性とその意味・制約。上位グループID,メッセージID,電子会議番号,表示順,申請状態,承認連番などの属性の意味や制約を一覧にした表。
表1 主な属性とその意味・制約。上位グループID,メッセージID,電子会議番号,表示順,申請状態,承認連番などの属性の意味や制約を一覧にした表。
表 関数従属性の表記法。部分関数従属性と推移的関数従属性について,属性間の矢印による表記法を示す説明表。
表 関数従属性の表記法。部分関数従属性と推移的関数従属性について,属性間の矢印による表記法を示す説明表。
解き方のヒントを見る

要件記述と設計要素の対応を確かめる

データベース設計の問題では、業務要件の一文ごとに、それが設計のどの要素にどう反映されるべきかを自分の言葉で言い直してから、問われている箇所と照らし合わせる姿勢が役立ちます。思い込みではなく記述を根拠に考えましょう。

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

確認すべき観点は一つ、「業務の記述が、データ同士のどんな結び付きや決まり方を述べているか」です。その読み取りを先に固め、設計側の表現がその内容を過不足なく反映しているかを照合してください。

視点

設計の良し悪しは、業務のルールをどれだけ忠実に写し取れているかで判断されます。一般常識や他の業務での経験から補って読むと、記述にない前提を持ち込みがちです。まず業務の記述だけから、何がどんな単位で存在し、互いにどう関係し、何が決まれば何が決まるのかを書き出し、その整理を設計の表現と一つずつ突き合わせるのが基本の進め方です。

確認ポイント

  • 業務の記述のうち、データ同士の関係やデータの決まり方に触れている箇所をすべて拾い出したか
  • 拾い出した内容を、記述にない前提を足さずに自分の言葉で言い直せているか
  • 言い直した内容と設計側の表現を照合し、食い違いや漏れがないかを根拠付きで説明できるか
正解と解説を見る

解説

グループウェアのデータベース設計を題材に、電子会議投稿の候補キーと関数従属性の分析、第3正規形への分解、図4の属性の補完、図3のリレーションシップ(グループの自己参照を含む)と○・●の判断、ロール管理の追加、差戻し後の再承認で主キーが重複する不具合への対処を問う問題です。公式解答例では、承認の主キーを{申請ひな形番号,申請連番,承認連番}という最小の組合せに改めています。

問題の全体像

D社は次期グループウェア(GW)を開発しており、S君が利用者管理・予約・コミュニケーション・ワークフローの各機能について、概念データモデル(図3)と関係スキーマ(図4)を設計しました。出題趣旨によると、業務要件を分析する力、関数従属性や正規化理論を使ってデータモデルを分析する力、データモデルの問題を見つける力が問われています。設問1は正規化されていない関係「電子会議投稿」の分析と分解です。設問2は図4の空欄補完と、図3の不足しているリレーションシップの記入です。設問3は、T部長が指摘したロール管理の欠落(指摘事項①)と、承認処理で起きる不具合(指摘事項②)への対応です。採点講評によると、全体の正答率は高かった一方、設問1(2)では外部キーの破線が抜けた解答、設問2(2)ではグループの自己参照が抜けた解答、設問3(2)では主キーに承認連番を単に足しただけの解答が目立ちました。

設問1(1)

表1の制約に着目します。投稿番号は「電子会議番号との組合せで投稿を一意に識別する」とあるので、{電子会議番号,投稿番号}が候補キーになります。また、表示順は「一つの分野内で重複することはない」ので、{分野番号,表示順}から電子会議番号が一意に決まります。したがって、電子会議番号を{分野番号,表示順}に置き換えた{分野番号,表示順,投稿番号}も、全ての属性を決定する最小の組合せとなり、候補キーです。公式解答例もこの二つを挙げています。部分関数従属性は「あり」です。候補キーの一部である電子会議番号だけで議題(ほかに分野番号・表示順・作成者ユーザIDも)が決まるためで、公式解答例では例として「電子会議番号→議題」を示しています。推移的関数従属性も「あり」です。電子会議番号から分野番号が決まり、分野番号から分野名が決まるので、公式解答例では「電子会議番号→分野番号→分野名」を示しています。

設問1(2)

候補キーの一部への部分関数従属性があるので第2正規形ではなく、公式解答例では「第1正規形」と答えています。第3正規形へは、電子会議に関する属性、分野に関する属性、投稿に関する属性の三つに分解します。公式解答例の関係スキーマと、各属性のキーの扱いは次のとおりです。【分野(分野番号,分野名)】分野番号が主キー(実線の下線)で、外部キーはありません。【電子会議(電子会議番号,議題,分野番号,表示順,作成者ユーザID)】電子会議番号が主キー(実線)です。分野番号は分野を参照する外部キー(破線)、作成者ユーザIDはユーザを参照する外部キー(破線)です。議題と表示順には下線がありません。【投稿(電子会議番号,投稿番号,投稿本文,投稿者ユーザID)】{電子会議番号,投稿番号}が主キーで、両方に実線を付けます。電子会議番号は電子会議を参照する役割も持ちますが、公式解答例では主キーの実線だけが付けられています。投稿者ユーザIDはユーザを参照する外部キー(破線)で、投稿本文には下線がありません。採点講評によると、作成者ユーザIDと投稿者ユーザIDに破線がない解答が散見されました。分解する関係の中だけで考えず、図4のユーザなど関連する関係との整合性を確認して、外部キーを漏れなく明記することが大切です。

設問2(1)(a)

1.(4)に「ユーザは、一つのグループに必ず所属し、これを主務グループと呼ぶ」とあります。ユーザ1人につき主務グループは一つなので、関係「ユーザ」に属性として持たせます。一方、兼務は複数あり得るので、別の関係「兼務グループ」になっています。公式解答例は「主務グループID」で、グループを参照する外部キーとして破線の下線を付けます。

設問2(1)(b)

2.(2)に「設備には、必要に応じて、当該設備の管理を行うグループを一つ定めることができる」とあります。設備1件につき管理グループは最大一つなので、関係「設備」の属性にします。公式解答例は「管理グループID」で、グループを参照する外部キーとして破線の下線を付けます。

設問2(1)(c)

メッセージには送信者が1人必ず存在します。一方、送信先は複数あり得るので、関係「メッセージ送信先」に分けられています。したがって、関係「メッセージ」には送信した側のユーザを持たせます。公式解答例は「送信元ユーザID」で、ユーザを参照する外部キーとして破線の下線を付けます。

設問2(1)(d)

3.(1)の「1人又は複数のユーザにメッセージを送信することができる」から、1件のメッセージに複数の送信先があります。メッセージIDだけでは行を識別できないので、{メッセージID,送信先ユーザID}が主キーになります。公式解答例は「送信先ユーザID」で、主キーを構成するので実線の下線を付けます(ユーザを参照する役割も持ちます)。公式解答例の備考では、d・eは順不同とされています。

設問2(1)(e)

3.(1)に「送信先のユーザがメッセージを開封すると、開封日時が記録される」とあります。開封はメッセージ単位ではなく送信先のユーザごとに発生するので、関係「メッセージ送信先」の属性になります。公式解答例は「開封日時」で、キーではないため下線は付けません。d・eは順不同です。

設問2(1)(f)

2.(1)に「スケジュールを予約されたユーザは、そのスケジュールに参加するか否かを回答することができる」とあります。回答は予約と予約先ユーザの組ごとに決まるので、関係「スケジュール予約先」の属性になります。公式解答例は「参加可否回答」で、下線は付けません。

設問2(2)

図4の外部キーと問題文から、図3に足りないリレーションシップを全て洗い出します。以下、「A 1 対 B 多」は、A側の端とB側の端にそれぞれ付く記号を示します。公式解答例で追加されているのは次の8本です。①ユーザ1対予約多(予約者ユーザID):ユーザ側●、予約側○。予約者は必ず存在しますが、予約しないユーザもいるためです。②予約1対設備予約先多:予約側●、設備予約先側○。2.(3)により、スケジュールだけの予約もあり得るためです。③予約1対スケジュール予約先多:予約側●、スケジュール予約先側○。設備だけの予約もあり得るためです。④ユーザ1対メッセージ多(送信元ユーザID):ユーザ側●、メッセージ側○。送信元は必ず存在しますが、送信しないユーザもいるためです。⑤メッセージ1対メッセージ送信先多:両側とも●。送信先は1人以上であり、送信先は必ずいずれかのメッセージに属するためです。⑥グループ1対ユーザ多(主務グループID):グループ側●、ユーザ側○。ユーザは必ず主務グループに所属しますが、1.(4)の「ユーザが一人も所属しないグループが存在する」によりユーザ側はゼロを含みます。⑦グループ1対設備多(管理グループID):両側とも○。管理グループは「必要に応じて」定めるものであり、設備を管理しないグループもあるためです。⑧グループの自己参照(上位グループID):グループからグループへの1対多で、両側とも○。表1で上位グループIDはNULLになり得ますし、下位のグループを持たないグループもあるためです。図3にもともと描かれている5本(ユーザ●―○スケジュール予約先、ユーザ●―○兼務グループ、グループ●―○兼務グループ、設備●―○設備予約先、ユーザ●―○メッセージ送信先)は、そのまま残します。採点講評によると、⑧の自己参照を書き漏らした解答が散見されました。1.(2)の「上位のグループを一つ定めることができる」から読み取るべき関係です。

設問3(1)

1.(3)と1.(4)によると、ロールはロールIDで一意に識別されてロール名を持ち、ユーザとロールは多対多で付与されます。そこで、ロール本体と、多対多を解消する連関の関係を追加します。公式解答例の関係スキーマと、キーの扱いは次のとおりです。【ロール(ロールID,ロール名)】ロールIDが主キー(実線)です。【ロール付与先(ロールID,ユーザID)】{ロールID,ユーザID}が主キーで、両方に実線を付けます。ロールIDはロールを、ユーザIDはユーザを参照する役割も持ちますが、公式解答例では主キーの実線で示されています。さらに、4.(3)ではステップの承認者をユーザ・グループ・ロールのいずれでも指定できますが、図4の決裁ルートには承認ユーザIDと承認グループIDしかありません。そこで、公式解答例では関係「決裁ルート」に属性「承認ロールID」を追加しています。これはロールを参照する外部キーにあたり、既存の承認ユーザID・承認グループIDと同じ扱いの属性です。

設問3(2)

図4の承認の主キーは{申請ひな形番号,申請連番,ステップ番号}です。一方、4.(5)の差戻しと、4.(7)の「承認処理を行うと、その都度処理内容がデータベースに新規登録される」を合わせて考えると、差戻しで戻ったステップで同じ申請を再度処理したとき、同じ主キーの値の行をもう一度登録することになり、登録できません。公式解答例では、その状況を「一度承認を行った申請が差戻しされた後、再度承認処理を行ったとき」(40字以内)と述べています。答案では、差戻しによって同じステップで2回目の承認処理が起こることを押さえます。修正にあたっては、表1で承認連番が「申請ひな形番号ごと・申請連番ごとに1から始まり、承認処理を行うごとに1ずつ加算される」とされている点に着目します。この定義から、{申請ひな形番号,申請連番,承認連番}だけで承認処理を一意に識別できます。公式解答例の関係スキーマは「承認(申請ひな形番号,申請連番,ステップ番号,承認連番,承認処理結果,コメント,承認者ユーザID,承認日時)」で、キーの扱いは次のとおりです。主キーは申請ひな形番号・申請連番・承認連番で、いずれも実線です。ステップ番号は主キーから外れ、申請ひな形番号と組み合わせて決裁ルートを参照する外部キーとして破線を付けます。承認者ユーザIDはユーザを参照する外部キー(破線)です。承認処理結果・コメント・承認日時には下線がありません。採点講評によると、既存の主キーに承認連番を単に追加しただけの解答が多くありました。その場合は主キーが最小にならないので、各属性の意味・制約から最小の組合せを確認することが求められます。

学習のポイント

表1の意味・制約から候補キーと関数従属性を導く練習をしましょう。自己参照のリレーションシップや○・●を問題文の語句から判断すること、主キー・外部キーの下線を正確に書き分けること、主キーを最小限の属性の組合せにすることも重点です。

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

関連する過去問一覧

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