令和4年度 秋期 データベーススペシャリスト試験 午後II 問題 問2 フェリー乗船予約システムの概念データモデルとテーブル設計
テクノロジデータベース
学習ガイド
フェリー会社の乗船予約システムを再構築するためのデータベース設計の問題です。船型や航路、販売区間と運賃のマスター構造、予約・乗船・精算のトランザクション構造を概念データモデルとテーブル構造で整理し、欠けたリレーションシップやサブタイプを補います。往復予約のキャンセル料、代表予約番号、まとめ精算といった新規要件を列追加とトリガーで実現する設計まで扱います。
この記事で押さえる論点
- 船型・等級・航路・航路明細・運航スケジュール・販売区間・運賃の関係を、業務記述から1対多のリレーションシップとして補える
- 予約客・乗船客のサブタイプ(顧客登録の有無、予約の有無)を業務ルールから命名し、テーブル構造の列を導ける
- 乗船・下船・精算の各業務で更新されるテーブルと行(主キー値)、更新内容を特定できる
- 往復予約のキャンセル料の条件や、代表予約番号・まとめ精算・キャンセル待ちのトリガーなど、新規要件をテーブル構造の変更として設計できる
出題情報
- 出題
- 2022(R4)秋 データベーススペシャリスト 午後II 問2
- 配点
- 100点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
データベースを構築してから時間が経過すると,開発時の業務要件に加えて,新規の業務要件が発生する。 本問では,フェリー会社の乗船予約システムの再構築におけるデータベース設計を題材として,現行の業務要件に基づく概念データモデルを読み取る能力,現行業務での更新対象となるテーブル及び制約条件を見抜く能力,新規業務要件を基に概念データモデルとテーブル構造を見直す能力を問う。
問2では,フェリー会社の乗船予約システムの再構築を題材に,現行業務の概念データモデルとテーブル構造,更新対象となるテーブル及び制約条件,新規要件を反映した概念データモデルとテーブル構造について出題した。全体として正答率は平均的であった。
問題本文
フェリー会社の乗船予約システムのデータベース設計に関する次の記述を読んで,設問に答えよ。
X社は,複数航路でフェリーを運航している。乗船予約システムを構築してから時間が経過していることから,改めて現行業務を分析し,更に新規要件を洗い出し,乗船予約システムを再構築することになった。予約,乗船手続,下船手続などに関する業務について,概念データモデルとテーブル構造を設計した。
〔現行業務の分析結果〕
- フェリーの概要
(1) フェリー
① 12隻のフェリーを運航している。フェリーはフェリー番号で識別している。
② 一つの設計図で複数のフェリーを造っている。同じ設計図から造られたフェリーを同じ船型のフェリーと呼ぶ。同じ船型であれば,外見だけでなく,船内施設,宿泊区画などの構成も同じとなる。船型は船型番号で識別している。
③ 現在,三つの船型があり,船型ごとに4隻のフェリーがある。
④ フェリーが乗船客のほかに積載できるのは,次のとおりである。
・乗用車・トラック・バス(以下,車両という)
・ペット持込み用のペットケージ
・自転車・原動機付自転車・自動二輪車(以下,二輪車という)
⑤ どれだけの車両を積載できるかは,車両の長さが基準となる。船型ごとに積載可能車両長合計を決めており,積載する車両の車両長の合計が,積載可能車両長合計を超えない範囲であれば積載可能となる。
⑥ ペットケージ,二輪車については,船型ごとに積載可能数をそれぞれ決めている。
(2) 宿泊区画
① 宿泊区画とは,乗客の宿泊のための販売単位であり,大部屋に設置されたベッド(定員1名)と個室(定員1名から4名まで)とがある。
② 宿泊区画には一意な宿泊区画番号を付与している。宿泊区画番号には,個室の場合は個室番号,ベッドの場合はベッド番号を用いる。
(3) 等級
① 宿泊区画は等級に分かれており,等級を等級コードで識別している。個室の等級には,ロイヤルスイート,スイート,デラックス,レディースデラックスなどがあり,大部屋の等級には,ステート,ツーリストなどがある。
② 船型ごとに存在する等級が異なる。例えば,ある船型にはロイヤルスイートが存在しないということがある。
③ 一部の等級のエリアは,後述するカードキーをタッチしないとドアが開かず立ち入ることができない。
④ 同じ等級でも船型ごとに定員,面積が異なる場合がある。
(4) 航路
① 出発港から幾つかの経由港を経て到着港までを航路と呼ぶ。ただし,経由港のない航路もある。A港とB港との間を運航している場合,A港発B港行とB港発A港行とは別の航路となる。航路ごとに航路番号を決めている。
② 航路ごとに配船する船型を決めている。
③ 航路ごとに航路明細として出発港,経由港,到着港,標準入港時刻,標準出港時刻を決めている。港は港コードで識別している。航路明細の例を表1に示す。

図の説明テキスト
表1 航路明細の例
航路番号、航路名、港コード、港名、寄港順、港区分、標準入港時刻、標準出港時刻の各列をもつ表。
(5) 運航スケジュール
① 航路について,出発年月日ごとに配船するフェリーを決める。ある航路において,同日に複数のフェリーが出発することはない。運航スケジュールの例を表2に示す。

図の説明テキスト
表2 運航スケジュールの例
航路番号、航路名、出発年月日、フェリー名の各列をもつ表。
② 出発港,経由港,到着港にいつ入出港するかの運航スケジュール明細を決める。同じ航路でも出発年月日によって出発港,経由港,到着港の入港日時及び出港日時が,標準入港時刻及び標準出港時刻と異なる場合がある。運航スケジュール明細の例を表3に示す。

図の説明テキスト
表3 運航スケジュール明細の例
航路番号、航路名、出発年月日、港コード、港名、入港日時、出港日時の各列をもつ表。
(6) 販売区間
航路内の販売可能な乗船港と下船港との組合せを販売区間と呼ぶ。宿泊を伴わない区間は販売区間とならない。C港とF港の間を運航し,D港,E港を経由する航路の場合,C港〜E港,C港〜F港,D港〜E港,D港〜F港,E港〜F港が販売区間となり得る。販売区間は販売区間名をもち,航路番号,乗船港コード,下船港コードで識別する。
(7) 運賃
① 販売区間ごとに乗船客,車両,ペットケージ,二輪車の運賃表がある。
② 乗船客の運賃は,等級ごとに大人運賃を決めている。小人運賃は大人運賃の半額としている。中学生以上には大人運賃,小学生には小人運賃を適用する。小学生未満の乳幼児は,大人1名につき1名分が無料となり,2人目以降は小人運賃となる。
③ 車両の運賃は,車両の長さの範囲(4m未満,4m以上5m未満など)ごとに決めている。
④ ペットの運賃は,ペットケージ1個ごとに決めている。
⑤ 二輪車の1台当たりの運賃は,自転車・原動機付自転車・自動二輪車の種類ごとに決めている。
⑥ 等級に,車両の長さの範囲,ペットケージ,二輪車の種類を併せて運賃種類と呼び,運賃種類コードで識別している。運賃種類コードのうち,乗船客の運賃を表すものは等級コードである。
⑦ 乗船客,車両及び二輪車については,通常期運賃とは別に繁忙期運賃を設定している。
⑧ 復路の乗船年月日が往路の乗船年月日から30日以内であれば往復割引を適用し,復路は10%割引としている。
⑨ 運賃表は燃油の価格変動に伴い,数か月ごとに見直す。運賃表の運用開始日を決めている。
(8) 船内施設
フェリーの船内には,レストラン,ショップなどの施設があり,フェリーごとの施設コードで識別している。
(9) 船内商品
船内施設で提供する商品として,レストランでの飲食メニュー,ショップでのお土産品・雑貨品などがある。これらは,全フェリー共通の商品コードで識別している。
- 予約業務
(1) 予約登録
① 予約は,予約受付順の予約番号で一意に識別している。予約登録は,航路と販売区間を指定した上で次のように行う。
・宿泊区画:個室の場合は 1 部屋,大部屋の場合は同じ等級の 6 人まで
・車両:1 台まで
・ペットケージ,二輪車:数に制限無し
② 往復予約の場合は,往路と復路とは別の予約番号を振り,復路の予約に往路予約番号をもたせる。
③ 航路,乗船港,下船港,乗船年月日,等級,大人人数,小人人数,乳幼児人数,車両の有無(有りの場合は車両の長さ),ペットケージ,二輪車の数を登録する。併せて乗船予定者全員の氏名,性別,生年月日,住所,大人運賃・小人運賃・無料のいずれかを表す適用運賃区分を予約客として登録する。
④ 予約内容の変更は受け付けていない。
(2) 予約キャンセル
① 予約キャンセルは,出港時刻までであれば,予約番号ごとに可能である。ただし,乗船年月日の 6 日前以降のキャンセルは,キャンセル料が発生する。乗船年月日までの日数によってキャンセル期間区分を決め,キャンセル料率を変えている。出港後はキャンセルできず,全額請求する。往復で予約している場合,往路復路それぞれの乗船年月日に対してキャンセル料を算出する。
② 天候不良などによる欠航の場合,翌日以降の運航に振り替えるか,キャンセルするかを,予約客に選択してもらう。キャンセルの場合,キャンセル料は請求せず,全額を返金する。
③ 往復予約の往路が天候不良などで欠航になったときの復路をキャンセルする場合,キャンセル料は請求せず,全額を返金する。
(3) 在庫の把握
① 個室については利用可能個室残数を,大部屋については利用可能ベッド残数を等級別在庫としてそれぞれ記録している。出発港,経由港を出港する時点での等級ごとの残数を記録する。予約受付時又は予約無しでの乗船時に,個室であれば利用可能個室残数を,大部屋であれば利用可能ベッド残数を更新(利用分を減算)する。
② 車両については積載可能車両残長を,ペットケージについては積載可能ペットケージ残数を,二輪車については積載可能二輪車残数をそれぞれ記録する。出港港,経由港を出港する時点の残長・残数を記録する。予約受付時又は予約無しでの乗船時に,車両であれば積載可能車両残長を,ペットケージであれば積載可能ペットケージ残数を,二輪車であれば積載可能二輪車残数を更新(積載分を減算)する。
③ 上述の残長・残数について,乗船港と下船港との間に経由港がある場合には乗船港を出港する時点の残長・残数だけではなく,経由港を出港する時点の残長・残数も更新する。C港を出港し,D港,E港を経由し,F港に到着する航路で,C港で乗船し,F港で下船する場合,C港を出港する時点の残長・残数だけではなく,D港,E港を出港する時点の残長・残数も更新する。
④ 予約キャンセル時には,予約登録時と逆に更新(キャンセル分を加算)する。
入金業務
(1) 運賃の支払には,乗船前の支払と乗船当日の乗船窓口での支払とがある。
(2) 乗船前の支払方法には,クレジットカード決済と現金振込みとがある。支払が完了すると乗船前支払フラグを‘支払済’にする。
(3) 乗船当日の乗船窓口での支払方法には,クレジットカード決済と現金払とがある。顧客管理業務
(1) リピーターを確保する目的で顧客管理を行っており,希望する顧客には,氏名,性別,生年月日,住所,電話番号,メールアドレスを登録してもらい,顧客番号が記載された顧客カードを渡す。
(2) 顧客は,顧客カードに記載された顧客番号を伝えることで,予約時及び乗船時に氏名,性別などを記入する必要がなくなる。乗船手続(チェックイン)
(1) 乗船当日に乗船窓口において,予約有りの場合は予約の単位に,予約無しの場合は乗船する個人又はグループ単位に乗船客の乗船手続をする。乗船手続では運航スケジュールごとの乗船番号を発行する。
(2) 予約有りの乗船手続
① 乗船窓口の担当者が予約を確認する。予約が確認できたら,予約の記録を乗船の記録に引き継ぐ。
② 予約時に申請した予約客に変更がある場合には,変更後の内容を乗船客として記録する。
③ 運賃が未払の場合は,運賃を請求する。
(3) 予約無しの乗船手続
① 乗船窓口の担当者が,乗船客の航路,乗船港,下船港,乗船年月日,等級,大人人数,小人人数,乳幼児人数,車両の有無,ペットケージ,二輪車の数を確認する。これらは予約の記録ではなく,乗船の記録とする。
② 次に乗船客を確認する。氏名,性別,生年月日,住所,適用運賃区分を乗船客の記録とする。顧客登録している場合,顧客番号を提示してもらうことで,氏名,性別などを確認する必要がなくなる。
③ 運賃を請求する。
(4) 予約の有無にかかわらず,乗船手続時に乗船窓口の担当者が個室又はベッドを決定する。宿泊区画状態区分が乗船の全区間を通して‘チェックイン可’の個室又はベッドを割り当てる。
(5) 乗船手続時に個室・大部屋の解錠ができるカードキーを手渡す。カードキーは乗船客ごとに作成する。カードキーには,航路番号,出発年月日,乗船客番号,宿泊区画番号を登録する。
(6) 乗船手続終了後,乗船ステータス及び宿泊区画状態区分を‘チェックイン’に変更する。船内売上
(1) 乗船中に乗船客が船内商品を購入する場合の支払方法には,クレジットカード決済,現金払がある。
(2) 乗船客が購入した船内商品及び個数・金額を船内売上明細に,購入ごとの合計金額を船内売上に記録する。下船手続(チェックアウト)
下船口で乗船客から受領したカードキーを読み取り,乗船ステータス及び宿泊区画状態区分を‘チェックアウト’にする。
〔概念データモデルとテーブル構造〕
現行業務の分析結果に基づいて,概念データモデルとテーブル構造を設計した。テーブル構造は,概念データモデルでサブタイプとしたエンティティタイプを,スーパータイプのエンティティタイプにまとめた。現行業務の概念データモデルを図1に,現行業務のテーブル構造を図2に示す。

図の説明テキスト
図1 現行業務の概念データモデル(未完成)。
マスター領域とトランザクション領域に分かれている。マスター領域には空欄 ア がある。
トランザクション領域には「予約客」のサブタイプとして イ、ウ があり、「乗船客」のサブタイプとして エ、オ がある。

図の説明テキスト
図2 現行業務のテーブル構造(未完成)。
港、航路、航路明細、船型などのテーブルスキーマが定義されている。図中に空欄のテーブル定義 ア ( カ ) がある。
〔新規要件〕
予約業務
(1) 航路の出発港から到着港まで全て乗船する予約に限り,個室又はベッドを指定できるようにする。乗船手続(チェックイン)までならば,指定した個室又はベッドを変更することもできるようにする。
(2) 1回の予約で複数個室又は大部屋に7人以上の予約ができるようにする。
(3) キャンセル待ちをできるようにする。キャンセル待ちは,通常の予約と同様に航路,乗船年月日,乗船港,下船港,等級,人数などを指定する。出港までにキャンセルが発生した場合,キャンセル待ちを仮予約に変更し,予約希望者に確認の上,本予約に変更する。複数のキャンセル待ちがある場合は,キャンセル待ちの予約番号順かつ条件に合致するものを優先する。下船手続(下船時精算)
(1) レストラン及びショップでの船内精算の際にカードキーを提示すると,その場で都度支払うのではなく,下船時に乗船客ごとに一括して支払うことができるようにする。この場合,下船時にフロントで精算する。下船時の一括支払方法としては,クレジットカード決済,現金払がある。下船時精算額を記録する。
(2) 下船時にフロントで精算する場合,乗船客の家族が持つ複数のカードキーをまとめて精算することができるようにする。精算合計金額を記録する。
解答に当たっては,巻頭の表記ルールに従うこと。ただし,エンティティタイプ間の対応関係にゼロを含むか否かの表記は必要ない。
なお,エンティティタイプ間のリレーションシップとして“多対多”のリレーションシップを用いないこと。エンティティタイプ名は,意味を識別できる適切な名称とすること。また,識別可能なサブタイプが存在する場合,他のエンティティタイプとのリレーションシップは,スーパータイプ又はサブタイプのいずれか適切な方との間に記述せよ。同一のエンティティタイプ間に異なる役割をもつ複数のリレーションシップが存在する場合,役割の数だけリレーションシップを表す線を記述せよ。また,テーブル構造は第3正規形の条件を満たしていること。列名は意味を識別できる適切な名称とすること。

図の説明テキスト
設問2 (1)(b) の解答欄用の表。主キーの列名・列値、変更する列名・変更内容を記述する。

図の説明テキスト
表4 予約時の制約条件(未完成)
制約番号1 車両有りの予約時: 予約しようとしている航路, 乗船港, 下船港, 乗船年月日に該当する “運航スケジュール明細” テーブルの全ての行の a が “予約” テーブルの b であること
制約番号2 ペットケージ有りの予約時、制約番号3 二輪車有りの予約時についても同様の条件が記載されている(一部網掛け)。
設問と解答・解説
設問1
現行業務の概念データモデルとテーブル構造について答えよ。
図1中のマスター領域は,エンティティタイプ及びリレーションシップが未完成である。ア に入れる適切なエンティティタイプ名を答えよ。
模範解答
販売区間
採点基準
- 3点: アに入るべき「販売区間」という業務概念を正確に理解し、解答している。
- 0点: 業務概念の理解が不十分であり、誤った名称を解答している。
- 2点: 航路明細とのリレーションシップに基づき、論理的に妥当な名称を導出できている。
- 0点: リレーションシップからの推論が不十分で、論理的な妥当性が欠けている。
解説
現行業務の概念データモデルを読み解く設問です。
航路明細とリレーションシップを持つ ア は、運賃の決定単位となる 販売区間 が該当します。同一のエンティティタイプ間に異なる役割をもつ複数のリレーションシップが存在するかどうかを注意深く読み取る必要があります。
高得点のポイント
- 図1のマスター領域におけるエンティティの関係性から、「販売区間」という概念を導出すること
- 業務要件に基づく適切なエンティティタイプ名を解答すること
マスター領域において欠落しているリレーションシップを補い,図を完成させよ(リレーションシップのみを答えること)。
なお,マスター領域のエンティティタイプとトランザクション領域のエンティティタイプ間のリレーションシップは不要である。
模範解答
次のリレーションシップを追加する: (1) 航路明細 → ア(販売区間)(1対多。乗船港側と下船港側で 2 本), (2) ア(販売区間) → 運賃(1対多), (3) 航路明細 → 運航スケジュール明細(1対多), (4) 運航スケジュール → 運航スケジュール明細(1対多), (5) 運航スケジュール明細 → 等級別在庫(1対多)
採点基準
- 3点: 公式解答の関連(航路明細→ア 2 本、ア→運賃、航路明細→運航スケジュール明細、運航スケジュール→運航スケジュール明細、運航スケジュール明細→等級別在庫)を 1対多で正しく補っている。
- 0点: 大半の関連を補っているが、1〜2 本の欠落または向きの誤りがある。
- 2点: エンティティ間の多重度や依存関係の構造が論理的に正しく表現されている。
- 0点: リレーションシップの構造が論理的に誤っている。
解説
解説
公式解答例のマスター領域には、次のリレーションシップ(すべて1対多)が補われています。
- 航路明細 → ア(販売区間)を 2 本: 販売区間は乗船港と下船港の組で決まり、それぞれが航路明細(航路の港)を参照する
- ア(販売区間) → 運賃: 運賃は販売区間ごと(等級・運賃種類ごと)に定まる
- 航路明細 → 運航スケジュール明細, 運航スケジュール → 運航スケジュール明細: 運航スケジュール明細は、運航スケジュール(便)ごとに各港(航路明細)の発着を表す
- 運航スケジュール明細 → 等級別在庫: 等級別在庫は便・港ごとに等級別の残数を管理する
マスター領域とトランザクション領域の間のリレーションシップは設問の指示により不要です。
高得点のポイント
販売区間が航路明細を 2 回(乗船港・下船港)参照する構造を読み取れていること
運航スケジュール明細を中心に、便・港・等級別在庫の関係を正しく結べていること
図1中のトランザクション領域は,サブタイプ及びリレーションシップが未完成である。イ に入れる適切なサブタイプ名を答えよ。
模範解答
顧客登録無予約客
採点基準
- 3点: イに入るサブタイプ「顧客登録無予約客」を正確に解答している。
- 0点: サブタイプの名称を正しく解答できていない。
- 2点: 予約客の分類として論理的に妥当なサブタイプ構造を導出している。
- 0点: スーパータイプとの関係に論理的矛盾がある。
解説
予約客エンティティのサブタイプを答える設問です。
予約客は顧客登録の有無によってサブタイプ化されます。トランザクション領域の構成から、イ には 顧客登録無予約客 が該当します。
高得点のポイント
- スーパータイプとサブタイプの関係性を正しく読み取ること
- 顧客登録の有無に基づく適切なサブタイプ名であること
ウ に入れる適切なサブタイプ名を答えよ。
模範解答
顧客登録有予約客
採点基準
- 3点: ウに入るサブタイプ「顧客登録有予約客」を正確に解答している。
- 0点: サブタイプの名称を正しく解答できていない。
- 2点: 予約客の分類として論理的に妥当なサブタイプ構造を導出している。
- 0点: スーパータイプとの関係に論理的矛盾がある。
解説
予約客エンティティのサブタイプを答える設問です。
予約客のうち、顧客登録が存在するサブタイプであるため、ウ には 顧客登録有予約客 が該当します。
高得点のポイント
- サブタイプ要件における「顧客登録有」のパターンを正しく解答すること
エ に入れる適切なサブタイプ名を答えよ。
模範解答
顧客登録有乗船客
採点基準
- 3点: エに入るサブタイプ「顧客登録有乗船客」を正確に解答している。
- 0点: サブタイプの名称を正しく解答できていない。
- 2点: 乗船客の分類として論理的に妥当なサブタイプ構造を導出している。
- 0点: スーパータイプとの関係に論理的矛盾がある。
解説
乗船客エンティティのサブタイプを答える設問です。
乗船客も同様に顧客登録の有無でサブタイプ化されます。エ には 顧客登録有乗船客 が該当します。
高得点のポイント
- 乗船客を基準とした適切なサブタイプの名称を解答すること
オ に入れる適切なサブタイプ名を答えよ。
模範解答
顧客登録無乗船客
採点基準
- 3点: オに入るサブタイプ「顧客登録無乗船客」を正確に解答している。
- 0点: サブタイプの名称を正しく解答できていない。
- 2点: 乗船客の分類として論理的に妥当なサブタイプ構造を導出している。
- 0点: スーパータイプとの関係に論理的矛盾がある。
解説
乗船客エンティティのサブタイプを答える設問です。
顧客登録が存在しない乗船客であるため、オ には 顧客登録無乗船客 が該当します。
高得点のポイント
- 乗船客を基準とした「顧客登録無」のサブタイプを適切に解答すること
トランザクション領域において欠落しているリレーションシップを2本補い,図を完成させよ(リレーションシップのみを答えること)。
なお,マスター領域のエンティティタイプとトランザクション領域のエンティティタイプ間のリレーションシップは不要である。
模範解答
次の 2 本のリレーションシップ(いずれも1対1、矢印を付けない線)を追加する: (1) 予約 — 予約有乗船, (2) 予約客 — 予約有乗船客
採点基準
- 3点: 公式解答の 2 本(予約—予約有乗船、予約客—予約有乗船客)を 1対1(矢印なし)で正しく補っている。
- 0点: 2 本のうち 1 本の欠落、または多重度(1対1)の誤りがある。
- 2点: スーパータイプとサブタイプとの関係を論理的に正確に構築している。
- 0点: 構築された関係に論理的矛盾がある。
解説
解説
公式解答例のトランザクション領域には、次の 2 本が補われています。いずれも1対1の関連なので、表記ルールどおり矢印を付けない線で描きます。
- 予約 — 予約有乗船: 予約有乗船は予約に基づく乗船であり、1 つの予約に対して乗船(予約有乗船)は 1 つ、1 つの予約有乗船は 1 つの予約に対応する
- 予約客 — 予約有乗船客: 予約有乗船客は予約客として登録された人が乗船したものであり、予約客 1 人に予約有乗船客 1 人が対応する
予約無乗船・予約無乗船客は予約を持たないため、これらの関連は付けません。サブタイプ(予約客→イ/ウ、乗船客→エ/オ・予約有乗船客/予約無乗船客、乗船→予約有乗船/予約無乗船)と、予約—予約キャンセル、予約の自己参照は問題の図に既にあります。
高得点のポイント
「予約有」のサブタイプだけが予約・予約客に対応することを、業務ルールから導けていること
多重度を1対1(矢印なし)として正しく表せていること
図2中の カ に入れる一つ又は複数の適切な列名を答えよ。主キーを表す実線の下線,外部キーを表す破線の下線についても答えること。
模範解答
航路番号,乗船港コード,下船港コード,販売区間名
採点基準
- 3点: カに入る列名(航路番号,乗船港コード,下船港コード,販売区間名)を正確に特定している。
- 0点: 列名の特定に不足や誤りがある。
- 2点: 主キー(実線の下線)と外部キー(破線の下線)の制約を論理的に正しく表現している。
- 0点: キー制約の表現が不正確である。
解説
テーブル構造における適切な列名とキー制約を答える設問です。
カ には、主キーおよび外部キーを構成する要素として 航路番号,乗船港コード,下船港コード,販売区間名 が入ります。解答の際は主キー(実線)と外部キー(破線)を明確に指定することが求められます。
高得点のポイント
- 必要な全ての列名を漏れなく列挙していること
- 主キーと外部キーの制約条件を論理的に正しく表現していること
設問1では,(1)の航路明細とア(販売区間)とのリレーションシップ,(2)の2本のリレーションシップの正答率が低かった。同一のエンティティタイプ間に異なる役割をもつ複数のリレーションシップが存在するかどうか,スーパータイプとサブタイプが存在する場合にスーパータイプとサブタイプのいずれとの間にリレーションシップが存在するかを注意深く読み取ってほしい。
設問2
現行業務の業務処理及び制約について答えよ。
出港時に乗船客が予約有りで乗船した場合には更新の必要がないが,予約無しで乗船した場合には行の更新が必要となるテーブルがある。(a) 車両・ペットケージ・二輪車を伴わない場合について,そのテーブル名及び更新する可能性のある列名を,図2中から選び,全て答えよ。
模範解答
テーブル名: 等級別在庫, 列名: 利用可能個室残数,利用可能ベッド残数
採点基準
- 5点: テーブル名と更新する可能性のある全ての列名を完全に正確に抜き出している。
- 3点: テーブル名は正しいが、列名の一部が不足している。
- 0点: テーブル名が誤っているか、正確に抜き出せていない。
解説
現行業務における更新対象テーブルを特定する設問です。
予約無しで乗船した場合、利用可能な在庫を減少させる必要があるため、等級別在庫 テーブルの 利用可能個室残数 および 利用可能ベッド残数 が更新対象となります。等級別在庫テーブルには到着港の行が存在しないことに注意してください。
高得点のポイント
- 図2の中から正確に「等級別在庫」を選択すること
- 更新対象となる2つの列名(利用可能個室残数、利用可能ベッド残数)を漏れなく記述すること
表1〜表3の例において,ある乗船客1名が出発年月日 ‘2022-03-14’,航路番号 ‘01’(C港発F港行),販売区間 ‘C港〜F港’,等級コード ‘DX’(デラックスの等級コード)を乗船した場合,(a)で答えたテーブルの主キーの列名及び列値,並びに変更する列名及び変更内容を答えよ。(解答例として主キーの列名と列値,変更する列名と変更内容を明記すること)
模範解答
主キー 列名: 航路番号, 出発年月日, 港コード, 等級コード 列値: 01, 2022-03-14, 003, DX / 01, 2022-03-14, 004, DX / 01, 2022-03-14, 005, DX 変更する列名: 利用可能個室残数 変更内容: 1減算する。
採点基準
- 3点: 変更する行の主キー(3行分)と列値、および変更内容を具体的に正確に記述している。
- 1点: 変更内容の記述に一部不足(例:更新対象行が4行になっているなど)がある。
- 0点: 記述内容が全体的に不正確である。
- 2点: 現行業務の制約に基づいて論理的に妥当な更新内容を示している。
- 0点: 論理的な妥当性が欠けている。
解説
特定の条件におけるデータベースの行の更新内容を具体的に答える設問です。
C港発F港行の区間を予約なしで乗船した場合、経由する区間(C港発、D港発、E港発)の在庫を更新する必要があります。主キーの列名(航路番号、出発年月日、港コード、等級コード)に対して、対応する列値を指定し、「利用可能個室残数」から1を減算する処理を記述します。
高得点のポイント
- 経由する全ての区間(3行分)の主キー値を正確に列挙すること
- 変更対象列(利用可能個室残数)と変更内容(1減算)を明確に記述すること
車両・ペットケージ・二輪車有りの予約の場合に挿入行に対して必要となる制約条件を表4にまとめた。表4中の a に入れる適切な字句を答えよ。
模範解答
積載可能車両残長
採点基準
- 3点: aに入る「積載可能車両残長」を正確に理解し記述している。
- 0点: 記述が不正確である。
- 2点: 予約時の制約条件として論理的に妥当な列名を示している。
- 0点: 妥当でない。
解説
車両を伴う予約の制約条件を答える設問です。
車両等の予約がある場合、船に積載できる残りのスペースを判定するために 積載可能車両残長 の列値を確認する必要があります。
高得点のポイント
- 制約判定に必要なデータ項目名「積載可能車両残長」を正確に解答すること
表4中の b に入れる適切な字句を答えよ。
模範解答
車両全長以上
採点基準
- 3点: bに入る「車両全長以上」という条件を正確に理解し記述している。
- 0点: 記述が不正確である。
- 2点: 予約時の制約条件として論理的に妥当な比較条件を示している。
- 0点: 妥当でない。
解説
車両予約の制約判定の比較条件を答える設問です。
積載可能車両残長が、予約しようとしている 車両全長以上 である場合に予約が成立します。
高得点のポイント
- 比較対象となる「車両全長」と、条件である「以上」を正確に組み合わせること
顧客都合で往復予約をキャンセルした場合,往路だけにキャンセル料が発生する場合がある。そのときの条件を50字以内で具体的に答えよ。
模範解答
キャンセル日が往路乗船年月日の6日前以降,かつ,復路乗船年月日の6日前よりも前の場合
キャンセル日が往路乗船年月日の6日前以降,かつ,復路乗船年月日の7日前以前の場合
キャンセル日が往路乗船年月日の6日前以降,かつ,復路乗船年月日の6日前以降でない場合
採点基準
- 3点: 往路のみキャンセル料が発生する条件の日数基準(6日前など)を正確に理解し記述している。
- 0点: 基準の理解が不十分である。
- 2点: 往路と復路の乗船年月日とキャンセル日の関係を論理的に矛盾なく指定文字数以内で構成している。
- 0点: 論理的な構成が不十分である。
解説
往復予約におけるキャンセル料発生の条件を答える設問です。
往復で予約している場合、キャンセルしたタイミングが往路においてはキャンセル料発生期間(6日前以降)に該当し、復路においてはキャンセル料発生期間より前(6日前よりも前、または7日前以前)である場合に、往路のみにキャンセル料が発生します。
高得点のポイント
- 往路のキャンセル料発生条件(6日前以降)を明記すること
- 復路のキャンセル料未発生条件(6日前よりも前、または7日前以前)を明記し、かつ論理的に矛盾なく50字以内でまとめること
設問2では,(1)(b)の正答率が低かった。変更対象となる行を4行とした解答が散見された。等級別在庫テーブルには到着港の行が存在しないことを現行業務から注意深く読み取ってほしい。
設問3
〔新規要件〕について答えよ。
“1. 予約業務”の(1)を実現する方法として,図2中の二つのテーブルに列を追加する案を考えた。該当するテーブル名及び追加する列名をそれぞれ答えよ。
模範解答
テーブル名: 予約, 列名: 個室宿泊区画番号 / テーブル名: 予約客, 列名: 大部屋宿泊区画番号
採点基準
- 3点: 2 つのテーブル名と追加する列名の組を、順序を問わず両方とも正しく答えている。
- 1点: 一方のテーブルまたは列名のみ正しく特定している。
- 0点: 特定できていない。
- 2点: 個室と大部屋の業務単位の違いに基づき、論理的に適切なテーブルに列を割り当てている。
- 0点: 割り当てが不適切である。
解説
新規要件に伴うテーブル構造の変更を見極める設問です。
個室は1部屋単位(予約単位)、大部屋は人単位(予約客単位)で区画を確保する業務要件から、予約 テーブルに 個室宿泊区画番号 を、予約客 テーブルに 大部屋宿泊区画番号 をそれぞれ追加する必要があります。
高得点のポイント
- 要件から変更対象となる2つのテーブルを正確に特定すること
- 個室と大部屋の違いに基づき、それぞれ適切な列名を追加していること
公式解答例では①と②(2 つのテーブル)は順不同です。どちらの順で答えても正解です。
“1. 予約業務”の(2)を実現する方法として,現行と同じ単位(個室であれば1部屋,大部屋であれば同じ等級の6人まで)に分けて複数の予約とし,予約客には複数の予約の中から代表の予約番号だけを提示して代表の予約番号以外を意識させないようにすることにした。このために,図2中の一つのテーブルに列を追加する案を考えた。該当するテーブル名及び追加する列名を答えよ。
模範解答
テーブル名: 予約, 列名: 代表予約番号
採点基準
- 3点: 複数の予約をまとめるための「代表予約番号」という概念と対象テーブルを正確に特定している。
- 0点: 特定できていない。
- 2点: 「予約」テーブルへの列追加によって要件が実現できることを論理的に示している。
- 0点: 論理的な実現性が不十分である。
解説
複数の予約を束ねるためのテーブル設計を答える設問です。
内部的には複数の予約に分割されていても、顧客には1つの予約として見せるために、予約 テーブルにそれらをまとめる 代表予約番号 を追加します。
高得点のポイント
- 関連づけを行うための概念(代表予約番号)を正確に導き出すこと
- 追加対象となるテーブル(予約)を正しく指定すること
“1. 予約業務”の(3)を実現する方法について答えよ。(a) 図2中の“予約”テーブルに列を追加する案を考えた。追加する列の役割を25字以内で答えよ。
模範解答
キャンセル待ちと仮予約と本予約とを区分する。
採点基準
- 3点: 追加する列の役割(キャンセル待ち、仮予約、本予約の区分)を的確に理解している。
- 0点: 役割の説明が不十分である。
- 2点: 25字以内で簡潔かつ論理的に役割を表現している。
- 0点: 表現が冗長または論理が不明確である。
解説
予約ステータスの管理役割を簡潔に説明する設問です。
予約業務の新規要件において、予約が確定しているか否かの状態を判別するため、キャンセル待ちと仮予約と本予約とを区分する 役割を持つ列を追加します。
高得点のポイント
- 新規要件である「キャンセル待ち」「仮予約」「本予約」の3つの状態を区分する目的であることを25字以内で表現すること
(b) 予約のキャンセルが発生した場合に,キャンセル待ちから仮予約への変更処理を起動するトリガーを定義する。トリガーを定義する図2中のテーブル名を答えよ。また,トリガーの実行契機を答えよ。
模範解答
テーブル名: 予約キャンセル, 実行契機: 行の挿入後
採点基準
- 3点: トリガーを定義するテーブルと実行契機を正確に特定している。
- 1点: テーブルまたは実行契機のどちらか一方のみを正確に特定している。
- 0点: 特定できていない。
- 2点: トリガーの動作要件に基づいて論理的に妥当な設計を示している。
- 0点: 妥当な設計を示せていない。
解説
トリガーの設計に関する設問です。
キャンセルの発生を契機とするため、予約キャンセル テーブルに対してデータが追加されたタイミング、すなわち 行の挿入後 をトリガーの実行契機として定義します。
高得点のポイント
- トリガーを定義すべき適切なテーブル名(予約キャンセル)を特定すること
- 状態変化のタイミングである「行の挿入後」という実行契機を正確に記述すること
“2. 下船手続(下船時精算)”の(1)を実現する方法として,図2中の二つのテーブルに列を追加する案を考えた。該当するテーブル名及び追加する列名をそれぞれ答えよ。
模範解答
テーブル名: 船内売上, 列名: 航路番号,出発年月日,乗船客番号 / テーブル名: 乗船客, 列名: 下船時精算額,下船時一括支払方法区分
採点基準
- 3点: 2 つのテーブル名と追加する列名の組を、順序を問わず両方とも正しく答えている。
- 1点: 一部の列名やテーブル名のみ正しく特定している。
- 0点: 特定できていない。
- 2点: 既存のエンティティ間の関係と業務要件に基づき、論理的に妥当な列追加を示している。
- 0点: 列追加の妥当性が不十分である。
解説
下船時精算要件の追加に伴うテーブル変更を答える設問です。
船内売上を乗船客と紐付けるために 船内売上 テーブルに 航路番号,出発年月日,乗船客番号 を追加し、精算情報を保持するために 乗船客 テーブルに 下船時精算額,下船時一括支払方法区分 を追加します。
高得点のポイント
- 売上明細と顧客を紐付けるための外部キーを船内売上テーブルに追加していること
- 精算に必要な属性情報を乗船客テーブルに追加していること
公式解答例では①と②(2 つのテーブル)は順不同です。どちらの順で答えても正解です。
“2. 下船手続(下船時精算)”の(2)を実現する方法として,“まとめ精算”テーブルを追加する。“まとめ精算”テーブルは,運航スケジュールごとのまとめ精算番号で一意に識別することとする。“まとめ精算”テーブルの構造を答えよ。主キーを表す実線の下線,外部キーを表す破線の下線についても答えること。
模範解答
まとめ精算(航路番号,出発年月日,まとめ精算番号,精算合計金額)
採点基準
- 3点: 「まとめ精算」テーブルに必要な主キーと属性を正確に特定している。
- 0点: 主キーや属性の特定に誤りがある。
- 2点: 主キー(実線)などの制約を論理的に正しく表現する構造を示している。
- 0点: 構造の表現が不正確である。
解説
新規追加する「まとめ精算」テーブルの構造を設計する設問です。
運航スケジュール(航路番号、出発年月日)ごとのまとめ精算番号で識別するため、これらを主キーとして定義し、集計項目である「精算合計金額」を持たせます。
高得点のポイント
- 主キーとなる「航路番号,出発年月日,まとめ精算番号」を実線で明記すること
- 属性としての「精算合計金額」を正確に含めること
また,図2中の一つのテーブルに列を追加する。該当するテーブル名及び追加する列名を答えよ。
模範解答
テーブル名: 乗船客, 列名: まとめ精算番号
採点基準
- 3点: 「乗船客」テーブルに追加すべき「まとめ精算番号」を正確に特定している。
- 0点: 特定できていない。
- 2点: テーブル間を関連付けるための外部キー追加として論理的に妥当な設計を示している。
- 0点: 設計の妥当性が不十分である。
解説
集計テーブルの導入に伴う既存テーブルの変更を答える設問です。
「まとめ精算」テーブルの行と乗船客の情報を関連付けるために、既存の 乗船客 テーブルに対して外部キーとして まとめ精算番号 を追加します。
高得点のポイント
- 集計テーブルに紐付けるための外部キーを追加する実務的な設計手法を理解していること
- 対象を「乗船客」テーブルと正確に特定していること
設問3では,(4),(5)の正答率が低かった。新規要件を注意深く読み取り,変更・追加するテーブル構造を見極めてほしい。例えば(5)は,既存テーブルの行を集計したテーブルを追加し,既存テーブルに外部キーを追加する方法を求めたものである。これは,実務でもよくあることであり,是非知っておいてもらいたい。