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

令和5年度秋期 データベーススペシャリスト 午後Ⅰ 問2

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

問題

問2 ホテルの予約システムの概念データモデリングに関する次の記述を読んで、設問 に答えよ。 ホテルを運営するX社は、予約システムの再構築に当たり、現状業務の分析及び新 規要件の洗い出しを行い、概念データモデル及び関係スキーマを設計した。 〔現状業務の分析結果〕 1. ホテル (1) 全国各地に 10のホテルを運営している。ホテルはホテルコードで識別する。 (2) 客室はホテルごとに客室番号で識別する。 (3) 客室ごとに客室タイプを設定する。客室タイプはホテル共通であり、客室タ イプコードで識別する。客室タイプにはシングル、ツインなどがある。 (4) 館内施設として、レストラン、ショップ、プールなどがある。 2.会員 利用頻度が高い客向けの会員制度があり、会員は会員番号で識別する。会員に は会員番号が記載された会員証を送付する。 3. 旅行会社 X 社のホテルの宿泊予約を取り扱う複数の旅行会社があり、旅行会社コードで識 別する。 4.予約 (1) 自社サイト予約と旅行会社予約があり、予約区分で分類する。 (2) 自社サイト予約では、客はX社の予約サイトから予約する。旅行会社予約で は、客は旅行会社を通じて予約する。旅行会社の予約システムからX社の予約 システムに予約情報が連携され、どの旅行会社での予約かが記録される。 (3) 1回の予約で、客は宿泊するホテル、客室タイプ、泊数、客室数、宿泊人数、 チェックイン予定年月日を指定する。予約は予約番号で識別する。 (4) 宿泊時期、予約状況を踏まえて、予約システムで決定した1室当たりの宿泊 料金を記録する。 (5) 客が会員の場合、会員番号を記録する。会員でない場合は、予約者の氏名と 住所を記録する。 5.宿泊 客室ごとのチェックインからチェックアウトまでを宿泊と呼び、ホテル共通の 宿泊番号で識別する。 6. チェックイン フロントで宿泊の手続を行う。 (1) 予約有の場合には該当する予約を検索し、客室を決め、宿泊を記録する。泊 数、宿泊人数、宿泊料金は、予約から転記する。泊数、宿泊人数、宿泊料金が 予約時から変更になる場合には、変更後の内容を記録する。 (2) 予約無の場合には泊数、宿泊人数、宿泊料金を確認し、客室を決め、宿泊を 記録する。 (3) 宿泊者が会員の場合、会員番号を記録する。ただし、予約有の場合で宿泊者 が予約者と同じ場合、予約の会員番号を宿泊に転記する。 (4) 一つの客室に複数の会員が宿泊する場合であっても記録できるのは、代表者 1人の会員番号だけである。 (5) 宿泊ごとに宿泊者全員の氏名、住所を記録する。 (6) 客室のカードキーを宿泊客に渡し、チェックイン年月日時刻を記録する。 7. チェックアウト フロントで客室のカードキーを返却してもらう。チェックアウト年月日時刻を 記録する。 8.精算 (1) 通常、チェックアウト時に宿泊料金を精算するが、客が希望すれば、予約時 又はチェックイン時に宿泊料金を前払いすることもできる。 (2) 宿泊客が館内施設を利用した場合、その場で料金を支払わずにチェックアウ ト時にまとめて支払うことができる。館内施設の利用料金は予約システムとは 別の館内施設精算システムから予約システムに連携される。 9. 会員特典 会員特典として、割引券を発行する。券面には割引券を識別する割引券番号と 発行先の会員番号を記載する。割引券には宿泊割引券と館内施設割引券があり、 割引券区分で分類する。1枚につき、1回だけ利用できる。割引券の状態には未利 用、利用済、有効期限切れによる失効があり、割引券ステータスで分類する。 (1) 宿泊割引券 1 会員の宿泊に対して、次回以降の宿泊料金に充当できる宿泊割引券を発行 し、郵送する。1回の宿泊で割引券を1枚発行し、泊数に応じて割引金額を変 える。旅行会社予約による宿泊は発行対象外となる。発行対象の宿泊かどう かを割引券発行区分で分類する。 2 予約時の前払いで利用する場合、宿泊割引券番号を記録する。1回の予約で 1枚を会員本人の予約だけに利用できる。 3 ホテルでのチェックイン時の前払い、チェックアウト時の精算で利用する 場合、宿泊割引券番号を記録する。1回の宿泊で1枚を会員本人の宿泊だけに 利用できる。 (2) 館内施設割引券 1 館内施設割引券を発行し、定期的に送付している会員向けのダイレクトメ ールに同封する。館内施設の利用料金に充当できる。チェックアウト時の精 算だけで利用できる。 2 チェックアウト時の精算で利用する場合、館内施設割引券番号を記録する。 1回の宿泊で1枚を会員本人の宿泊だけに利用できる。宿泊割引券との併用が 可能である。 〔新規要件〕 会員特典として宿泊時にポイントを付与し、次回以降の宿泊時の精算などに利用 できるポイント制を導入する。ポイント制は次のように運用する。 (1) 会員ランクにはゴールド、シルバー、ブロンズがあり、それぞれの必要累計泊 数及びポイント付与率を決める。ポイント付与率は上位の会員ランクほど高くす る。 (2) 毎月末に過去1年間の累計泊数に応じて会員の会員ランクを決める。 (3) チェックアウト日の翌日午前 0時に宿泊料金にポイント付与率を乗じたポイン トを付与する。この場合のポイントの有効期限年月日は付与日から1年後である。 (4) 宿泊料金に応じたポイントとは別に、個別にポイントを付与することがある。 この場合のポイントの有効期限年月日は1年後に限らず、任意に指定できる。 (5) ポイントを付与した際に、有効期限年月日及び付与したポイント数を未利用ポ イント数の初期値として記録する。 (6) ポイントは宿泊料金、館内施設の利用料金の支払に充当でき、これを支払充当 と呼ぶ。支払充当では、支払充当区分(予約時、チェックイン時、チェックアウ ト時のいずれか)、ポイントを利用した予約の予約番号又は宿泊の宿泊番号を記 録する。 (7) ポイントは商品と交換することもでき、これを商品交換と呼ぶ。商品ごとに交 換に必要なポイント数を決める。ホテルのフロントで交換することができる。交 換時に商品と個数を記録する。 (8) 支払充当、商品交換でポイントが利用される都度、その時点で有効期限の近い 未利用ポイント数から利用されたポイント数を減じて、消し込んでいく。 (9) 未利用のまま有効期限を過ぎたポイントは失効し、未利用ポイント数を0とす る。失効の1か月前と失効後に会員に電子メールで連絡する。失効前メール送付 日時と失効後メール送付日時を記録する。 (10) ポイントの付与、支払充当、商品交換及び失効が発生する都度、ポイントの 増減区分、増減数及び増減時刻をポイント増減として記録する。具体例を表1に 示す。 【表1 ポイント増減の具体例】 〔概念データモデルと関係スキーマの設計〕 1. 概念データモデル及び関係スキーマの設計方針 (1) 概念データモデル及び関係スキーマの設計は、まず現状業務について実施し、 その後に新規要件に関する部分を実施する。 (2) 関係スキーマは第3正規形にし、多対多のリレーションシップは用いない。 (3) 概念データモデルでは、リレーションシップについて、対応関係にゼロを含 むか否かを表す“○”又は“●”は記述しない。 (4) サブタイプが存在する場合、他のエンティティタイプとのリレーションシッ プは、スーパータイプ又はいずれかのサブタイプの適切な方との間に設定する。 2. 〔現状業務の分析結果〕に基づく設計 現状の概念データモデルを図1に、関係スキーマを図2に示す。 【図1 現状の概念データモデル(未完成)】 【図2 現状の関係スキーマ(未完成)】 3. 〔新規要件〕に関する設計 新規要件に関する概念データモデルを図3に、関係スキーマを図4に示す。 【図3 新規要件に関する概念データモデル(未完成)】 【図4 新規要件に関する関係スキーマ(未完成)】 解答に当たっては、巻頭の表記ルールに従うこと。また、エンティティタイプ名、 関係名、属性名は、それぞれ意味を識別できる適切な名称とすること。関係スキー マに入れる属性名を答える場合、主キーを表す下線、外部キーを表す破線の下線に ついても答えること。 設問1 現状の概念データモデル及び関係スキーマについて答えよ。 (1) 図1中の欠落しているリレーションシップを補って図を完成させよ。 (2) 図2中の【ア】~【エ】に入れる一つ又は複数の適切な属性名 を補って関係スキーマを完成させよ。 設問2 現状の業務処理及び制約について答えよ。 (1) 割引券発行区分の値が発行対象となる宿泊の条件を表2にまとめた。予約 有の場合は番号1と2、予約無の場合は番号3の条件を満たしている必要があ る。表2中の【a】~【d】に入れる適切な字句を答えよ。 【表2 割引券発行区分の値が発行対象となる宿泊の条件】 (2)予約時に割引券を利用する場合の制約条件を表3にまとめた。番号1~3全ての条件を満たしている必要がある。表3中の【e】~【j】に入れる適切な字句を答えよ。 【表3 予約時に割引券を利用する場合の制約条件】 設問3 新規要件に関する概念データモデル及び関係スキーマについて答えよ。 (1) 図3 中の欠落しているリレーションシップを補って図を完成させよ。なお、 図3にないエンティティタイプとのリレーションシップは不要とする。 (2) 図4中の【オ】~【サ】に入れる一つ又は複数の適切な属性名 を補って関係スキーマを完成させよ。 (3) ポイント利用時の消込みにおいて、関係 “ポイント付与”の会員番号が一 致するインスタンスに対する次の条件について、表1の用語を用いてそれぞ れ 20字以内で具体的に答えよ。 (a) 消込みの対象とするインスタンスを選択する条件 (b) (a)で選択したインスタンスに対して消込みを行う順序付けの条件
表1 現状業務の分析結果におけるエンティティの属性の設計。
表1 現状業務の分析結果におけるエンティティの属性の設計。
図1 客室タイプと客室数の関係。
図1 客室タイプと客室数の関係。
図2 現状業務の概念データモデル(未完成)。
図2 現状業務の概念データモデル(未完成)。
図3 新規要件に関する概念データモデル(未完成)。
図3 新規要件に関する概念データモデル(未完成)。
図4 新規要件に関する関係スキーマ(未完成、空欄【オ】~【サ】)。
図4 新規要件に関する関係スキーマ(未完成、空欄【オ】~【サ】)。
表2 割引券発行区分の値が発行対象となる宿泊の条件及び表3 予約時に割引券を利用する場合の制約条件。
表2 割引券発行区分の値が発行対象となる宿泊の条件及び表3 予約時に割引券を利用する場合の制約条件。
解き方のヒントを見る

業務要件の記述とモデル構造の対応付け

この分野では、業務要件に書かれた一文ごとに、それがデータの識別・関連・制約のどれを述べているかを見極めることが出発点です。記述の根拠を持たずに構造を補うと判断がぶれやすいため、要件の文言とモデル上の要素を対応付けて検討しましょう。

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

問われている箇所を補完・整理する際に、その判断を支える要件上の記述がどこにあるかを特定できるかが焦点です。一般的な慣習や思い込みではなく、記述された条件の範囲(例外や付帯条件を含む)から読み取れることだけを根拠にする姿勢が求められます。

視点

概念データモデルと関係スキーマは、業務上の事実を異なる抽象度で表したものです。要件の一文は、多くの場合次のいずれかを述べています。一つ目は、何を一意に区別するかです。二つ目は、何と何がどの程度結び付くかです。三つ目は、どんな値や状態が許されるかです。まず記述がどの種類に当たるかを分類すると、補うべき要素との対応を追いやすくなります。

確認ポイント

  • 判断しようとしている箇所ごとに、根拠となる要件の文言を具体的に指し示せるか
  • その文言が常に成り立つ条件か、特定の場合(例外・期間・状態など)に限る条件かを読み分けたか
  • 要件に書かれていない前提を、一般常識や経験で補って判断していないか
正解と解説を見る

解説

ホテル予約システムの再構築を題材に、現状業務と新規のポイント制を概念データモデルと関係スキーマに反映する問題です。客室・予約・宿泊・割引券の関連付け、予約有宿泊や割引券発行対象宿泊といったサブタイプの使い分け、割引券の発行・利用の制約、ポイント増減のサブタイプ化と消込み条件を、本文の記述から正確に読み取ることが求められます。

問題の全体像

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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針