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






解き方のヒントを見る
業務要件の記述とモデル構造の対応付け
この分野では、業務要件に書かれた一文ごとに、それがデータの識別・関連・制約のどれを述べているかを見極めることが出発点です。記述の根拠を持たずに構造を補うと判断がぶれやすいため、要件の文言とモデル上の要素を対応付けて検討しましょう。
この問題で問われていること
問われている箇所を補完・整理する際に、その判断を支える要件上の記述がどこにあるかを特定できるかが焦点です。一般的な慣習や思い込みではなく、記述された条件の範囲(例外や付帯条件を含む)から読み取れることだけを根拠にする姿勢が求められます。
視点
概念データモデルと関係スキーマは、業務上の事実を異なる抽象度で表したものです。要件の一文は、多くの場合次のいずれかを述べています。一つ目は、何を一意に区別するかです。二つ目は、何と何がどの程度結び付くかです。三つ目は、どんな値や状態が許されるかです。まず記述がどの種類に当たるかを分類すると、補うべき要素との対応を追いやすくなります。
確認ポイント
- 判断しようとしている箇所ごとに、根拠となる要件の文言を具体的に指し示せるか
- その文言が常に成り立つ条件か、特定の場合(例外・期間・状態など)に限る条件かを読み分けたか
- 要件に書かれていない前提を、一般常識や経験で補って判断していないか
正解と解説を見る
解説
ホテル予約システムの再構築を題材に、現状業務と新規のポイント制を概念データモデルと関係スキーマに反映する問題です。客室・予約・宿泊・割引券の関連付け、予約有宿泊や割引券発行対象宿泊といったサブタイプの使い分け、割引券の発行・利用の制約、ポイント増減のサブタイプ化と消込み条件を、本文の記述から正確に読み取ることが求められます。
問題の全体像
X社は10のホテルを運営しており、予約システムを再構築します。そのため、まず現状業務(ホテル・客室・客室タイプ・旅行会社・会員・予約・宿泊・割引券)を概念データモデル(図1)と関係スキーマ(図2)に整理し、次に新規要件のポイント制(会員ランク、ポイントの付与・支払充当・商品交換・失効、ポイント増減の記録)を図3と図4に整理します。出題趣旨では、現状業務と新規要件を概念データモデルと関係スキーマに反映する能力と、業務処理や制約の条件を整理する能力を問うとしています。設計方針として、関係スキーマは第3正規形とし多対多は使わないこと、サブタイプがある場合はスーパータイプとサブタイプのうち適切な方にリレーションシップを設定することが示されています。採点講評では、全体の正答率は平均的で、設問1(2)ウ、設問2(1)a、設問3(2)ク~サの正答率が低めだったと述べています。
設問1(1)
図1にすでにある線は、旅行会社→予約、会員→予約、会員→宿泊、宿泊→宿泊者の各1対多と、割引券・宿泊のサブタイプ構造です。宿泊のサブタイプは予約有宿泊と割引券発行対象宿泊の二つです。宿泊者は宿泊のサブタイプではなく、宿泊ごとに宿泊者全員の氏名・住所を記録するため(6.(5))、宿泊と1対多の関連で結ばれた別のエンティティタイプです。公式解答例の完成図で追加されている線を、本文の根拠とあわせて整理すると次のとおりです。①ホテル→客室、客室タイプ→客室(1対多):客室はホテルごとに客室番号で識別し、客室ごとに客室タイプを設定するためです(1.(2)(3))。②ホテル→予約、客室タイプ→予約(1対多):1回の予約で宿泊するホテルと客室タイプを指定するためです(4.(3))。予約の時点では客室が決まっていないので、予約は客室ではなくホテルと客室タイプに結び付きます。③客室→宿泊(1対多):宿泊は客室ごとのチェックインからチェックアウトまでを指し、チェックイン時に客室を決めて宿泊を記録するためです(5、6.(1)(2))。④予約→予約有宿泊(1対多):予約有の場合だけ該当する予約を検索して宿泊を記録します(6.(1))。予約無の宿泊は予約を持たないので、線はスーパータイプの宿泊ではなくサブタイプの予約有宿泊に引きます。また、1回の予約で複数の客室を指定できるため(4.(3))、1件の予約に複数の宿泊が対応する1対多になります。⑤会員→割引券(1対多):券面に発行先の会員番号を記載するためです(9)。⑥宿泊割引券と予約、宿泊割引券と宿泊、館内施設割引券と宿泊(いずれも利用関係):宿泊割引券は予約時の前払いでも、チェックイン時やチェックアウト時の精算でも利用でき、館内施設割引券はチェックアウト時の精算だけで利用できます(9.(1)②③、(2)②)。割引券は1枚につき1回だけ利用でき、1回の予約または宿泊で使えるのは1枚だけなので、公式解答例の図ではこれらの利用関係が矢印のない線、つまり1対1で表されています。館内施設割引券は宿泊だけと結ばれ、予約とは結ばれません。⑦割引券発行対象宿泊と宿泊割引券(1対1):1回の宿泊で割引券を1枚発行し(9.(1)①)、図2の宿泊割引券に発行元宿泊番号があります。発行元はスーパータイプの宿泊ではなく、サブタイプの割引券発行対象宿泊と結びます。
設問1(2)
設問1(1)で補ったリレーションシップを外部キーとして書き込みます。ア:客室ごとに客室タイプを設定するので、客室に外部キーの客室タイプコードを追加します。イ:予約ではホテルと客室タイプを指定し、旅行会社予約ではどの旅行会社で予約したかを記録し、予約時の前払いで宿泊割引券を使う場合はその番号を記録します。したがって、公式解答例ではホテルコード、客室タイプコード、旅行会社コード、宿泊割引券番号の四つを外部キーとしています。ウ:宿泊は客室単位なので、客室の主キーであるホテルコードと客室番号を外部キーとして持ちます。さらに、チェックイン時やチェックアウト時に利用した宿泊割引券番号と館内施設割引券番号を記録します。採点講評では、ウでどちらか一方の割引券番号しか書いていない解答が多かったと指摘しています。9.(2)②に「宿泊割引券との併用が可能である」とあるので、両方の番号を別々の属性として持つ必要があります。エ:予約有宿泊は予約と結び付くので、外部キーとして予約番号を持ちます。予約無の宿泊には予約番号がないため、宿泊ではなくサブタイプに置く点がポイントです。
設問2(1)
宿泊割引券は会員の宿泊に対して発行し、旅行会社予約による宿泊は対象外です(9.(1)①)。公式解答例では、a=宿泊、b=会員番号です。予約有の場合も、判定するのは予約ではなく宿泊の会員番号です。採点講評では、aを予約とした誤答が多かったと指摘しています。予約者と宿泊者は異なる場合があり(6.(3))、発行の条件は宿泊者が会員であることなので、宿泊側の会員番号に値が入っているかを見ます。予約有の場合はさらに、旅行会社予約でないことが条件です。公式解答例では、c=予約区分、d=自社サイト予約としており、別解としてc=旅行会社コード、d=NULLも示されています。予約無の場合は旅行会社を経由しないので、番号3の宿泊の会員番号の条件だけで判定します。
設問2(2)
予約時に使える割引券の条件を、図2の割引券の属性を使って表します。まず、1枚につき1回だけ利用でき、状態は未利用・利用済・失効の三つです(9)。そのため、割引券ステータスが未利用であることが必要です。次に、予約時の前払いで使えるのは宿泊割引券だけで、館内施設割引券はチェックアウト時の精算だけで使えます(9.(1)②、(2)①)。そのため、割引券区分が宿泊割引券であることも必要です。公式解答例では、e・f=割引券ステータス・未利用、g・h=割引券区分・宿泊割引券で、この二組は入れ替えてもよいとされています。さらに、割引券は会員本人の予約だけに使えるので、割引券の会員番号(i)と予約の会員番号(j)が一致していることが条件になります。
設問3(1)
公式解答例では、次の関係を補います。会員ランク→会員(1対多):会員の会員ランクを毎月決めるためで、図4の会員には会員ランクコードがあります。会員→ポイント増減(1対多):ポイント増減は会員番号とポイント増減連番で識別します。ポイント増減をスーパータイプとし、ポイント付与・ポイント失効・支払充当・商品交換をサブタイプとする構造:表1のポイント増減区分で分類される四種類の事象です。商品→商品交換(1対多):交換時に商品を記録するためです。支払充当は予約番号と宿泊番号を持ちますが、設問に「図3にないエンティティタイプとのリレーションシップは不要」とあるので、予約や宿泊への線は描きません。
設問3(2)
オ:会員ランクごとに必要累計泊数とポイント付与率を決めます(新規要件(1))。カ:商品ごとに交換に必要なポイント数を決めます((7))。公式解答例では、これに商品名を加えています。キ:全種類に共通する事象の記録として、スーパータイプのポイント増減にポイント増減区分、ポイント増減数、ポイント増減時刻を置きます((10))。ク~サは、表1でどの区分の行に値が入っているかを見てサブタイプに振り分けます。ク:有効期限年月日と未利用ポイント数は、付与の行だけに値があるのでポイント付与に置きます((5))。ケ:失効後に送るメールの送付日時は、ポイント失効の属性です。コ:予約時・チェックイン時・チェックアウト時を区別する支払充当区分は、支払充当に置きます((6))。サ:商品交換には、外部キーの商品コードと個数を置きます((7))。採点講評ではク~サの正答率がやや低く、サブタイプの視点で属性を整理する力が重要だと述べています。
設問3(3)(a)
消込みでは、有効期限の近い未利用ポイント数から、使ったポイント数を差し引きます(新規要件(8))。表1では、使い切った付与や失効した付与の未利用ポイント数が0になっています。そのため、消込みの対象として選ぶのは、まだ残りがある付与、つまり未利用ポイント数が0より大きいインスタンスです。公式解答例も「未利用ポイント数が0より大きい。」です。表1の用語「未利用ポイント数」を使い、20字以内に収めます。
設問3(3)(b)
(a)で選んだインスタンスの中では、有効期限の近いものから消し込むと本文にあります(新規要件(8))。表1の用語で言い換えると、公式解答例のとおり「有効期限年月日が近い順」になります。「古い順」のように付与日と取り違えやすい表現ではなく、表1にある属性名「有効期限年月日」を使って順序を示すのがポイントです。
学習のポイント
本文の「記録する」「識別する」「1回だけ利用できる」といった記述を、外部キー、1対1または1対多の対応関係、サブタイプ固有の属性に置き換える練習をしましょう。採点講評で正答率が低いと指摘された、割引券の併用(設問1(2)ウ)、発行条件の判定対象(設問2(1)a)、サブタイプ別の属性配置(設問3(2)ク~サ)が重点です。
出典:独立行政法人 情報処理推進機構(IPA)令和5年度秋期 データベーススペシャリスト試験 午後Ⅰ 問2(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針