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









解き方のヒントを見る
業務規則から従属関係を読み取る視点
問題に示された業務上の約束事を根拠に、どの項目の値が決まると他のどの項目の値が決まるのかを自分で書き出し、その関係を判断の土台にする姿勢を持つことが、この分野の問題に取り組む際の出発点になります。
この問題で問われていること
推測や一般常識ではなく、問題中に明示された条件のみから項目間の決定関係を確かめることに観点を絞ります。記述の一語一語がどの関係の根拠になっているかを対応付けながら読み進めてください。
視点
関数従属性は、ある項目の組の値が定まれば別の項目の値が一つに定まるという関係です。これは手元のデータの見た目ではなく、業務上の規則として常に成り立つかどうかで判断されます。関係を書き出す際は、何を基準にすると何が定まるのかを整理し、その根拠となった記述と組にして記録しておくと、後の検討で読み違いや思い込みに気付きやすくなります。
確認ポイント
- 書き出した各従属関係について、根拠となる記述を問題中から具体的に指し示せるか
- 一般常識や経験から補った関係が、問題の条件に照らして本当に成り立つと言えるか
- 基準側に置いた項目の組が、過不足なく値を定めるのに必要な範囲になっているか
正解と解説を見る
解説
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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針