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

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

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

問題

問1 データベースの基礎理論に関する次の記述を読んで,設問1~3に答えよ。 H社は,各種の資格試験対策の通信教育事業を展開している。H社では,eラーニングを取り入れたサービスを新たに提供するために,受講者が,資格試験対策の模擬試験をWebから受験できるシステム(以下,本システムという)を構築することにした。そこで,受講者,出題及び答案などを管理するデータモデルの検討を次のように行った。 模擬試験問題の出題形式は,図1の例に示すとおり大問,中問,小問の階層構造で,大問は,中問の集まりであり,中問は,小問の集まりである。 図1 大問,中問,小問の出題形式例 各受講者は,過去に出題された大問か又は新規の大問から一つの大問を選択して受験する。新規の大問が選択されると,本システムは,あらかじめライブラリに登録されている中問を組み合わせて大問を動的に作成し,受講者に提示する。小問ごとに,短文型,○×型,ペア合わせ型,数値型などの解答形式のタイプをもち,これを小問タイプとして管理する。 関係“受講者”,“コース”,“アクセス”,“出題”,“答案”,“小問”及び“小問タイプ属性”の関係スキーマは,図2のとおりである。図4~7は,図3の関数従属性の表記法に従って,属性間の主な関数従属性を表したものである。図2,図4~7の主な属性とその意味及び制約を,表に示す。 図2 本システムのデータモデルで検討した関係スキーマ 将来,新しい解答形式を追加する予定なので,小問タイプのデータモデルの拡張について検討した。図8は,今後の拡張に対応できるように変更したものである。受講者のデータモデルについても,属性を追加できるような拡張を考えた。 表 属性とその意味及び制約(一部省略) 図3 関数従属性の表記法 図4 関係“受講者”,“コース”,“アクセス”の属性間の主な関数従属性(未完成) 図5 関係“出題”の属性間の主な関数従属性 図6 関係“答案”の属性間の主な関数従属性 図7 関係“小問”,“小問タイプ属性”の属性間の主な関数従属性 図8 関係“小問タイプ属性”のメタ属性間の関数従属性(未完成) 設問1 図4について,(1)~(4)に答えよ。 (1) 図中の関数従属性①~⑤のうち,誤っているものを番号で答えよ。 (2) 図中に示されていない関数従属性のうち,決定項が異なる関数従属性を,二つ挙げよ。 (3) 関係“受講者”の候補キーをすべて列挙せよ。 (4) 関係“受講者”,“コース”,“アクセス”の正規形を答えよ。また,正規形の判別の根拠を,部分関数従属性及び推移的関数従属性の“あり”又は“なし”で示せ。“あり”の場合は,その関数従属性の具体例を示せ。 設問2 図5,6について,(1),(2)に答えよ。 (1) 関係“出題”を,第3正規形に分解した関係スキーマで示せ。関係スキーマの属性には,図5中で網掛けされていないものだけを記述せよ。 なお,主キーは,下線で示せ。 (2) 関係“答案”を,第3正規形に分解した関係スキーマで示せ。 なお,主キーは,下線で示せ。 設問3 データモデルの拡張について,(1)~(3)に答えよ。 (1) 図7は,小問タイプとその解答形式ごとの属性名,属性値の関係を示したものである。図中の特殊な関数従属性(A)及び(B)に関する次の記述中の[a]~[c]に入れる適切な字句を答えよ。 小問IDが決まれば,その小問の[a]が決まる。そのタイプごとに[b]が決まり,それぞれの[c]が一意に決まる。 (2) 図8は,関係“小問タイプ属性”で新しい解答形式の追加に対応できるようにメタ概念を導入したものである。属性名は小問タイプごとに定義され,異なる小問タイプ間で同じ属性名が使われることがあり得るものとする。図8の属性間の関数従属性を示す矢印を記入し,図を完成させよ。また,解答形式の追加に対応した図8の新しい関係を,第3正規形に分解した関係スキーマで示せ。 なお,主キーは,下線で示せ。 (3) 図2の関係“受講者”について,“関連資格有無”など受講者ごとに固有な属性を,任意に追加登録できるように,関係スキーマを追加することにした。追加する関係“受講者追加属性”を適切な三つの属性からなる関係スキーマで示せ。 なお,主キーは,下線で示せ。
図1 大問,中問,小問の出題形式例。大問1020(コースID:ITスペシャリスト)の例。中問1ストラテジ系に短文型・○×型・ペア合わせ型の小問1~3があり、中問2マネジメント系と中問3テクノロジ系にも小問が並ぶ階層構造を示す。
図1 大問,中問,小問の出題形式例。大問1020(コースID:ITスペシャリスト)の例。中問1ストラテジ系に短文型・○×型・ペア合わせ型の小問1~3があり、中問2マネジメント系と中問3テクノロジ系にも小問が並ぶ階層構造を示す。
図2 本システムのデータモデルで検討した関係スキーマ。関係受講者、コース、アクセス、出題、答案、小問、小問タイプ属性の7つの関係スキーマと、それぞれの属性一覧を示した枠囲みの図。
図2 本システムのデータモデルで検討した関係スキーマ。関係受講者、コース、アクセス、出題、答案、小問、小問タイプ属性の7つの関係スキーマと、それぞれの属性一覧を示した枠囲みの図。
表 属性とその意味及び制約(一部省略)。受講者ID、認証ID、更新日時、ログイン状態、大問・中問・小問ID、出題回数、解答回数、部分配点、小問タイプなどの各属性について、意味と制約(履歴保存の有無や一意性など)を説明した表。
表 属性とその意味及び制約(一部省略)。受講者ID、認証ID、更新日時、ログイン状態、大問・中問・小問ID、出題回数、解答回数、部分配点、小問タイプなどの各属性について、意味と制約(履歴保存の有無や一意性など)を説明した表。
図3 関数従属性の表記法。関数従属性の表記法の凡例と意味。A→B、{A,B}→C、C→{A,B}の表記と、Aの値がbならB、cならCと関係をもつことを表す破線矢印の表記を示す。
図3 関数従属性の表記法。関数従属性の表記法の凡例と意味。A→B、{A,B}→C、C→{A,B}の表記と、Aの値がbならB、cならCと関係をもつことを表す破線矢印の表記を示す。
図4 関係“受講者”,“コース”,“アクセス”の属性間の主な関数従属性(未完成)。受講者ID、認証ID、更新日時、コースID、ログイン日時などの間の関数従属性を矢印①~⑤で示した未完成の図。パスワード・姓名等、アクセス日時、コース受講情報、IPアドレスへの従属を示す。
図4 関係“受講者”,“コース”,“アクセス”の属性間の主な関数従属性(未完成)。受講者ID、認証ID、更新日時、コースID、ログイン日時などの間の関数従属性を矢印①~⑤で示した未完成の図。パスワード・姓名等、アクセス日時、コース受講情報、IPアドレスへの従属を示す。
図5 関係“出題”の属性間の主な関数従属性。大問ID・中問番号・中問ID・小問番号・小問IDの間の関数従属性を示す図。大問作成日時・出題回数、中問作成日時・コースID・制限時間などへの従属があり、一部属性は網掛けされている。
図5 関係“出題”の属性間の主な関数従属性。大問ID・中問番号・中問ID・小問番号・小問IDの間の関数従属性を示す図。大問作成日時・出題回数、中問作成日時・コースID・制限時間などへの従属があり、一部属性は網掛けされている。
図6 関係“答案”の属性間の主な関数従属性。受講者ID・大問ID・解答日時・小問IDの組合せから、解答回数、解答時間・評点、解答・得点への関数従属性を示した図。
図6 関係“答案”の属性間の主な関数従属性。受講者ID・大問ID・解答日時・小問IDの組合せから、解答回数、解答時間・評点、解答・得点への関数従属性を示した図。
図7 関係“小問”,“小問タイプ属性”の属性間の主な関数従属性。小問IDから小問名称や小問タイプなどへの従属(A)と、小問タイプが短文型・数値型・○×型・ペア合わせ型のとき各属性の組へ従属する破線矢印(B)を示した図。
図7 関係“小問”,“小問タイプ属性”の属性間の主な関数従属性。小問IDから小問名称や小問タイプなどへの従属(A)と、小問タイプが短文型・数値型・○×型・ペア合わせ型のとき各属性の組へ従属する破線矢印(B)を示した図。
図8 関係“小問タイプ属性”のメタ属性間の関数従属性(未完成)。小問ID、小問タイプ、属性名、属性値の四つの属性を重なり合う枠で配置した図。矢印は未記入で、関数従属性の完成を求める未完成図。
図8 関係“小問タイプ属性”のメタ属性間の関数従属性(未完成)。小問ID、小問タイプ、属性名、属性値の四つの属性を重なり合う枠で配置した図。矢印は未記入で、関数従属性の完成を求める未完成図。
解き方のヒントを見る

業務規則から従属関係を読み取る視点

問題に示された業務上の約束事を根拠に、どの項目の値が決まると他のどの項目の値が決まるのかを自分で書き出し、その関係を判断の土台にする姿勢を持つことが、この分野の問題に取り組む際の出発点になります。

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

推測や一般常識ではなく、問題中に明示された条件のみから項目間の決定関係を確かめることに観点を絞ります。記述の一語一語がどの関係の根拠になっているかを対応付けながら読み進めてください。

視点

関数従属性は、ある項目の組の値が定まれば別の項目の値が一つに定まるという関係です。これは手元のデータの見た目ではなく、業務上の規則として常に成り立つかどうかで判断されます。関係を書き出す際は、何を基準にすると何が定まるのかを整理し、その根拠となった記述と組にして記録しておくと、後の検討で読み違いや思い込みに気付きやすくなります。

確認ポイント

  • 書き出した各従属関係について、根拠となる記述を問題中から具体的に指し示せるか
  • 一般常識や経験から補った関係が、問題の条件に照らして本当に成り立つと言えるか
  • 基準側に置いた項目の組が、過不足なく値を定めるのに必要な範囲になっているか
正解と解説を見る

解説

eラーニングの模擬試験システムを題材に、関数従属性の正誤判定、候補キーの列挙、正規形の判定、第3正規形への分解を問う問題です。後半では、属性名と属性値を行として管理するメタ概念のモデルによる拡張も問われます。公式解答例では、履歴を保存する受講者の情報は{受講者ID,更新日時}で決まるとしています。また、候補キーは{受講者ID,更新日時}と{認証ID,更新日時}の二つです。拡張の関係は(ID,属性名,属性値)の形になります。

問題の全体像

H社は、受講者がWebで資格試験の模擬試験を受けられるシステムを作ろうとしています。そこで、受講者・コース・アクセス・出題・答案・小問・小問タイプ属性の関係スキーマ(図2)と、それぞれの関数従属性(図4〜7)を検討しています。問題は大問・中問・小問の階層構造です。ライブラリの小問は複数の中問で使われ、中問は複数の大問で使われます。受講者のパスワードなどは変更履歴が保存されますが、ログイン状態の履歴は保存されません。こうした条件は表に示されています。出題趣旨では、関数従属性の識別、正規形の識別と関係の分割、モデル拡張でのメタ概念の適用を通して、データモデルの設計能力と拡張への対応能力を評価するとしています。採点講評では、全体の正答率は高かったと述べています。一方で、設問1(3)では代替キーを見落とした解答、設問1(4)では推移的関数従属性を誤って指摘した解答が散見されたと指摘しています。設問3(2)は正答率が低かったとしています。

設問1(1)

表の「更新日時」の説明に着目します。パスワード、姓、名、メールアドレス、電話番号、住所は変更でき、その履歴が保存されます。そのため、一人の受講者IDに対して、これらの値は更新日時ごとに複数存在します。図4の③は、受講者IDだけからこれらが決まるとしているので誤りです。①の認証ID→受講者IDは、認証IDが受講者IDごとに発行され、システム上で一意に管理されるので正しいです。②の初回・最終アクセス日時は受講者ごとに一つ、④はコースごと、⑤はログインごとの履歴なので、いずれも正しいです。公式解答例の答えは③です。

設問1(2)

図4に描かれていない関数従属性を、決定項(矢印の元)が異なるように二つ探します。一つ目は、認証IDが受講者IDごとに発行されるので、逆向きの「受講者ID→認証ID」も成り立ちます。二つ目は、設問1(1)で誤りとした③を正しく直したものです。履歴があるので、決定項は受講者IDと更新日時の組になり、「{受講者ID,更新日時}→{パスワード,姓,名,メールアドレス,電話番号,住所}」となります。公式解答例もこの二つを挙げています。

設問1(3)

関係“受講者”では、履歴を保存する属性を一意に決めるために{受講者ID,更新日時}が必要です。さらに、受講者IDと認証IDは一対一に対応します(認証IDは受講者IDの代替キーです)。そのため、受講者IDを認証IDに置き換えた{認証ID,更新日時}も候補キーになります。公式解答例では、この二つを挙げています。採点講評では、認証IDが代替キーであることに気づかない誤りが散見されたと指摘しており、状況記述から一対一の関係を読み取ることが重要です。

設問1(4)

公式解答例の判定は次のとおりです。

・受講者:第1正規形です。ログイン状態は履歴が保存されないので、キーの一部である受講者IDだけで決まります。このため「受講者ID→ログイン状態」という部分関数従属性があります。推移的関数従属性はありません。受講者IDと認証IDの相互の従属はキーを構成する属性どうしの関係であり、非キー属性を経由した推移とはいえないからです。採点講評でも、受講者についての推移的関数従属性を誤って指摘した解答が散見されたとしています。

・コース:キーは{受講者ID,コースID}で、開始日時などはこのキー全体で決まります。部分関数従属性も推移的関数従属性もないので第3正規形です。

・アクセス:キーは{受講者ID,ログイン日時}です。初回・最終アクセス日時は受講者IDだけで決まる部分関数従属性があるので、第1正規形です。推移的関数従属性はありません。

設問2(1)

図5から関数従属性を読み取り、決定項ごとに関係を分けます。網掛けの属性は書きません。

・中問IDで中問作成日時・コースID・制限時間が決まる:中問(主キー:中問ID)

・{中問ID,小問番号}で小問IDが決まる:中問小問(主キー:{中問ID,小問番号})

・{大問ID,中問番号}で中問IDが決まる:大問中問(主キー:{大問ID,中問番号})

・大問IDで大問作成日時が決まる:出題(主キー:大問ID)

公式解答例は、この四つの関係です。小問は複数の中問で、中問は複数の大問で使われるので、組み合わせの関係はIDと番号の複合キーになります。

設問2(2)

図6には三つの決定項があります。

・{受講者ID,大問ID,解答日時}で解答時間と評点が決まる(大問を解くたびに一件)

・{受講者ID,大問ID}で解答回数が決まる(同じ大問を何回解いたか)

・{受講者ID,解答日時,小問ID}で解答と得点が決まる(小問ごとの解答)

それぞれを関係にすると、公式解答例のとおり次の三つになります。

・採点(受講者ID,大問ID,解答日時,解答時間,評点)

・回数(受講者ID,大問ID,解答回数)

・解答(受講者ID,解答日時,小問ID,解答,得点)

主キーは、それぞれ下線を引いた決定項(上の三つの組)です。解答回数は解答日時に依存しないため、別の関係に分ける点がポイントです。

設問3(1)(a)

図7の(A)は、小問IDから小問タイプへの矢印です。小問IDが決まれば、その小問の解答形式である小問タイプが決まります。公式解答例では、[a]は「小問タイプ」です。

設問3(1)(b)

図7では、小問タイプの値(短文型、数値型、○×型、ペア合わせ型)によって、関係をもつ属性のまとまりが変わります(破線の矢印)。表では、小問タイプを「解答形式のタイプ。タイプごとに、属性の組をもつ。」と説明しています。公式解答例では、[b]は「属性の組」です。

設問3(1)(c)

図7の(B)は、小問IDから各属性の組への矢印です。小問が決まると、そのタイプの属性(問文章、最大値など)それぞれの値が一つに決まります。公式解答例では、[c]は「属性値」です。

設問3(2)

図8に書き入れる矢印は、公式解答例では次の二つです。

・小問ID→小問タイプ:図7の(A)に対応します。

・{小問ID,属性名}→属性値:小問ごとに、属性名ごとの値が決まります。

属性名は異なる小問タイプで重複して使われることがあります。そのため、属性名から小問タイプは決まらず、{小問タイプ,属性名}は、あるタイプがどの属性をもつかを定義する組み合わせになります。

第3正規形の関係スキーマは、公式解答例では次の三つです。

・小問タイプ属性(小問タイプ,属性名):主キーは全属性

・小問タイプ属性値(小問ID,属性名,属性値):主キーは{小問ID,属性名}

・小問タイプ(小問ID,小問タイプ):主キーは小問ID

{小問ID,属性名}をキーとする関係に小問タイプを含めると、小問IDへの部分関数従属性が生じます。そのため小問タイプは別の関係に分けます。新しい解答形式を追加するときは、列を増やすのではなく、行を追加するだけで対応できます。採点講評では、この設問は趣旨を理解していない解答が多く、正答率が低かったとしています。

設問3(3)

設問3(2)と同じメタ概念の考え方を受講者に当てはめます。「関連資格有無」のような受講者ごとの属性を自由に追加できるようにするには、属性を列として固定しません。代わりに属性名と属性値を行として持たせます。受講者ごと・属性名ごとに値が一つ決まるので、公式解答例では「受講者追加属性(受講者ID,属性名,属性値)」とし、主キーを{受講者ID,属性名}としています。

学習のポイント

表の制約文から関数従属性を正確に読み取ることが大切です。代替キーを含めて候補キーを見つけ、部分関数従属性と推移的関数従属性を区別して正規形を判定します。さらに、メタ概念(属性名と属性値の組)を使った拡張モデルを自分で組み立てられるようにしましょう。

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

関連する過去問一覧

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