ホーム > データベーススペシャリスト試験 > 2023年
データベーススペシャリスト試験 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に示す。

〔概念データモデルと関係スキーマの設計〕
1.概念データモデル及び関係スキーマの設計方針
(1) 概念データモデル及び関係スキーマの設計は, まず現状業務について実施しその後に新規要件に関する部分を実施する。
(2) 関係スキーマは第3正規形にし, 多対多のリレーションシップは用いない。
(3) 概念データモデルでは, リレーションシップについて, 対応関係にゼロを含むか否かを表す “○” 又は“●”は記述しない。
(4) サブタイプが存在する場合、他のエンティティタイプとのリレーションシップは,スーパータイプ又はいずれかのサブタイプの適切な方との間に設定する。
2.〔現状業務の分析結果〕 に基づく設計
現状の概念データモデルを図1に, 関係スキーマを図2に示す。


3.〔新規要件〕 に関する設計
新規要件に関する概念データモデルを図3に, 関係スキーマを図4に示す。


解答に当たっては, 巻頭の表記ルールに従うこと。 また, エンティティタイプ名,関係名, 属性名は,それぞれ意味を識別できる適切な名称とすること。 関係スキーマに入れる属性名を答える場合, 主キーを表す下線, 外部キーを表す破線の下線についても答えること。
設問1(1):現状の概念データモデル及び関係スキーマについて答えよ。
図1中の欠落しているリレーションシップを補って図を完成させよ。
模範解答

解説
キーワード・論点整理
- 旅行会社と予約のリレーションシップ
- 「旅行会社予約では,客は旅行会社を通じて予約する。旅行会社の予約システムから X 社の予約システムに予約情報が連携され,どの旅行会社での予約かが記録される。」
- 宿泊割引券と宿泊のリレーションシップ
- 「① 会員の宿泊に対して,次回以降の宿泊料金に充当できる宿泊割引券を発行し,郵送する。1回の宿泊で割引券を1枚発行し,泊数に応じて割引金額を変える。」
- 関係スキーマ:宿泊割引券(割引券番号,発行元宿泊番号)
以上の2つが,図1中で欠落しているリレーションシップです。
解答の論理的解説
図1は「現状業務の分析結果」に基づく概念データモデルですが,以下の記述をもとに,対応するエンティティ間の関連を追加する必要があります。
-
【旅行会社—予約】
問題文に「旅行会社予約では,客は旅行会社を通じて予約する。旅行会社の予約システムから X 社の予約システムに予約情報が連携され,どの旅行会社での予約かが記録される。」
とあるため,予約(Reservation)はどの旅行会社(TravelAgency)を通じて行われたかを必ず記録します。
したがって,旅行会社と予約の間に 1対多 のリレーションシップを設定します。 -
【宿泊割引券—宿泊】
問題文に「1回の宿泊で割引券を1枚発行し,泊数に応じて割引金額を変える。」
また関係スキーマで
宿泊割引券(割引券番号,発行元宿泊番号)
と定義されていることから,割引券のサブタイプである「宿泊割引券」(StayDiscountCoupon)は,必ず発行元となる宿泊(Stay)と結びつきます。
したがって,宿泊と宿泊割引券の間に 1対1(または1対多) のリレーションシップを設定します。
追加すべきリレーションシップ一覧
受験者が誤りやすいポイント
- 旅行会社を見落とす
旅行会社から予約へのリレーションは,図1では客室やホテルとの関連に気を取られがちで,見落としやすい箇所です。 - サブタイプとリレーションの混同
割引券→宿泊割引券の ISA(三角形)と,宿泊割引券→宿泊 のリレーションは別物です。サブタイプ化だけで「宿泊との関連が表現済み」と勘違いしないよう注意してください。 - 多対多を許容しない設計方針
問題文に「多対多のリレーションシップは用いない」とあるため,中間エンティティを導入せずに直接 1対多 の関係でモデル化する必要があります。
試験対策まとめ
- 図中で「どの情報が外部キーとして保持されているか」を常にチェックし,対応する概念モデル上のリレーションが抜けていないか確認する。
- 問題文の「業務フローの記述」と「関係スキーマの外部キー定義」は,概念モデルのリレーションを補完する重要な手がかりである。
- サブタイプ(汎化/特化)とリレーションは役割が異なるため,それぞれ区別してモデル化する習慣をつける。
- 多対多を避ける設計方針が明示されている場合は,「中間エンティティの有無」に注目する。
これらのポイントを押さえれば,抜け漏れのない概念データモデル設計が可能になります。
設問1(2):現状の概念データモデル及び関係スキーマについて答えよ。
図2中の(ア)〜(エ)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。
模範解答
ア:客室タイプコード
イ:ホテルコード,客室タイプコード,旅行会社コード,宿泊割引券番号
ウ:ホテルコード,客室番号,宿泊割引券番号,館内施設割引券番号
エ:予約番号
解説
キーワード・論点整理
本問は「図2の(ア)~(エ)に適切な属性を補い,関係スキーマを完成させる」問題です。
現状業務の分析結果に記載された以下の要件から,それぞれのリレーションに必要な外部キーや属性を導きます。
現状業務の分析結果に記載された以下の要件から,それぞれのリレーションに必要な外部キーや属性を導きます。
解答が導かれる理由
以下,問題文の記述を引用しながら説明します。
-
(ア)客室.客室タイプコード
問題文より「(2) 客室はホテルごとに客室番号で識別する。 (3) 客室ごとに客室タイプを設定する。 客室タイプはホテル共通であり, 客室タイプコードで識別する。」
→ 客室ごとに「客室タイプ」を参照できるように,客室リレーションに 客室タイプコード が必要です。 -
(イ)予約.ホテルコード,客室タイプコード,旅行会社コード,宿泊割引券番号
- 宿泊するホテルと客室タイプを指定するため
「1回の予約で, 客は宿泊するホテル, 客室タイプ, 泊数, … を指定する。」
→ ホテルコード,客室タイプコード - 旅行会社予約を扱うため
「旅行会社の予約システムから … どの旅行会社での予約かが記録される。」
→ 旅行会社コード - 予約時前払いで宿泊割引券を利用できるため
「予約時の前払いで利用する場合、 宿泊割引券番号を記録する。」
→ 宿泊割引券番号
- 宿泊するホテルと客室タイプを指定するため
-
(ウ)宿泊.ホテルコード,客室番号,宿泊割引券番号,館内施設割引券番号
- 宿泊した「客室」を識別するため
「(1) 予約有の場合には … 客室を決め、宿泊を記録する。」
→ ホテルコード, 客室番号 - チェックイン/チェックアウト時にクーポンを利用できるため
「チェックイン時の前払い, チェックアウト時の精算で利用する場合, 宿泊割引券番号を記録する。」
→ 宿泊割引券番号
「チェックアウト時の精算で利用する場合、 館内施設割引券番号を記録する。」
→ 館内施設割引券番号
- 宿泊した「客室」を識別するため
-
(エ)予約者宿泊.予約番号
- 「予約有の場合」に検索した予約と宿泊を対応付けるため
「(1) 予約有の場合には該当する予約を検索し、… 宿泊を記録する。」
→ 予約番号 を外部キーに
- 「予約有の場合」に検索した予約と宿泊を対応付けるため
受験者が陥りやすいポイント
- 「客室」リレーションへの ホテルコード の記入漏れ
→ 客室番号はホテル内で一意でも,全ホテル横断では重複し得るため,複合主キーに ホテルコード が必須です。 - 「予約」で 旅行会社コード を入れ忘れる
→ 自社サイト予約/旅行会社予約を区分するだけでなく,「どの旅行会社か」を必ず記録します。 - 割引券番号の扱い
- 予約時に使う 宿泊割引券番号
- 宿泊(チェックイン・チェックアウト時)に使う 宿泊割引券番号,館内施設割引券番号
これらを混同するとどのリレーションにどのクーポンを置くかがあいまいになります。
試験対策ポイント
- ER→第3正規形のリレーション化では,「業務フロー中に検索/記録されるすべての参照キー」を外部キーとしてリレーションに含めること。
- 多対多の関係は中間リレーション(予約者宿泊など)に分解し,「両側の主キー」を外部キーとして持たせる。
- 要件文中の「~を記録する」「~が識別される」は,属性化すべきキーワードのヒントになる。
- クーポンやポイントなどの特典システムは,「いつ,どのタイミングで」「どのトランザクションに紐づくか」を整理してからリレーションに落とし込むとミスが減ります。
設問2(1):現状の業務処理及び制約について答えよ。
割引券発行区分の値が発行対象となる宿泊の条件を表 2 にまとめた。予約有の場合は番号1と2, 予約無の場合は番号3の条件を満たしている必要がある。表2中の(a)〜(d)に入れる適切な字句を答えよ。


模範解答
a:宿泊
b:会員番号
c:予約区分 又は 旅行会社コード
d:自社サイト予約 NULL
解説
1. キーワード・論点整理
2. 解答に至る論理的プロセス
❶ 割引券の発行単位=「宿泊」で考える
問題文「会員特典として, 割引券を発行する。… ① 会員の宿泊に対して, 次回以降の宿泊料金に充当できる宿泊割引券を発行し… 1回の宿泊で割引券を1枚発行し…」
→ 発行判断は予約ではなく最終的に確定した「宿泊」を単位に行う。
従って (a) は “宿泊”。
→ 発行判断は予約ではなく最終的に確定した「宿泊」を単位に行う。
従って (a) は “宿泊”。
❷ 会員にだけ発行する
同じ段落で「会員の宿泊に対して…」と明記。宿泊行に会員番号が入っていなければ非会員扱いとなり発行対象外。
→ (b) は “会員番号”。
→ (b) は “会員番号”。
❸ 旅行会社予約は除外
「旅行会社予約による宿泊は発行対象外となる。」
予約表には
・予約区分(自社サイト予約/旅行会社予約)
・旅行会社コード(旅行会社予約の時だけ値が入る)
のどちらでも判定が可能。従って (c) に当てはまる列は両方とも正解とされている。
予約表には
・予約区分(自社サイト予約/旅行会社予約)
・旅行会社コード(旅行会社予約の時だけ値が入る)
のどちらでも判定が可能。従って (c) に当てはまる列は両方とも正解とされている。
❹ “自社サイト予約” か “NULL” で判定
自社サイト予約の場合
・予約区分 = ‘自社サイト予約’
・旅行会社コード = NULL(旅行会社を介さないため)
上記のいずれかで「旅行会社予約ではない」ことを確認できる。
→ (d) は “自社サイト予約 又は NULL”。
・予約区分 = ‘自社サイト予約’
・旅行会社コード = NULL(旅行会社を介さないため)
上記のいずれかで「旅行会社予約ではない」ことを確認できる。
→ (d) は “自社サイト予約 又は NULL”。
3. 受験者が誤りやすいポイント
4. 試験対策として覚えておくポイント
- 割引やポイントなど「実際にサービス提供が確定した後」に発生するビジネスイベントは、データモデル上も 予約ではなく宿泊(利用実績) にひも付くことが多い。
- 発行・適用条件を表にまとめる問題では、
• 「どのテーブル(エンティティ)の話か」
• 「どの列で真偽判定するか」
を丁寧に切り分ける。 - 旅行会社経由/直販サイト経由の判定は、
• 予約区分の値
• 旅行会社コードが NULL か否か
の2パターンでチェックできる。 - ER 図・関係スキーマ問題では NULL になるケース を想定し、
• 「必ず値が入る列か」
• 「条件判定に NULL が役立つか」
を考える癖を付ける。 - “会員特典” のロジックは必ず「会員番号」でトレースできるように設計される。会員と非会員を区別したいときは、まず会員番号列の有無を確認する。
設問2(2):現状の業務処理及び制約について答えよ。
予約時に割引券を利用する場合の制約条件を表3にまとめた。番号 1〜3 全ての条件を満たしている必要がある。,予約時に割引券を利用する場合の制約条件を表3にまとめた。番号1〜3 全ての条件を満たしている必要がある。表3中の(e)~(j)に入れる適切な字句を答えよ。


模範解答
e:割引券ステータス 又は 割引券区分
f:未利用 又は 宿泊割引券
g:割引券区分 又は 割引券ステータス
h:宿泊割引券 又は 未利用
i:会員番号
j:会員番号
解説
1. キーワードと論点の整理
論点は次の 3 つです。
① 予約時に使えるのは「宿泊割引券」だけで「未利用」でなければならない。
② 異なる会員が保有する割引券を流用できないよう、会員番号が一致している必要がある。
③ 制約条件は「属性名‐属性値」の対で表す──e,f と g,h はセットで考える。
① 予約時に使えるのは「宿泊割引券」だけで「未利用」でなければならない。
② 異なる会員が保有する割引券を流用できないよう、会員番号が一致している必要がある。
③ 制約条件は「属性名‐属性値」の対で表す──e,f と g,h はセットで考える。
2. 解答に至る論理的な理由付け
〔問題文の根拠〕
予約時の前払いで利用する場合、宿泊割引券番号を記録する。1回の予約で1枚を会員本人の予約だけに利用できる。
割引券の状態には未利用, 利用済, 有効期限切れによる失効があり, 割引券ステータスで分類する。
この記述から、予約時に割引券を充当する際の必須条件は以下の 3 点であることが分かります。
以下、順に確認します。
(1) 未利用であること(e,f)
割引券がすでに使われている(利用済)または失効している場合は予約に利用できません。
この状態を判定する属性はリレーション「割引券」にある割引券ステータスです。
したがって
e=割引券ステータス, f=未利用 となります。
この状態を判定する属性はリレーション「割引券」にある割引券ステータスです。
したがって
e=割引券ステータス, f=未利用 となります。
(2) 宿泊割引券であること(g,h)
予約時に使える割引券は “宿泊割引券” のみで、館内施設割引券は対象外です。
割引券の種類を示す属性は割引券区分です。
したがって
g=割引券区分, h=宿泊割引券 となります。
割引券の種類を示す属性は割引券区分です。
したがって
g=割引券区分, h=宿泊割引券 となります。
(3) 会員が一致すること(i,j)
問題文に「会員本人の予約だけに利用できる」と明記されているため、割引券を保有する会員と予約を行う会員は同一でなければなりません。
両者を突き合わせるキーは会員番号です。
したがって
i=会員番号, j=会員番号 となります。
両者を突き合わせるキーは会員番号です。
したがって
i=会員番号, j=会員番号 となります。
3. 受験者が誤りやすいポイント
4. 試験対策として覚えておくポイント
-
区分とステータス
• 「区分」=種類を分類するコード
• 「ステータス」=現在の状態を表すコード
似て非なる概念なので設計時・解答時に混同しないこと。 -
制約条件の表し方
• 「属性名 = ‘固定値’」という形で示す。
• 複数条件がある場合は AND で連結し、論理的に網羅する。 -
会員特典関連の代表的ビジネスルール
• 割引券やポイントは “本人のみ利用可” ルールが定番。
• “未利用”・“有効期限内” チェックは必須。
• 区分やステータスのマスタ化(第 1・2 正規形の保持)を意識。 -
本問のような穴埋め問題の手順
① 空欄に入る 属性か値か をまず判断。
② 対になる属性‐値をセットでチェック。
③ 元の文章・要件定義から直接根拠を探す。
以上を押さえておくと、データモデリング系の設問でつまずきにくくなります。
設問3(1):新規要件に関する概念データモデル及び関係スキーマについて答えよ。
図3中の欠落しているリレーションシップを補って図を完成させよ。なお, 図3にないエンティティタイプとのリレーションシップは不要とする。
模範解答

解説
1. 核心キーワード・論点整理
2. 解答に至る論理的プロセス
2.1 会員ランク ⇔ 会員
【問題文】
(1) 会員ランクにはゴールド, シルバー, ブロンズがあり…
(2) 毎月末に過去1年間の累計泊数に応じて会員の会員ランクを決める。
‐ 会員ランクは “会員” の属性ではなくマスタ。
‐ 1 つの会員ランクに 複数会員 が属し得るが, 会員は 1 つだけ しか選択できない。
→ 1(会員ランク) : N(会員)のリレーションを実線で接続。
‐ 1 つの会員ランクに 複数会員 が属し得るが, 会員は 1 つだけ しか選択できない。
→ 1(会員ランク) : N(会員)のリレーションを実線で接続。
2.2 会員 ⇔ ポイント増減
【問題文】
(10) ポイントの付与, 支払充当, 商品交換及び失効が発生する都度, … をポイント増減として記録する。
‐ “都度” という表現は 会員1人につき増減レコードが何行も 生じることを示す。
→ 1(会員) : N(ポイント増減)。
→ 1(会員) : N(ポイント増減)。
2.3 ポイント増減 ⇔ 付与/失効/支払充当/商品交換
‐ “付与, 失効, 充当, 交換” は4タイプで振る舞いが大きく異なり, かつ増減共通項目と個別項目(例: 商品コード, 個数)がある。
‐ 設計方針(4) により スーパータイプ‐サブタイプ で表現。
‐ 設計方針(4) により スーパータイプ‐サブタイプ で表現。
【ルール確認】
サブタイプが存在する場合…スーパータイプ又はいずれかのサブタイプの適切な方との間に設定する。
‐ 4サブタイプはいずれも 共通キー(会員番号 + ポイント増減連番) を継承。
‐ 三角形 (ISA) で “ポイント増減” を上位, 4枠を下位に接続。
‐ 三角形 (ISA) で “ポイント増減” を上位, 4枠を下位に接続。
2.4 商品 ⇔ 商品交換
【問題文】
(7) 商品ごとに交換に必要なポイント数を決める。…交換時に商品と個数を記録する。
‐ “商品交換” は交換された瞬間の履歴。1レコードにつき 1種類の商品 を指す。
‐ 1つの商品は複数回交換され得る。
→ 1(商品) : N(商品交換)のリレーション。
‐ 設計方針(2)「多対多禁止」にも適合する。
‐ 1つの商品は複数回交換され得る。
→ 1(商品) : N(商品交換)のリレーション。
‐ 設計方針(2)「多対多禁止」にも適合する。
以上を実線と ISA で図示すると模範解答の ER 図になる。
3. 受験者が誤りやすいポイント
4. 試験対策まとめ
- ER 図でタイプが4種類以上に分かれるときは スーパータイプ/サブタイプ を最優先で考える。
- 「マスタ + トランザクション」は試験頻出パターン。
- 片側がほぼ固定行数ならマスタ。
- 「都度記録」「履歴」はトランザクションで 1:N。
- 「多対多を禁止」と指示されたら
- 発生頻度の低い側またはマスタ側に 1、反対側に N を付ける。
- 図に “○” “●” が省略される場合、最低値(0 or 1)は記載しない というだけ。最大値 (1 or N) を把握していれば描ける。
- IPA 午後は “文章→エンティティ→リレーション” を黙読で素早くマッピングできるスキルが必須。
- 主語=エンティティ
- 動詞・助動詞「〜できる」「〜するたび」はリレーションの多重度ヒント
これらのポイントを押さえておけば、本設問のような“線を補う”タイプの問題は短時間で得点源にできます。
設問3(2):新規要件に関する概念データモデル及び関係スキーマについて答えよ。
図4中の(オ)〜(サ)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。
模範解答
オ:必要累計数,ポイント付与率
カ:商品名,ポイント数
キ:ポイント増減区分,ポイント増減数,ポイント増減時刻
ク:有効期限年月日,未利用ポイント数
ケ:失効後メール送付日時
コ:支払充当区分
サ:商品コード,個数
解説
キーワード整理
以下の表に,図4の(オ)~(サ)に補完すべき属性名を整理します。
解答解説
以下,それぞれの属性がなぜ必要か,【問題文】の該当箇所を引用しながら説明します。
(オ)会員ランク:必要累計数, ポイント付与率
【出典】
「(1) 会員ランクにはゴールド, シルバー, ブロンズがあり,それぞれの必要累計泊数及びポイント付与率を決める。」
- 「必要累計泊数」はランク判定の基準となる過去1年の累計泊数を示す属性です。
- 「ポイント付与率」は宿泊料金に乗じてポイントを計算する比率を示します。
- 関係スキーマでは,主キーの後にこれら2つを属性として追加します。
(カ)商品:商品名, ポイント数
【出典】
「(7) ポイントは商品と交換することもでき, これを商品交換と呼ぶ。商品ごとに交換に必要なポイント数を決める。…交換時に商品と個数を記録する。」
- リレーション「商品」には,交換対象の名称を表す「商品名」と,1個あたりに必要なポイント数を表す「ポイント数」を属性として持ちます。
(キ)ポイント増減:ポイント増減区分, ポイント増減数, ポイント増減時刻
【出典】
「(10) ポイントの付与, 支払充当、商品交換及び失効が発生する都度, ポイントの増減区分, 増減数及び増減時刻をポイント増減として記録する。」
- どのような理由で増減したかを示す「ポイント増減区分」
- 増減したポイント数を示す「ポイント増減数」
- 発生日時を示す「ポイント増減時刻」
- これら3つは増減履歴を完全にトレースするため必須です。
(ク)ポイント付与:有効期限年月日, 未利用ポイント数
【出典】
「(5) ポイントを付与した際に, 有効期限年月日及び付与したポイント数を未利用ポイント数の初期値として記録する。」
- 「有効期限年月日」は付与ポイントがいつまで有効かを示します。
- 「未利用ポイント数」はレコード作成時点で残っているポイント数を示し,初期値として付与分と同じ値を設定します。
(ケ)ポイント失効:失効後メール送付日時
【出典】
「(9) 未利用のまま有効期限を過ぎたポイントは失効し…失効後に会員に電子メールで連絡する。…失効後メール送付日時を記録する。」
- 失効通知メールを送信した日時を記録する属性です。
(コ)支払充当:支払充当区分
【出典】
「(6) ポイントは宿泊料金, 館内施設の利用料金の支払に充当でき…これを支払充当と呼ぶ。支払充当では, 支払充当区分 (予約時, チェックイン時, チェックアウト時のいずれか)…を記録する。」
- いつ充当したかを明示する「支払充当区分」が必要です。
(サ)商品交換:商品コード, 個数
【出典】
「(7) …ホテルのフロントで交換することができる。交換時に商品と個数を記録する。」
- 交換した商品を特定する「商品コード」
- 交換数を示す「個数」
- 両者を記録することで,商品交換の明細が得られます。
受験者が誤りやすいポイント
-
メール送付日時の混同
- 失効前通知はポイント付与や失効のタイミングではなく,失効の1か月前に送付するため,関係スキーマへの配置を誤りやすい。
- 図4では「ポイント付与」に「失効前メール送付日時」,「ポイント失効」に「失効後メール送付日時」が既に記載されていることを確認しましょう。
-
増減履歴とのリレーション切り分け
- 「ポイント増減」に格納すべきはあくまで増減の理由・時刻・数値。付与時の有効期限・未利用数は「ポイント付与」に切り分ける点に注意。
-
属性名の表記
- 「必要累計数」とするか「必要累計泊数」とするか迷いやすいですが,設問の指示・模範解答に合わせて表記を統一してください。
試験対策として覚えておくべきポイント
- 新規要件は必ず「現状業務分析結果」と切り分けて読み,関連する箇所だけを参照する。
- 要件文中の「~を記録する」「~を決める」は属性設計の要件。必ず属性名に反映する。
- 履歴管理(増減履歴,メール送信履歴など)は専用リレーションにまとめ,多対多や混在を避ける。
- ER図/リレーションスキーマを読み解く際は,記号(□内文字)やキャプションの「未完成」を見落とさず,補完箇所を的確に把握する習慣を付けること。
設問3(3):新規要件に関する概念データモデル及び関係スキーマについて答えよ。
ポイント利用時の消込みにおいて, 関係 “ポイント付与” の会員番号が一致するインスタンスに対する次の条件について, 表1の用語を用いてそれぞれ20字以内で具体的に答えよ。
(a):消込みの対象とするインスタンスを選択する条件
(b):(a)で選択したインスタンスに対して消込みを行う順序付けの条件
模範解答
(a):未利用ポイント数が0より大きい。
(b):有効期限年月日が近い順
解説
キーワード整理
小問の(a)(b)で問われているポイント消し込みの流れを整理すると、以下の2点が核心となります。
- 消込み対象の選択条件:未使用のポイントのみを対象とする
- 消込み順序の決定条件:有効期限が近いものから順に消込む
解答根拠の引用と論理展開
問題文中、ポイントの消込みに関して次の記述があります。
「(8) 支払充当, 商品交換でポイントが利用される都度, その時点で有効期限の近い未利用ポイント数から利用されたポイント数を減じて, 消し込んでいく。」
この一文から、
- 未利用ポイント数 がゼロより大きい(=残っている)インスタンスだけを消込み対象とする。
- 消込みの順序は、有効期限年月日 がより「近い順」に行う。
ゆえに、
(a) 未利用ポイント数が0より大きい。
(b) 有効期限年月日が近い順。
(a) 未利用ポイント数が0より大きい。
(b) 有効期限年月日が近い順。
となります。
受験者が誤りやすいポイント
- 「ポイント増減」の全インスタンスを見るのではなく、消込み対象はポイント付与のインスタンスのみである点に注意
- フィルタ条件を「ポイント増減数が正のもの」と誤記述しがちだが、正しくは未利用ポイント数で判断
- 並べ替えのキーを「付与日」や「ポイント増減連番」にしてしまう誤り。問題文では「有効期限年月日が近い順」と明示
試験対策として押さえるべき知識
- 未利用ポイント数 はポイント付与時に初期値として設定され、消込みや失効で減少/消失する。
- 消込みの順序は「先に失効するポイントから優先的に使う」という業務ルールであり、ER図や関係スキーマ設計にも直結する。
- 問われている関係(=テーブル)を誤らないよう、設問文の「関係 ‘ポイント付与’ のインスタンス」を正確に把握する。
- 設問で求められる表現は「表1の用語」を使うこと――本問では「未利用ポイント数」「有効期限年月日」「近い順」――を徹底する。