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

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

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

問題

問1 データベースの設計に関する次の記述を読んで,設問1~3に答えよ。 C社は,主力事業である駐車場の運営が好調で,現在,事業の拡大に伴い,駐車場管理システムを再構築している。その一環として,情報システム部のN君がデータベースの設計を行っている。 〔駐車場の概要〕 駐車場は,個々の自動車を駐車する場所として,駐車スペース(以下,車室という)に分けられている。駐車場は,月極駐車場と時間貸駐車場のいずれかに分類される。 (1)月極駐車場:契約期間を定め,契約期間中は自由に入出庫できる駐車場 ① 利用できるのは,契約した会員だけである。 ② 契約は,会員がC社に契約書類を送付して初回の月額利用料金を振り込み,C社がそれらの内容を確認して,初めて成立する。 (2)時間貸駐車場:時間帯別に料金が定められ,利用の都度精算する駐車場 ① 会員でなくても利用することができる。 ② 利用者は,空いている車室に入庫し,出庫する際に精算機で利用料金を支払う。 ③ 料金は,“月~金 8:00~22:00 100円/20分”のように,曜日ごと時間帯ごとに定められている。また,1日当たりの最大料金又は時間帯当たりの最大料金が定められている場合がある。 〔会員及びポイントの概要〕 駐車場の利用者は,氏名,住所などの情報を登録して会員になることができる。 (1)会員登録を行うと,会員IDが記載された会員カードとパスワードが発行される。会員は,会員IDとパスワードを使用して,C社のWebサイトの会員専用ページにアクセスすることができる。 (2)会員には,毎月の支払額(時間貸駐車場で会員カードを提示して支払った支払額+月極駐車場の支払額)に,所定の付与率を乗じて算出されたポイントが付与される。ポイントが付与されると,ポイント付与の基となった支払データに対して,ポイント付与済みであることが記録される。 (3)会員は,ポイントを消費してポイント交換商品と交換することができる。交換を行うと,付与年月が古いポイントから順に消費され,その内容が記録される。 〔Webサイトの概要〕 C社のWebサイトの利用者は,駐車場名,施設名,エリア名などで絞り込んで,駐車場の情報を検索することができる。 (1)施設とは,Webサイトの地図上に表示され,検索が可能な建造物である。例えば,東京駅,○○病院,△△ホテルなどである。 (2)エリアとは,駐車場及び施設が属する一定の地域である。例えば,新宿エリア,横浜エリアなどである。駐車場及び施設は,いずれか一つのエリアに属する。 (3)施設の分類をカテゴリという。例えば,駅,病院,ホテルなどである。施設は,いずれか一つのカテゴリに属する。 (4)駐車場から徒歩圏内にある主要な施設を周辺施設という。駐車場には,一つ又は複数の周辺施設が定められている。一つの施設は,複数の駐車場の周辺施設として定められる場合がある。 会員専用ページでは,駐車場利用履歴の閲覧,ポイント付与履歴の閲覧,ポイントの交換,ポイント交換履歴の閲覧などを行うことができる。ポイント付与履歴画面の例を図1に,ポイント交換履歴画面の例を図2に示す。 図1 ポイント付与履歴画面の例 図2 ポイント交換履歴画面の例 〔データモデルの設計〕 N君は,概念データモデル(図3)及び関係スキーマ(図4)の設計を行った。 図3 N君が設計した概念データモデル(未完成) 図4 N君が設計した関係スキーマ(未完成) 図4の関係スキーマの主な属性とその意味・制約を,表1に示す。 表1 主な属性とその意味・制約 設問1 関係“周辺施設”について,(1),(2)に答えよ。 (1)関係“周辺施設”の候補キーを全て答えよ。また,部分関数従属性,推移的関数従属性の有無を,“あり”又は“なし”で答えよ。“あり”の場合は,その関数従属性の具体例を一つ,次の表記法に従って示せ。 部分関数従属性 属性1→属性2 推移的関数従属性 属性1→属性2→属性3 なお,候補キー及び表記法に示されている属性1,属性2が複数の属性から構成される場合は,{}でくくること。 (2)関係“周辺施設”は,第1正規形,第2正規形,第3正規形のうち,どこまで正規化されているか答えよ。また,第3正規形でない場合は,第3正規形に分解し,主キー及び外部キーを明記した関係スキーマを示せ。 設問2 図3,4について,(1),(2)に答えよ。 (1)図4中のa~eに入れる適切な属性名を答えよ。また,主キー又は外部キーを構成する属性の場合,主キーを表す実線の下線,又は外部キーを表す破線の下線を付けること。 (2)図3中のエンティティタイプ間のリレーションシップを全て記入せよ。 なお,図に表示されていないエンティティタイプは考慮しなくてよい。また,エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。 設問3 関係“ポイント付与”,“ポイント交換”について,(1),(2)に答えよ。 (1)関係“ポイント付与”,“ポイント交換”には,ポイント管理上の不具合がある。不具合の内容を50字以内で具体的に述べよ。 (2)(1)の不具合を解決するために,関係“ポイント交換”の属性を一つ削除し,新たな関係“ポイント消費”を追加することにした。 (a)関係“ポイント交換”から削除する属性の属性名を答えよ。 (b)関係“ポイント消費”の属性名を,表2の行(b)の各列に本文又は図表中の用語を用いて記入せよ。また,主キー又は外部キーを構成する属性の場合,主キーを表す実線の下線,又は外部キーを表す破線の下線を付けること。 なお,表2の行(b)の列が全て埋まるとは限らない。 (c)図1及び図2に表示されているポイントは,関係“ポイント消費”ではどのような値となるか。その値を,表2の行(b)に記入した属性と同じ列に対応付くように,表2の(c)の各行及び各列に記入せよ。 なお,表2の(c)の行が全て埋まるとは限らない。 表2 関係“ポイント消費”の具体例
図1 ポイント付与履歴画面の例。会員IDごとのポイント付与年月、付与ポイント、残ポイントを示す履歴画面の例。
図1 ポイント付与履歴画面の例。会員IDごとのポイント付与年月、付与ポイント、残ポイントを示す履歴画面の例。
図2 ポイント交換履歴画面の例。会員IDごとの交換年月日、消費ポイント、商品名・商品コード、数量を示す履歴画面の例。
図2 ポイント交換履歴画面の例。会員IDごとの交換年月日、消費ポイント、商品名・商品コード、数量を示す履歴画面の例。
図3 N君が設計した概念データモデル(未完成)。会員、駐車場、月極駐車場契約・利用、時間貸駐車場・利用、料金設定などのエンティティタイプを配置した未完成の概念データモデル。
図3 N君が設計した概念データモデル(未完成)。会員、駐車場、月極駐車場契約・利用、時間貸駐車場・利用、料金設定などのエンティティタイプを配置した未完成の概念データモデル。
図4 N君が設計した関係スキーマ(未完成)。エリア、会員、駐車場、料金パターン、契約・利用、周辺施設、ポイント関連を列挙した未完成の関係スキーマ。
図4 N君が設計した関係スキーマ(未完成)。エリア、会員、駐車場、料金パターン、契約・利用、周辺施設、ポイント関連を列挙した未完成の関係スキーマ。
表1 主な属性とその意味・制約。属性名と意味・制約の対応を示す表。位置情報、料金、契約、施設、ポイントに関する属性の定義を掲載している。
表1 主な属性とその意味・制約。属性名と意味・制約の対応を示す表。位置情報、料金、契約、施設、ポイントに関する属性の定義を掲載している。
表2 関係“ポイント消費”の具体例。ポイント消費関係の属性欄と、図1・図2のポイントを記入するための空の具体例表。
表2 関係“ポイント消費”の具体例。ポイント消費関係の属性欄と、図1・図2のポイントを記入するための空の具体例表。
解き方のヒントを見る

業務ルールと従属関係を照合する視点

データモデルの設計を検討するときは、業務の記述に書かれた決まりごとを一つずつ取り出し、それが属性やエンティティ間の結び付きにどう反映されているかを照合する姿勢が役立ちます。記述と構造のずれに注目しましょう。

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

確認すべき観点は一つ、「業務上の決まりごとと、ある項目の値が何によって一意に決まるかという対応」です。記述から読み取れる決まりを根拠に、構造の妥当性を自分で判断する練習をしてください。

視点

設計の良し悪しは、構造だけを眺めても判断しにくいものです。業務の記述にある「何が決まれば何が一つに定まるか」という決まりごとを手掛かりにすると、項目の置き場所や結び付きの妥当性を落ち着いて検討できます。思い込みや一般常識ではなく、記述に書かれている内容を根拠にすることが大切です。

確認ポイント

  • 業務の記述から「何が決まれば何が一つに定まるか」を表す決まりごとを抜き出したか
  • 抜き出した決まりごとが、検討対象の構造で矛盾なく表現できるかを自分で照合したか
  • 判断の根拠が一般常識ではなく、業務の記述の中の文言に基づいているかを確かめたか
正解と解説を見る

解説

C社の駐車場管理システムを題材に、関係“周辺施設”の候補キー・関数従属性・正規化、図4の空欄の属性と主キー・外部キー、図3の概念データモデルに引くリレーションシップ(二つのスーパータイプ/サブタイプを含む)、ポイント交換で複数の付与年月のポイントを消費する場合に記録できない不具合と、その解決策となる関係“ポイント消費”の設計を問う問題です。

問題の全体像

C社は月極駐車場と時間貸駐車場を運営しており、駐車場管理システムの再構築にあたってN君がデータベースを設計しています。問題文には、駐車場の区分、会員とポイントの付与・交換、Webサイトの施設・エリア・カテゴリ・周辺施設が説明されています。そのうえで、未完成の概念データモデル(図3)、関係スキーマ(図4)、属性の意味・制約(表1)が示されています。出題趣旨では、業務要件を分析する能力と、関数従属性・正規化理論などの基礎知識を用いてデータモデルを分析する能力を問うとしています。採点講評では、関係スキーマや属性名を答える設問で、主キーの実線の下線や外部キーの破線の下線を付けていない解答が目立ったと指摘されています。下線の付け方まで正確に答えることが大切です。

設問1(1)

関係“周辺施設”は、駐車場と施設の多対多の対応を表す関係です。〔Webサイトの概要〕(4)によると、一つの駐車場には複数の周辺施設があり、一つの施設が複数の駐車場の周辺施設になることもあります。そのため、施設IDと駐車場IDの組で一つの組が一意に決まります。さらに表1には「経度及び緯度を組み合わせた位置上に、駐車場又は施設が複数存在することはない」とあるので、施設経度と施設緯度の組合せでも施設が一意に決まります。したがって、公式解答例では候補キーを{施設ID,駐車場ID}と{施設経度,施設緯度,駐車場ID}の二つとしています。採点講評によると、前者だけを挙げた解答が多かったとのことです。部分関数従属性は「あり」です。施設IDだけで施設名、カテゴリコード、施設エリアコードが決まり、公式解答例では例えば「施設ID→施設名」を挙げています。推移的関数従属性も「あり」です。施設IDからカテゴリコードが決まり、そのカテゴリコードからカテゴリ名が決まるので、公式解答例では「施設ID→カテゴリコード→カテゴリ名」を例にしています。

設問1(2)

周辺施設には、候補キーの一部である施設IDに対する部分関数従属性があるため、第2正規形を満たしません。公式解答例では、正規形を「第1正規形」としています。第3正規形に分解した関係スキーマは、公式解答例では次の三つです。①カテゴリ(カテゴリコード,カテゴリ名):主キーはカテゴリコード(実線の下線)です。②施設(施設ID,施設名,施設経度,施設緯度,カテゴリコード,施設エリアコード):主キーは施設ID(実線の下線)です。カテゴリコードはカテゴリを参照する外部キー、施設エリアコードはエリアを参照する外部キーで、どちらも破線の下線を付けます。③周辺施設(駐車場ID,施設ID,所要時間):主キーは{駐車場ID,施設ID}で、両方に実線の下線を付けます。所要時間は駐車場から周辺施設までの徒歩の時間なので、駐車場と施設の組によって決まり、この関係に残ります。部分関数従属は施設への分離で、推移的関数従属(カテゴリコード→カテゴリ名)はカテゴリへの分離で解消されます。

設問2(1)

公式解答例の内容を空欄ごとに整理します。a(関係“駐車場”)は「駐車場エリアコード」で、破線の下線(外部キー)を付けます。問題文に「駐車場及び施設は、いずれか一つのエリアに属する」とあるので、エリアを参照する外部キーが必要です。名前は周辺施設の「施設エリアコード」にそろえています。b・c(関係“月極駐車場契約”)は「駐車場ID」と「会員ID」で、どちらも破線の下線(外部キー)を付けます。公式解答例では順不同です。契約は契約番号で一意に識別されるため主キーには含まれず、どの月極駐車場の契約か、どの会員の契約かを表す参照用の属性になります。d(関係“月極駐車場利用”)は「ポイント付与フラグ」で、下線は付けません。問題文には、ポイントを付与すると基となった支払データに付与済みであることが記録されるとあります。表1のポイント付与フラグは「支払額に対してポイント付与済みかどうかを識別するフラグ」で、会員時間貸駐車場利用には既にあるのに、月極駐車場利用にはないため、ここに入ります。主キーでも外部キーでもありません。e(関係“会員時間貸駐車場利用”)は「会員ID」で、破線の下線(外部キー)を付けます。主キーは{駐車場ID,利用連番}で決まっているので、会員IDは、会員カードを提示して支払った会員を表す、主キーに含まれない外部キーです。

設問2(2)

公式解答例のリレーションシップは次のとおりです。〔1対多〕①会員―月極駐車場契約、②月極駐車場―月極駐車場契約、③月極駐車場契約―月極駐車場利用、④会員―会員時間貸駐車場利用、⑤時間貸駐車場―時間貸駐車場利用、⑥時間貸駐車場―時間帯別料金パターン、⑦時間帯別料金パターン―時間帯別料金設定曜日。〔スーパータイプ/サブタイプ〕⑧駐車場をスーパータイプ、月極駐車場と時間貸駐車場をサブタイプとする関係、⑨時間貸駐車場利用をスーパータイプ、会員時間貸駐車場利用をサブタイプとする関係。①②④は、図4の外部キー(b・c・e)が参照する向きから読み取れます。⑥は時間帯別料金パターンの主キーに駐車場IDが含まれていること、⑦は時間帯別料金設定曜日の主キーが{駐車場ID,パターン番号,曜日区分}で、パターン側の主キーを含んでいることから導けます。時間帯別料金設定曜日は、駐車場と直接ではなく、時間帯別料金パターンを経由して結び付く点に注意してください。⑧は駐車場区分と、月極駐車場・時間貸駐車場の主キーが駐車場IDと同じであることから、⑨は会員時間貸駐車場利用の主キー{駐車場ID,利用連番}が時間貸駐車場利用と同じで、会員が利用した場合だけ存在することから判断します。採点講評でも、⑨の時間貸駐車場利用と会員時間貸駐車場利用のリレーションシップを誤った解答が目立ったと指摘されています。

設問3(1)

図4の関係“ポイント交換”(会員ID,交換年月日,付与年月,商品コード,数量)では、付与年月が一つの交換につき一つしか持てません。一方、問題文には、交換すると付与年月が古いポイントから順に消費されるとあります。図1・図2の例では、2015-06-10に300ポイントを交換した際、2015-04の250ポイントと2015-05の50ポイントを合わせて消費しています。公式解答例の要点は「複数の付与年月のポイントを合算してポイント交換を行う場合、ポイントを消費したことを記録できない」ことです。50字以内に収めるには、①複数の付与年月にまたがって合算して交換する場合、②付与年月ごとの消費を記録できない、の2点を押さえます。

設問3(2)(a)

公式解答例では、削除する属性を「付与年月」としています。ポイント交換と付与年月の対応は1対多になりうるため、ポイント交換の単一の属性としては持てません。この対応は、新しく追加する関係“ポイント消費”に移します。

設問3(2)(b)

公式解答例では、関係“ポイント消費”の属性を「会員ID、付与年月、交換年月日、消費ポイント」の4列としています。会員ID・付与年月・交換年月日の3属性すべてに実線の下線を付け、{会員ID,付与年月,交換年月日}を主キーとします。消費ポイントには下線を付けません。この関係は、どの交換(会員ID+交換年月日)で、どの付与分(会員ID+付与年月)のポイントを何ポイント消費したかを表します。{会員ID,付与年月}はポイント付与を、{会員ID,交換年月日}はポイント交換を参照する役割を持ちますが、どちらも主キーを構成する属性なので、公式解答例では実線の下線で示されています。表2は5列ありますが、公式解答例で使っているのは4列です(問題文にも、全て埋まるとは限らないとあります)。消費ポイントは、図2の注記の用語「消費ポイント」をそのまま使っています。

設問3(2)(c)

図1・図2の値を、付与年月の古い順に消費する規則に当てはめます。2015-06-10の交換(300ポイント)では、2015-04の250ポイントをすべて使い、残り50ポイントを2015-05から使います。2015-07-20の交換(100ポイント)では、2015-05に残っている10ポイントを使い、残り90ポイントを2015-06から使います。公式解答例では、次の4行としています(会員IDはすべてT1234567)。2015-04/2015-06-10/250、2015-05/2015-06-10/50、2015-05/2015-07-20/10、2015-06/2015-07-20/90。検算すると、2015-05は60−50−10=0、2015-06は250−90=160となり、図1の残ポイントと一致します。採点講評でも、具体的な値と照らし合わせて確認するよう求めています。

学習のポイント

表1の一意性に関する制約から候補キーを漏れなく見つけること、主キーと外部キーを下線で正確に書き分けること、主キーが同じ関係のあいだのスーパータイプ/サブタイプを見抜くこと、そして1対多の対応を具体的な値で確かめることが重点です。

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

関連する過去問一覧

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