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






解き方のヒントを見る
業務ルールから関連の多重度を読む
データモデルの設計や拡張を考えるときは、業務の説明に書かれた条件の一つ一つが、どの実体同士の関係について述べているのか、そして片方から見て相手が一つか複数かを丁寧に読み取ることが出発点になります。
この問題で問われていること
問われている箇所がどの二つの実体の間の関係に当たるかを確かめ、その両方向について、業務上いくつ対応し得るか、また対応が存在しない場合があり得るかを、業務の説明に照らして一つずつ確認する視点が中心です。
視点
概念データモデルでは、実体同士の関係を『片方の一件から見て、相手が何件対応し得るか』という多重度で表します。多重度は一方向だけで決まるものではなく、逆方向から見た場合も別に確かめる必要があります。また、同じ関係でも、ある一時点での対応と、長い期間を通じた対応とでは件数の見え方が変わることがあります。テーブル構造へ落とし込む際も、この多重度の読み取りが、どこに参照を持たせるか、関係そのものを独立して扱うかといった判断の土台になります。思い込みではなく、業務の説明にある条件の言葉を根拠にすることが大切です。
確認ポイント
- 検討している関係が、どの実体とどの実体を結ぶものかを最初に明確にしたか
- 両方向それぞれについて、相手が一件か複数か、存在しない場合があるかを業務の説明から確認したか
- 一時点での対応と期間を通じた対応を区別して考え、根拠となる記述を特定できたか
正解と解説を見る
解説
H社の宿泊管理システムを題材に、現行業務の概念データモデルを完成させ、業務処理でどのテーブルと列が更新されるかを読み取り、新規要件(複数客室タイプの予約、仮予約、UG値引き、まとめ請求)に合わせてテーブル構造を見直す問題です。公式解答例では、ホテル客室タイプというエンティティの追加、予約の二つの切り口によるサブタイプ化、ホテル客室タイプ日別在庫の割当済数・未割当数の更新、予約テーブルの3分割、上位客室タイプテーブルの追加、客室別請求へのまとめ請求番号の追加が示されています。
問題の全体像
H社は全国で6ホテルと予約センタを運営しており、宿泊管理システムの再構築に合わせて、現行業務を分析した概念データモデル(図1)とテーブル構造(図2)を整理しています。設問1ではマスタ領域(客室)とトランザクション領域(予約)の未完成部分を補います。設問2では、客室変更、客室割当て時の制約、予約なしチェックインで更新されるテーブルを、現行業務の記述から読み取ります。設問3では、1回の予約で複数の客室タイプを指定できるようにする、上位客室タイプで仮予約する、UG値引きを行う、まとめ請求を行う、という新規要件に合わせてテーブル構造を見直します。出題趣旨では、エンティティタイプの読取り、サブタイプの切出し、リレーションシップの読取り、制約条件の読取り、更新対象テーブルの読取り、テーブル構造の見直しの六つの能力を評価するとしています。採点講評では、全体の正答率は高かった一方で、主キーの実線下線や外部キーの破線下線を書き忘れた解答が散見されたと指摘されています。
設問1(1)
着目点は1.(2)②「客室タイプの標準料金はホテルごとに設定されている」です。標準料金は、ホテルコードと客室タイプコードの組で決まる属性です。図2の客室タイプ(客室タイプコード、 客室タイプ名、 定員、 備考)には置けないため、公式解答例では「ホテル客室タイプ」というエンティティタイプを追加しています。ホテルとホテル客室タイプ、客室タイプとホテル客室タイプは、それぞれ1対多の関係です。ホテル客室タイプからは、ホテル客室タイプ日別在庫(ホテル・客室タイプ・禁煙喫煙区分ごと、日ごと)、客室(客室ごとに客室タイプが決まる)、宿泊プラン明細(宿泊プランと客室タイプの組合せごとの宿泊料金)へ、それぞれ1対多の関係を引きます。ほかにも、ホテル→宿泊プラン(宿泊プランはホテルごとに設定される)、宿泊プラン→宿泊プラン明細、客室→客室状況(客室ごと、日ごとの予約可能区分)がすべて1対多になります。採点講評では「ホテル客室タイプ」の正答率が低かったとされ、ホテルごと・客室タイプごとの標準料金を管理するエンティティが必要なことを読み取ってほしいと述べられています。
設問1(2)
予約には二つの切り口があります。一つ目は4.(1)の受付経路による区分で、直接予約と代理店予約に分かれます。さらに4.(2)により、直接予約はインターネット予約と予約センタ予約に分かれます。二つ目は5.(2)の顧客番号を提示したかどうかによる区分で、顧客番号提示予約と顧客番号未提示予約に分かれます。図1の宿泊側にも「顧客番号提示宿泊/顧客番号未提示宿泊」という切り口があり、ヒントになります。リレーションシップは次の三つです。受付従業員を登録するのは予約センタ予約だけなので、予約センタ従業員→予約センタ予約(1対多)。代理店を登録するのは代理店予約なので、代理店→代理店予約(1対多)。顧客番号を持つのは提示した予約だけなので、顧客→顧客番号提示予約(1対多)。どれも、サブタイプのうち該当するものとの間に引くのが適切です。採点講評では、顧客番号の提示有無という切り口に気付いた受験者が少なかったと指摘されています。
設問2(1)
公式解答例は「客室,宿泊,宿泊者」です。6.(4)と6.(8)に、客室を変更した場合は変更ごとに宿泊を個別に登録するとあります。宿泊は客室番号と宿泊期間ごとに登録されるため、変更後の客室について宿泊の行を追加し、元の宿泊の宿泊期間(チェックアウト年月日)も変更が必要になると考えられます。宿泊者は宿泊の明細なので、新しい宿泊番号の下に宿泊者の行を登録し直す必要があります。客室については、変更後の客室が「チェックイン済」になるなど、客室状態の変更が伴います。一方、同じ客室タイプ・同じ禁煙喫煙区分での入れ替えなので、ホテル客室タイプ日別在庫の数は変わりません。客室状況の予約可能区分も、設問の条件で変更なしとされています。採点講評では、三つとも正しく答えられた受験者が少なかったとされ、業務処理をモデルとテーブルに当てはめて確認するよう求めています。
設問2(2)
a:6.(2)に、フロントは客室状態が「チェックイン可」の客室を割り当てるとあるので「'チェックイン可'」です。b・c:修繕予定の客室は、客室状況で客室ごと・日ごとに予約可能区分を管理しており、予約可能なら'Y'です(1.(3)⑤)。そのため、宿泊期間内の予約可能区分が'Y'であることが条件になります。d:6.(4)と6.(8)に「客室タイプ及び禁煙喫煙区分が同じ別の客室」とあるので「禁煙喫煙区分」です。e・f:延長は予約を経由しないので、延長分の客室は予約で確保された枠ではなく、在庫の未割当分から出すことになります。在庫はホテル・客室タイプ・禁煙喫煙区分・日ごとにホテル客室タイプ日別在庫で管理されているため、公式解答例では、eをホテル客室タイプ日別在庫、fを未割当数とし、未割当数が0でないことを条件にしています。
設問2(3)
公式解答例では、テーブル名はホテル客室タイプ日別在庫、列名は割当済数と未割当数、変更内容は「割当済数を2加算し、未割当数を2減算する」です。1.(2)③より、予約が入るごとに割当済数が加算され、未割当数が減算されます。予約ありの場合は予約時点で在庫がすでに更新されているため、チェックイン時には更新しません。予約なしの場合は6.(1)により宿泊希望を予約として登録しないため、チェックイン時に在庫を更新する必要があります。例では001・SOA・禁煙・2014-04-19の行について2客室分を移すので、割当済数を+2、未割当数を-2します。予約可能数は「割当済数+未割当数」なので、合計は変わらず更新されません。採点講評では、予約可能数と答えた誤答が散見されたと指摘されています。
設問3(1)
新規要件1.(1)では、1回の予約で宿泊プランと泊数は一つのまま、客室タイプを複数指定でき、1客室当たりの人数は客室ごとに指定します。すると、客室タイプと客室数は予約番号だけでは決まらず、予約番号+客室タイプコードで決まります。人数はさらに客室1室ごとに決まります。公式解答例では次の3テーブルに分けています。予約(予約番号、 ホテルコード、 宿泊プランコード、 宿泊開始日、 泊数、 予約登録年月日時刻、 キャンセル年月日):主キーは予約番号、ホテルコードと宿泊プランコードは外部キーで、客室タイプコード・人数・客室数は外します。予約客室数(予約番号、 客室タイプコード、 客室数):主キーは予約番号+客室タイプコード。予約客室人数(予約番号、 客室タイプコード、 予約明細番号、 人数):主キーは予約番号+客室タイプコード+予約明細番号。採点講評では、この二つの新テーブルの正答率が低く、人数と客室数が予約の主キーに従属しなくなることを読み取るよう求めています。
設問3(2)(a)
新規要件1.(2)⑦では、客室タイプと上位客室タイプの組合せと組合せ可能条件をホテルごとに決めること、一つの客室タイプに複数の上位客室タイプを組み合わせられることが示されています(表1)。新規要件2.(2)(3)では、UG値引額がホテル・UG前客室タイプ・UG後客室タイプごとに決まり、組合せは予約時と同じとされています。したがって、主キーはホテルコード+客室タイプコード+上位客室タイプコードの3列です。公式解答例は「上位客室タイプ(ホテルコード、 客室タイプコード、 上位客室タイプコード、 組合せ可能条件、 UG値引額)」です。表1から、同じホテル・同じ客室タイプに複数の上位客室タイプがあるため、上位客室タイプコードまで含めないと行を一意に識別できないことを確認しておきましょう。
設問3(2)(b)
新規要件1.(2)①では、仮予約の場合に「キャンセル待ちであること」と「希望客室タイプ」を管理するとしています。⑤では、予約状態を、最初から本予約/仮予約中(キャンセル待ち)/仮予約から本予約に変更、の三つに分けて管理するとしています。仮予約を別の行として追加しないという条件があるため、一つの予約行の中に、状態を表す列と希望客室タイプを表す列を持たせます。公式解答例では、テーブル名は予約、列名は予約状態と希望客室タイプコードです。採点講評では、二つの列のうち一方だけの解答が散見されたとされ、新規要件をすべてテーブル構造に反映できているか確認するよう求めています。
設問3(2)(c)
仮予約から本予約への切替えのきっかけは「希望客室タイプにキャンセルが出たこと」です。図2では、キャンセルは二つのテーブルに現れます。一つは予約テーブルで、キャンセル年月日が登録されます。もう一つはホテル客室タイプ日別在庫で、キャンセルされた分だけ割当済数が減り、未割当数が増えると考えられます。公式解答例では(順不同)、①予約テーブル:実行条件「キャンセル年月日に値が入った場合」、②ホテル客室タイプ日別在庫テーブル:実行条件「未割当数の値が増加した場合」または「割当済数の値が減少した場合」です。20字以内に収めるには「どの列が」「どう変化したか」の2要素に絞って書きます。
設問3(2)(d)
新規要件2.(2)に、UG値引額は不定期に見直すが履歴管理は行わず、顧客がUGを希望した時点のUG値引額を適用する、とあります。上位客室タイプテーブルの値は後から上書きされる可能性があるため、適用した値引額を宿泊側に残しておかないと、チェックアウトの請求時に正しい金額が分からなくなります。公式解答例では「UGを希望した時点のUG値引額を保持する必要があるから」または「UGを希望した時点以降にUG値引額が変更される場合があるから」とされています。40字以内なら「希望時点の値引額の保持が必要」「マスタの値が後から変わり得る」という要素を入れると簡潔にまとまります。
設問3(3)
新規要件3.では、まとめ請求をホテルコードと新しいまとめ請求番号で識別し、まとめ請求書に印字する請求合計金額・売掛小計金額・宿泊料金を記録するとしています。公式解答例のテーブル構造は「まとめ請求(ホテルコード、 まとめ請求番号、 請求合計金額、 売掛小計金額、 宿泊料金)」で、主キーはホテルコード+まとめ請求番号です。どの客室別の請求をまとめたのかを表すには、まとめられる側(多の側)に外部キーを持たせます。そのため、公式解答例では客室別請求テーブルにまとめ請求番号を追加しています。採点講評では、宿泊や売掛と誤答した受験者が散見されたとされています。8.チェックアウト業務で、客室別請求が宿泊番号ごとに作られる請求の単位であることを押さえると、適切なテーブルが分かります。
学習のポイント
「〇〇ごとに決まる」という記述からキーを決めること、サブタイプの切り口が複数ある場合の見つけ方、業務の一つの手順で更新されるテーブルと列を漏れなく挙げること、繰り返し項目を分離して正規化すること、値を後から変えられるマスタの値を明細側に保持する理由を重点的に学びます。
出典:独立行政法人 情報処理推進機構(IPA)平成26年度春期 データベーススペシャリスト試験 午後Ⅱ 問2(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針