戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2023年 午後1 問02


ホテルの予約システムの概念データモデリングに関する次の記述を読んで、設問に答えよ。

   ホテルを運営する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回の予約で1枚を会員本人の予約だけに利用できる。   ③ ホテルでのチェックイン時の前払い、チェックアウト時の精算で利用する場合、宿泊割引券番号を記録する。 1回の宿泊で1枚を会員本人の宿泊だけに利用できる。
 (2) 館内施設割引券   ① 館内施設割引券を発行し、定期的に送付している会員向けのダイレクトメールに同封する。 館内施設の利用料金に充当できる。 チェックアウト時の精算だけで利用できる。   ② チェックアウト時の精算で利用する場合、館内施設割引券番号を記録する。 1回の宿泊で1枚を会員本人の宿泊だけに利用できる。 宿泊割引券との併用が可能である。  
〔新規要件〕  会員特典として宿泊時にポイントを付与し、次回以降の宿泊時の精算などに利用できるポイント制を導入する。 ポイント制は次のように運用する。
 (1) 会員ランクにはゴールド、シルバー、ブロンズがあり、それぞれの必要累計泊数及びポイント付与率を決める。 ポイント付与率は上位の会員ランクほど高くする。  (2) 毎月末に過去1年間の累計泊数に応じて会員の会員ランクを決める。  (3) チェックアウト日の翌日午前0時に宿泊料金にポイント付与率を乗じたポイントを付与する。 この場合のポイントの有効期限年月日は付与日から1年後である。  (4) 宿泊料金に応じたポイントとは別に、個別にポイントを付与することがある。この場合のポイントの有効期限年月日は1年後に限らず、任意に指定できる。  (5) ポイントを付与した際に、有効期限年月日及び付与したポイント数を未利用ポイント数の初期値として記録する。  (6) ポイントは宿泊料金、館内施設の利用料金の支払に充当でき、これを支払充当と呼ぶ。 支払充当では、支払充当区分 (予約時、チェックイン時、チェックアウト時のいずれか)、ポイントを利用した予約の予約番号又は宿泊の宿泊番号を記録する。  (7) ポイントは商品と交換することもでき、これを商品交換と呼ぶ。 商品ごとに交換に必要なポイント数を決める。 ホテルのフロントで交換することができる。 交換時に商品と個数を記録する。  (8) 支払充当、商品交換でポイントが利用される都度、その時点で有効期限の近い未利用ポイント数から利用されたポイント数を減じて、消し込んでいく。  (9) 未利用のまま有効期限を過ぎたポイントは失効し、未利用ポイント数を0とする。 失効の1か月前と失効後に会員に電子メールで連絡する。 失効前メール送付日時と失効後メール送付日時を記録する。  (10) ポイントの付与、支払充当、商品交換及び失効が発生する都度、ポイントの増減区分、増減数及び増減時刻をポイント増減として記録する。 具体例を表1に示す。
データベーススペシャリスト試験(令和5年 午後1 問2 表1) ↩設問3(3)
〔概念データモデルと関係スキーマの設計〕 1.概念データモデル及び関係スキーマの設計方針  (1) 概念データモデル及び関係スキーマの設計は、まず現状業務について実施し、その後に新規要件に関する部分を実施する。  (2) 関係スキーマは第3正規形にし、多対多のリレーションシップは用いない。  (3) 概念データモデルでは、リレーションシップについて、対応関係にゼロを含むか否かを表す “○” 又は“●”は記述しない。  (4) サブタイプが存在する場合、他のエンティティタイプとのリレーションシップは、スーパータイプ又はいずれかのサブタイプの適切な方との間に設定する。
2.〔現状業務の分析結果〕 に基づく設計  現状の概念データモデルを図1に、関係スキーマを図2に示す。
3.〔新規要件〕 に関する設計  新規要件に関する概念データモデルを図3に、関係スキーマを図4に示す。
 解答に当たっては、巻頭の表記ルールに従うこと。 また、エンティティタイプ名、関係名、属性名は、それぞれ意味を識別できる適切な名称とすること。 関係スキーマに入れる属性名を答える場合、主キーを表す下線、外部キーを表す破線の下線についても答えること。

設問1:現状の概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(1)図1中の欠落しているリレーションシップを補って図を完成させよ。

模範解答

データベーススペシャリスト試験(令和5年 午後1 問2 設問1-1解答)

解説

解答の導き方

まず図1の矩形要素(エンティティ)を確認します。図から読み取れる13個のエンティティは以下の通りです。
・ホテル
・客室タイプ
・旅行会社
・会員
・客室
・割引券
・宿泊割引券
・館内施設割引券
・予約
・宿泊
・予約有宿泊
・宿泊者
・割引券発行対象宿泊
次に、図1の欠落しているリレーションシップを補うために、問題文のどの記述を根拠にするかを順に示します。図1に既に描かれている線はそのまま根拠とし、業務記述(本文)に明記されている箇所は必ず引用(抜粋)して理由を付けます。
  1. ホテル → 客室(下向き矢印)
    根拠:「客室はホテルごとに客室番号で識別する。」(1.(2))および図2の関係スキーマに "客室(ホテルコード、 客室番号、 (ア))" とあることから、客室はホテルに所属するため、ホテルから客室へのリレーションシップを補います。
  2. ホテル → 予約(下向き矢印)
    根拠:「1回の予約で、 客は宿泊するホテル、 客室タイプ、 … を指定する。」(4.(3))とあるため、予約は宿泊するホテルを指定する情報を持つことが明記されており、ホテルと予約の関係を補います。
  3. 客室タイプ → 客室(下向きの矢印、図では2本)
    根拠:「客室ごとに客室タイプを設定する。 客室タイプはホテル共通であり、 客室タイプコードで識別する。」(1.(3))により、客室タイプが客室に割り当てられる関係が必要です。図1では客室タイプから客室への矢印が複数描かれていますが、要点は「客室タイプが客室の属性的分類を提供する」ことです。
  4. 旅行会社 → 予約(下向き矢印)
    根拠:「旅行会社の予約システムからX社の予約システムに予約情報が連携され、どの旅行会社での予約かが記録される。」(4.(2))と明示されているため、旅行会社と予約の関係を補います。
  5. 旅行会社 → 客室(図に描かれている直線)
    根拠:図1の描画で「旅行会社」矩形ボックスから真下に直線が伸び、その先に「客室」があるため、図に示された関係を補完します。業務本文4.(2)は旅行会社が予約情報を連携することを述べており、実務上の主要結びつきは旅行会社―予約ですが、概念モデル上は図1に示された旅行会社と客室の関連も考慮します(実装段階では予約を介して旅行会社と客室の関連が表現されるのが妥当です)。
  6. 客室 → 予約(下向き矢印)
    根拠:図1に客室から予約へ下向きの矢印が描かれています。一方で本文4.(3)は予約で「客室タイプ」や「客室数」を指定することを明記し、具体的な客室番号はチェックイン時に決めると記載されています(6.(1))。したがって、概念モデルでは客室と予約に関係を持たせる(予約が概念的に客室領域と関わる)ことを明示しつつ、具体的な客室の割当はチェックイン時に発生し宿泊に記録される点を押さえます。
  7. 会員 → 割引券(右向き矢印)
    根拠:「割引券には割引券番号と発行先の会員番号を記載する。」(9より)とあるため、会員と割引券の所有関係(発行先)が必要です。
  8. 割引券 —三角分岐—> 宿泊割引券 / 館内施設割引券(サブタイプの表現)
    根拠:「割引券には宿泊割引券と館内施設割引券があり、 割引券区分で分類する。」(9)と明記されているため、割引券をスーパータイプ、二つをサブタイプとして表現します。
  9. 宿泊割引券 → 宿泊、館内施設割引券 → 宿泊(下向き矢印)
    根拠:宿泊割引券は「会員の宿泊に対して… 1回の宿泊で割引券を1枚発行」(9.(1))とあり、館内施設割引券は「館内施設の利用料金に充当できる。 チェックアウト時の精算だけで利用できる。」(9.(2))とあるため、両サブタイプが宿泊に関連します(発行元宿泊番号や利用の場面として宿泊と結びつく)。
  10. 予約 → 宿泊(右向き矢印)および 予約 → 予約有宿泊(左下向き矢印)
    根拠:「予約有の場合には該当する予約を検索し、客室を決め、宿泊を記録する。」(6.(1))とあるため、予約を起点に宿泊が作られる関係が必要です。図1ではさらに「予約有宿泊」という宿泊の区分(予約を持つ宿泊)を明示しているので、予約から予約有宿泊への結合も補います。
  11. 宿泊 → 予約有宿泊 / 宿泊者 / 割引券発行対象宿泊(下向きに3本の矢印)
    根拠:
    • 「宿泊ごとに宿泊者全員の氏名、住所を記録する。」(6.(5))により、宿泊と宿泊者の関連が必要です。
    • 「1回の宿泊で割引券を1枚発行し… 発行対象の宿泊かどうかを割引券発行区分で分類する。」(9.(1))により、割引券発行の対象を表す割引券発行対象宿泊との関連が必要です。
    • また予約の有無で宿泊を分類する(予約有宿泊)ため、宿泊から予約有宿泊への関係も補います。
上の手順で、図1に描かれている線や三角分岐を元に補うべきリレーションシップを1つずつ確定しました。ポイントは、図1の描画(存在する矢印)を尊重しつつ、本文の業務記述(例:4.(3)、6.(1)、9.(1)、6.(5) 等)で「予約は客室タイプを指定し、具体的な客室割当はチェックイン時に発生する」ことを合わせて解釈することです。概念モデルは「どのエンティティが関係を持つか」を示すもので、実際の関係スキーマ(図2)では「具体的な外部キーの置き方(予約に客室番号を持たせるか否か等)」は本文の業務フローに従って決めます(例:特定の客室番号は宿泊に記録する)。

誤りやすいポイント

  • 予約と客室を混同する誤り
    「1回の予約で、 客は宿泊するホテル、 客室タイプ、 泊数、 客室数、 … を指定する。」(4.(3))であり、予約は客室タイプや客室数を指定する。具体的な客室番号はチェックイン時に決める(6.(1))。したがって関係図で客室との関連を描く場合でも、関係スキーマでは客室番号を予約に直接持たせない設計が正しい場合が多い点に注意してください。
  • 旅行会社に関する関係の解釈
    本文は「旅行会社の予約情報が連携され、どの旅行会社での予約かが記録される。」(4.(2))と記載しており、旅行会社の主要な結びつきは予約です。図1に旅行会社→客室の線があるときは図の示す概念的関連を補いますが、「旅行会社が客室を所有する」と誤解しないこと(実装では予約を介して旅行会社を紐づけるのが妥当)。
  • 割引券のサブタイプ用途の取り違え
    宿泊割引券と館内施設割引券は用途・発行条件・利用時期が異なります(例:宿泊割引券は旅行会社予約は発行対象外/館内施設割引券はチェックアウト時の精算のみ利用可)。サブタイプを分ける理由を設計段階で明確にし、属性を適切に振分けてください。
  • 宿泊における会員情報の扱い
    「一つの客室に複数の会員が宿泊する場合であっても記録できるのは、代表者1人の会員番号だけである。」(6.(4))一方で「宿泊ごとに宿泊者全員の氏名、住所を記録する。」(6.(5))。会員番号は代表者分のみを宿泊に記録し、宿泊者は別エンティティで全員分を保持する点を忘れないでください。

FAQ

Q: 図1に「旅行会社」から「客室」へ線があるが、本文に「旅行会社が客室を管理する」とは書かれていない。省いてよいか?
A: 図1の描画は概念モデル上の関連を示しているため、図の線は補います。ただし本文4.(2)は「予約情報が連携され、どの旅行会社での予約かが記録される。」と述べており、実務上は旅行会社→予約の結びつきが本筋です。したがって実装(関係スキーマ)では予約に旅行会社コードを外部キーとして持たせる設計とするのが整合的です。
Q: 予約に具体的な客室番号を持たせるべきか?
A: 原則不要です。本文4.(3)は予約で「客室タイプ」を指定すると明記し、6.(1)で「予約有の場合には該当する予約を検索し、客室を決め、宿泊を記録する。」とあるため、具体的な客室番号の割当はチェックイン時に発生し、宿泊に記録するのが自然です。
Q: 割引券のサブタイプはどのように表現すればよいか?
A: 割引券をスーパータイプに置き、共通属性(割引券番号、割引券区分、会員番号、割引券ステータス 等)を持たせ、宿泊割引券は発行元宿泊番号・発行条件など、館内施設割引券はダイレクトメール送付年月日などのサブタイプ固有属性を持たせる表現が適切です(本文にサブタイプ化の根拠が明記されています)。

関連キーワード: 概念データモデリング、エンティティ・リレーションシップ、サブタイプ、第3正規形、履歴管理

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:現状の概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(2)図2中の(ア)〜(エ)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。

模範解答

ア:客室タイプコード イ:ホテルコード、客室タイプコード、旅行会社コード、宿泊割引券番号 ウ:ホテルコード、客室番号、宿泊割引券番号、館内施設割引券番号 エ:予約番号

解説

解答の導き方

図2の未定義箇所(ア)〜(エ)に入る属性は次のとおりです(追記部分はいずれも外部キーとして扱います)。
  • ア:客室タイプコード
  • イ:ホテルコード、客室タイプコード、旅行会社コード、宿泊割引券番号
  • ウ:ホテルコード、客室番号、宿泊割引券番号、館内施設割引券番号
  • エ:予約番号
以下、設問文の記述を逐次参照しながら、なぜ各属性になるかを段階的に説明します。
(ア) 客室の (ア) → 客室タイプコード
  1. 設問文に「客室ごとに客室タイプを設定する。 客室タイプはホテル共通であり、 客室タイプコードで識別する。」とあります。これは各客室がどの客室タイプに属するかを参照する必要があることを意味します。
  2. 図2の客室リレーションは(ホテルコード、客室番号、 (ア) )となっており、客室はホテル内で客室番号と組で識別されるため、(ア) は参照先となる客室タイプのキーである 客室タイプコード を追加すればよいです。
  3. 客室タイプが「ホテル共通」であるため、客室タイプの主キーは客室タイプコード単独です。したがって客室側に余分にホテルコードを含める必要はなく、客室タイプコード を外部キーとして非キー属性に追加します。
(イ) 予約の (イ) → ホテルコード、客室タイプコード、旅行会社コード、宿泊割引券番号
  1. 設問文に「1回の予約で、 客は宿泊するホテル、 客室タイプ、 泊数、 客室数、 宿泊人数チェックイン予定年月日を指定する。 予約は予約番号で識別する。」とあり、予約は宿泊するホテルと客室タイプを記録する必要があると明示されています。よって 予約 に ホテルコード と 客室タイプコード を含めます。
  2. また「旅行会社の予約システムからX社の予約システムに予約情報が連携され、どの旅行会社での予約かが記録される。」とあるため、旅行会社経由の予約の場合に備えて 旅行会社コード を持たせます(自社サイト予約ではNULL可)。
  3. 「予約時の前払いで利用する場合、宿泊割引券番号を記録する。」とあるため、予約時利用の宿泊割引券を記録するための 宿泊割引券番号 を追加します。
  4. 注意点:予約では「客室タイプ」を指定し、特定の客室番号はチェックイン時に決める(「予約有の場合には該当する予約を検索し、客室を決め、宿泊を記録する。」)ため、予約に 客室番号 を入れるのは誤りです。
(ウ) 宿泊の (ウ) → ホテルコード、客室番号、宿泊割引券番号、館内施設割引券番号
  1. 設問文に「客室ごとのチェックインからチェックアウトまでを宿泊と呼び、 ホテル共通の宿泊番号で識別する。」とあるため、宿泊は実際に割り当てられた特定の客室(ホテルコード+客室番号)を参照する必要があります。客室は(ホテルコード, 客室番号)で識別されているので、宿泊にも両方を外部キーとして持たせます。
  2. 割引券について、チェックイン時やチェックアウト時に利用する記録が必要であることが次の記述から読み取れます。例えば「ホテルでのチェックイン時の前払い、 チェックアウト時の精算で利用する場合、宿泊割引券番号を記録する。」および「チェックアウト時の精算で利用する場合、館内施設割引券番号を記録する。」。したがって 宿泊 に 宿泊割引券番号 と 館内施設割引券番号 を持たせます(どちらも該当時に記録)。
  3. 会員番号については「宿泊者が会員の場合、 会員番号を記録する。ただし、予約有で宿泊者が予約者と同じ場合、予約の会員番号を宿泊に転記する。」とあり、宿泊側の会員番号は代表者1人分のみを保持する設計でよいことが裏付けられます(図2ですでに会員番号が列挙されています)。
(エ) 予約有宿泊の (エ) → 予約番号(外部キー)
  1. 図1で「宿泊」から三角分岐して「予約有宿泊」があることから、予約がある宿泊はサブタイプとして表現されています。設計方針に「サブタイプが存在する場合、他のエンティティタイプとのリレーションシップは、スーパータイプ又はいずれかのサブタイプの適切な方との間に設定する。」とあるため、予約と関わる関係はサブタイプ側(予約有宿泊)に置くのが妥当です。
  2. 実務記述にも「予約有の場合には該当する予約を検索し、客室を決め、宿泊を記録する。」とあり、予約と宿泊(予約有宿泊)を紐づけるために 予約番号 を追加します。
  3. 重要な点は、宿泊の主キーである 宿泊番号 は既に存在するため、予約有宿泊の主キーは引き続き 宿泊番号(スーパータイプから継承)であり、追加する 予約番号 は外部キーとして扱うことです。従って 予約番号 を主キーに置き換えてはいけません(以前に指摘された誤りの是正点)。
以上の理由から(ア)〜(エ)は上記の通り補います。追加した属性はいずれも対応するエンティティの主キーを参照する外部キー(ただし予約有宿泊の主キーは宿泊番号のまま)としてください。

誤りやすいポイント

  • 客室タイプが「ホテル共通」である点の誤解
    「客室タイプはホテル共通であり、 客室タイプコードで識別する。」とある場合、客室タイプの主キーは客室タイプコード単独です。ここから「ホテルコードを客室タイプの主キーに含める」や「客室側でわざわざホテルコードを重ねて客室タイプのキーにする」と誤解しやすいですが不要です。客室側は(ホテルコード, 客室番号)で既に一意ですから、客室タイプは外部キー 客室タイプコード のみにすれば足ります。
  • 予約に客室番号を入れてしまうミス
    予約で指定するのは「客室タイプ」であり、特定の客室番号はチェックイン時に決める、という記述を見落とすと、誤って予約側に客室番号を入れてしまいます。図2は予約に客室番号を持たせていない設計を想定しています。
  • 予約有宿泊の主キー誤認(重要)
    サブタイプの表現として 予約有宿泊 がある場合、宿泊番号(スーパータイプの主キー)を主キーとして継承し、予約番号は外部キーである点を誤って逆にしないこと。予約番号を主キーにしてしまうと宿泊番号の一意性を失い、設計ミスになります。
  • 割引券の記録場所(予約時と宿泊時)を取り違える点
    宿泊割引券は予約時に使う場合(予約に記録)とチェックイン/チェックアウト時に使う場合(宿泊に記録)があるので、どちらの場面で記録するかを設問文から正しく読み分ける必要があります。館内施設割引券はチェックアウト時の精算でのみ使える点も注意。

FAQ

Q: 予約に旅行会社コードを入れるのは必須ですか?
A: いいえ。記述「自社サイト予約と旅行会社予約があり、 予約区分で分類する。」および「旅行会社の予約システムからX社の予約システムに予約情報が連携され、どの旅行会社での予約かが記録される。」から、旅行会社コードは旅行会社経由の予約の場合に記録します。自社サイト予約ではNULLになります。
Q: 予約有宿泊に追加する 予約番号 は主キーにすべきですか?
A: いいえ。宿泊の主キーは「宿泊番号」で識別されます(「ホテル共通の宿泊番号で識別する」)。予約有宿泊はサブタイプなので、宿泊番号を主キーとして継承し、予約番号は外部キーとして参照するのが正しい設計です。
Q: 予約に客室タイプコードとホテルコードの両方を入れる理由は何ですか?
A: 記述「1回の予約で、 客は宿泊するホテル、 客室タイプ、 ... を指定する。」により、予約はどのホテルのどのタイプで予約するかを保持する必要があります。客室タイプはホテル共通でコードだけで識別できますが、予約は利用ホテルも明示する必要があるため 両方を持ちます。

関連キーワード: 関係スキーマ、主キー、外部キー、第3正規形、サブタイプ

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:現状の業務処理及び制約について答えよ。

問題文を見る
(1)割引券発行区分の値が発行対象となる宿泊の条件を表2にまとめた。予約有の場合は番号1と2, 予約無の場合は番号3の条件を満たしている必要がある。表2中の(a)〜(d)に入れる適切な字句を答えよ。 データベーススペシャリスト試験(令和5年 午後1 問2 表2)

模範解答

a:宿泊 b:会員番号 c:予約区分、d:自社サイト予約 又は c:旅行会社コード、d:NULL

解説

解答の論理構成

  1. 会員であることの判定
    【問題文】「(4) 一つの客室に複数の会員が宿泊する場合であっても記録できるのは、代表者1人の会員番号だけである。」
    また図2 “宿泊(宿泊番号、…、会員番号、…)” に “会員番号” が存在します。
    よって割引券発行対象判定の第1条件は “該当する宿泊の会員番号がNULLでないこと”。
    ⇒ (a) 宿泊、(b) 会員番号
  2. 旅行会社予約は対象外
    【問題文】「旅行会社予約による宿泊は発行対象外となる。」
    判定方法は2通り。
    ① “予約区分” が “自社サイト予約” のみを対象にする。
    ② “旅行会社コード” がNULLなら旅行会社経由ではないと判断できる。
    図2 “予約(予約番号、…、予約区分、…、会員番号、旅行会社コード)”
    よって (c) は “予約区分” または “旅行会社コード”、(d) はそれぞれ “自社サイト予約” または “NULL”。
  3. 予約無しの場合
    【問題文】「予約無の場合には泊数、宿泊人数、宿泊料金を確認し、… 宿泊を記録する。」
    予約が無い場合は“宿泊”しか参照できないため、条件3も “宿泊.会員番号” をチェックすることになる。

誤りやすいポイント

  • “予約.会員番号” を使うと条件3(予約無の場合)を判定できなくなる。
  • “旅行会社コード = ''(空文字)” と考えてしまう。仕様ではNULLが正しい。
  • “宿泊区分” という属性名があると勘違いする。図2にそのような属性は無い。

FAQ

Q: 「予約区分」と「旅行会社コード」の両方を使わずにどちらか一方で良いのですか?
A: はい。いずれか一方で旅行会社経由かどうかを判定できます。「予約区分 = 自社サイト予約」でも「旅行会社コード がNULL」でも意味は同じです。
Q: 予約有の場合だけ“宿泊.会員番号”を参照するのは冗長に感じます。
A: 割引券発行判定では宿泊代表者が会員かどうかを確実に判断する必要があるため、実際にチェックインした “宿泊” で確認する方が確実です。
Q: “会員番号” がNULLでも他の宿泊者が会員の場合はどうなりますか?
A: 【問題文】「記録できるのは、代表者1人の会員番号だけである。」とあるため、代表者が非会員なら割引券発行対象外です。

関連キーワード: 正規化、外部キー、NULL値、条件判定、リレーションシップ

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:現状の業務処理及び制約について答えよ。

問題文を見る
(2)予約時に割引券を利用する場合の制約条件を表3にまとめた。番号1〜3全ての条件を満たしている必要がある。表3中の(e)~(j)に入れる適切な字句を答えよ。 データベーススペシャリスト試験(令和5年 午後1 問2 表3)

模範解答

e:割引券ステータス 又は 割引券区分 f:未利用 又は 宿泊割引券 g:割引券区分 又は 割引券ステータス h:宿泊割引券 又は 未利用 i:会員番号 j:会員番号

解説

解答の論理構成

  1. 割引券の状態について
    【問題文】「割引券の状態には未利用、利用済、有効期限切れによる失効があり、割引券ステータスで分類する。」
    ⇒ 条件1は “使える状態か” をチェックするので
    e=割引券ステータス、f=未利用
  2. 割引券の種類について
    【問題文】(1)宿泊割引券 ②「予約時の前払いで利用する場合、宿泊割引券番号を記録する。」
    ⇒ 条件2は “宿泊割引券であるか” を確認するので
    g=割引券区分、h=宿泊割引券
  3. 本人利用の確認について
    【問題文】(1)宿泊割引券 ②「1回の予約で1枚を会員本人の予約だけに利用できる。」
    ⇒ “本人” をDBで担保するには割引券と予約の “会員番号” を一致させる必要があるので
    i=会員番号、j=会員番号

誤りやすいポイント

  • 条件1と条件2を逆にし、「未利用」を “割引券区分” に当てはめてしまう。
  • 割引券を持たない非会員予約で「会員番号」がNULLになり得る点を見落とし、本人確認条件を不要と判断する。
  • 「宿泊割引券」と「館内施設割引券」を区別せず、どちらも予約時に使えると誤解する。

FAQ

Q: 「利用済」でも予約時に入力できてしまわないようにするには?
A: テーブル「割引券」で “割引券ステータス=未利用” に限定するチェック制約(CHECK 句)や、アプリケーション側の入力バリデーションで弾く実装が必要です。
Q: 非会員予約で割引券番号が入力された場合はどう扱う?
A: 割引券と予約の “会員番号” が一致しないため条件3を満たさずエラー扱いとなります。
Q: 「宿泊割引券」と「館内施設割引券」の両方を同一予約で使わせない仕組みは?
A: 今回の設問範囲外ですが、割引券区分をキーに UNIQUE 制約(予約番号、割引券区分)を設ける方法が典型です。

関連キーワード: 参照整合性、第3正規形、CHECK制約、エンティティ設計、ビジネスルール

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:新規要件に関する概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(1)図3中の欠落しているリレーションシップを補って図を完成させよ。なお、図3にないエンティティタイプとのリレーションシップは不要とする。

模範解答

データベーススペシャリスト試験(令和5年 午後1 問2 設問3-1解答)

解説

解答の論理構成

  1. 会員と会員ランクの関係
    要件(1)では「会員ランクにはゴールド、 シルバー、 ブロンズがあり、それぞれの必要累計泊数及びポイント付与率を決める」とあります。さらに(2)で「毎月末に過去1年間の累計泊数に応じて会員の会員ランクを決める」とされているため、
    ・“会員ランク”1 ←― N “会員”
    の1対多リレーションシップが成立します。
  2. 会員とポイント増減の関係
    要件(10)に「ポイントの付与、 支払充当、商品交換及び失効が発生する都度、 …をポイント増減として記録する」と明記されています。また表1では“会員番号”が主キー先頭に配置されているため、
    ・“会員”1 ←― N “ポイント増減”
    が必須です。
  3. ポイント増減と4種のイベントの継承構造
    要件(10)は「ポイントの付与、 支払充当、商品交換及び失効」を統一名称“ポイント増減”で扱うと示しており、図4でも“ポイント増減”の下に4行のサブタイプ表が並びます。このことは設計方針1.(4)「サブタイプが存在する場合…スーパータイプ又はいずれかのサブタイプの適切な方との間に設定」に合致し、
    ・スーパータイプ:“ポイント増減”
    ・サブタイプ  :“ポイント付与”/“ポイント失効”/“支払充当”/“商品交換”
    という「IS-A」の分岐(▽)を設定します。
  4. 商品と商品交換の関係
    要件(7)「商品ごとに交換に必要なポイント数を決める。 …交換時に商品と個数を記録する」より、
    ・“商品”1 ←― N “商品交換”
    が必要です。支払充当・付与・失効には商品が関与しないため、接続するのは“商品交換”のみとなります。
  5. 方向性(矢印)
    サブタイプへの矢印は“ポイント増減”から下方へ、逆に“商品”から“商品交換”へは従属方向で下向き矢印とすることで、模範図の形が確定します。

誤りやすいポイント

  • “ポイント増減”と4サブタイプを横並びの別エンティティとして描き、スーパータイプ構造を忘れる。
  • “商品”を“支払充当”にも誤って接続する。要件(6)は料金支払であって商品交換ではない点に注意。
  • “会員”と“会員ランク”を多対多で描くミス。ランクは時点ごとに1つだけ保持するため1対多が正しい。
  • 図3に存在しないエンティティ(例:予約や宿泊)との関係を追加してしまい減点となる。

FAQ

Q: “ポイント増減”を基準に主キーをどう構成すべきですか?
A: 表1を参照すると“会員番号”+“増減連番”が一意になるため、この2項目を下線で示せば良いです。サブタイプはこれを外部キーとして継承します。
Q: “支払充当”は予約と宿泊のどちらに必ず紐付くのですか?
A: 要件(6)に「予約時、 チェックイン時、チェックアウト時のいずれか」で「予約番号又は宿泊番号」を記録するとあるため、どちらか一方がNULLで一方が値を持つ設計(片方必須、同時入力禁止)が妥当です。
Q: “商品交換”で利用したポイントはどのように未利用ポイント数から差し引きますか?
A: 要件(8)により「その時点で有効期限の近い未利用ポイント数から利用されたポイント数を減じ」るロジックを実装します。ER図では管理テーブル“ポイント増減”に負の増減行を挿入することで履歴と残高を一致させます。

関連キーワード: スーパータイプ, サブタイプ, リレーションシップ, 正規化, 外部キー

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:新規要件に関する概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(2)図4中の(オ)〜(サ)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。

模範解答

オ:必要累計泊数、ポイント付与率 カ:商品名、ポイント数 キ:ポイント増減区分、ポイント増減数、ポイント増減時刻 ク:有効期限年月日、未利用ポイント数 ケ:失効後メール送付日時 コ:支払充当区分 サ:商品コード、個数

解説

解答の論理構成

  1. 会員ランク(オ)
    “会員ランクにはゴールド、シルバー、ブロンズがあり、それぞれの必要累計泊数及びポイント付与率を決める。”
    ⇒累計泊数はランク判定にだけ使う静的値なので“必要累計泊数”。付与計算用に“ポイント付与率”も必要。
  2. 商品(カ)
    “商品ごとに交換に必要なポイント数を決める。”
    商品識別子は既に“商品コード”。残りは“商品名”と“ポイント数”。
  3. ポイント増減(キ)
    “ポイントの付与、支払充当、商品交換及び失効が発生する都度、ポイントの増減区分、増減数及び増減時刻をポイント増減として記録する。”
    よって三属性を追加。連番はキーに含まれているため重複しない。
  4. ポイント付与(ク)
    “有効期限年月日及び付与したポイント数を未利用ポイント数の初期値として記録する。”
    未利用は付与時点でのみ設定され、以後は消し込みで減算されるため本エンティティに保持。
  5. ポイント失効(ケ)
    “失効の1か月前と失効後に会員に電子メールで連絡する。 失効前メール送付日時と失効後メール送付日時を記録する。”
    失効エンティティが扱うのは失効発生レコードなので“失効後メール送付日時”のみで十分。
  6. 支払充当(コ)
    “支払充当では、支払充当区分 (予約時、チェックイン時、チェックアウト時のいずれか)…を記録する。”
    区分名をそのまま“支払充当区分”として追加。
  7. 商品交換(サ)
    “交換時に商品と個数を記録する。”
    商品コードは商品表への外部キーなので商品コード、取引数量は“個数”。

誤りやすいポイント

  • 有効期限と未利用ポイント数を「ポイント増減」に入れて第3正規形を崩してしまう。
  • “失効前メール送付日時”まで「ポイント失効」に入れてしまい、将来のリレーションが冗長になる。
  • “必要累計泊数”を“累計泊数”と誤記し、ランク判定用か実績値かを混同する。
  • “商品交換”で商品名を直接持たせ、商品マスタとの重複を作ってしまう。

FAQ

Q: “ポイント付与率”は整数で良いですか?
A: 要件には “ポイント付与率は上位の会員ランクほど高くする” としかなく百分率・小数点の指定がないため、実装時に適切な型(整数%や小数)を決めます。概念設計では名称だけで十分です。
Q: “未利用ポイント数”は常にポイント付与テーブルに置くのですか?
A: 付与時点での残高を持たせ、利用や失効時に更新(減算や0化)していく方式とします。履歴を残したい場合は増減テーブルで差分を追跡できます。
Q: “支払充当”エンティティには予約番号と宿泊番号の両方がありますがキーに入れますか?
A: いずれか一方が設定されるだけなので主キーには含めず、NULL許容または排他制約で実装します。

関連キーワード: 第3正規形、エンティティ、外部キー、ポイント管理、データモデリング

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:新規要件に関する概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(3)ポイント利用時の消込みにおいて、関係 “ポイント付与” の会員番号が一致するインスタンスに対する次の条件について、表1の用語を用いてそれぞれ20字以内で具体的に答えよ。  (a):消込みの対象とするインスタンスを選択する条件  (b):(a)で選択したインスタンスに対して消込みを行う順序付けの条件

模範解答

(a):未利用ポイント数が0より大きい。 (b):有効期限年月日が近い順

解説

解答の論理構成

  1. 消込み対象の特定
    • 要件(8)は“未利用ポイント数から利用されたポイント数を減じて”と記述しており、0の場合は減算不能です。
    • したがって(a)は“未利用ポイント数が0より大きい”インスタンスとなります。
  2. 消込み順序
    • 同じ(8)文で“有効期限の近い未利用ポイント数から”と明示されています。
    • 近い順=早く到来する順ですから(b)は“有効期限年月日が近い順”となります。
  3. 表1の用語利用
    • インスタンスの属性名として“未利用ポイント数”と“有効期限年月日”が表1に存在し、これらをそのまま用いる必要があります。

誤りやすいポイント

  • 「ポイント増減時刻」順と読み違える
  • “近い”を“遠い”と逆に解釈する
  • 未利用ポイント数=0を含めてしまい対象外レコードを選択してしまう

FAQ

Q: “有効期限年月日が近い順”は昇順・降順どちらですか?
A: 有効期限が早く切れる方から処理するので昇順(小さい日付→大きい日付)です。
Q: 未利用ポイント数が同じで有効期限も同一の場合はどうなりますか?
A: 要件には追加規定がないため、実装側で増減連番などの二次キーを用いて任意に順序付けすれば要件を満たせます。

関連キーワード: ポイント管理、有効期限、データモデリング、インスタンス更新

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について