【デスペ】令和5年秋午後1問2の解説(データベーススペシャリスト)
このNoteでは「デスペR6春午後1問2」の解説をします。
私はデータベース設計に絞って、デスペに合格しました。
データベース設計の基本は「問題文から仕様を読み取る→スキーマ(表と項目)を作る→ER図(エンティティとリレーション)を作る」です。
今回の問題では、この流れを2回も演習できる良い問題でした。本試験出ても充分高得点を狙える問題です。
ぜひデスペの基礎力を測る・最新の問題への処刑正解力を測るための問題として重宝してくださいね。答えを覚えてでも繰り返し演習する大変価値ある問題です。
このNoteは、私が独学合格した経験と、IT専門学校での授業のノウハウで書いています。合格のお手伝いに少しでもなったら嬉しいです。
それでは始めましょう!
設問1(2)
スキーマを作ってからの方が、ER図のエンティティやリレーションを考えるのが楽なので、解く順番を逆にしますね。
アについて
客室の記述は、13頁1(2)。「客室はホテルごとに客室番号で識別」より、客室(ホテル, 客室番号)。(1)よりホテルコードを使う。
(3)で「客室ごとに客室タイプ」なので項目追加。「客室タイプコードで識別」なので、客室タイプコードが追加。
(4)の館内施設はホテルごとなので、少なくとも客室表には不要。
以上より、客室(ホテルコード, 客室番号, 客室タイプコード)。主キーはホテルコードと客室番号。

ホテルコードはホテル表、客室タイプコードは客室タイプ表がありそうです。よって、外部キーはホテルコード(主キーでもある)と客室タイプコード。
図1を見ると、客室はリレーションが一切ありません。そして「ホテル」表と「客室タイプ」表があります。
ホテル表と客室は1対多。1つのホテルに複数の客室があるはずなので(文章で明記はないですが一般常識で判断)。
客室タイプと客室は1対多。1つの客室タイプ(例えばシングル)に対して、複数の客室があるはずです。
イについて
予約は13頁(4)
(1)より「予約区分」。
(2)より、旅行会社予約の時は旅行会社も記録される。図2を見ると、旅行会社のみの表はないので、予約表で良さそうです。旅行会社は旅行会社の「旅行会社コード」が使えます。
(3)より、「ホテル」(ホテルコード)、「客室タイプ」(客室タイプコード)、「泊数」「客室数」「宿泊人数」「チェックイン予定年月日」。主キーは「予約番号」のようです。この状態では、客室タイプを混合した予約はできなさそうですね。
(4)より、「1室当たりの宿泊料金」が必要
(5)より、「会員番号」が必要。会員でない場合に備え「予約者の氏名」「(予約者の)住所」、これを予約表に入れるのか非会員に関する表を別途設けるかは不明ですが、会員非会員区分という言葉がなかったので一緒でしょう。
以上より、
予約(予約区分, 旅行会社コード, ホテルコード, 客室タイプコード, 泊数, 客室数, 宿泊人数, チェックイン予定年月日, 予約番号, 1室当たりの宿泊料金, 会員番号, 予約者の氏名, 予約者の住所)あたりと目星。
図2に合わせて、予約(予約番号, 予約者の氏名, 住所, 予約区分, チェックイン予定年月日, 泊数, 客室数, 宿泊人数, 1室当たりの宿泊料金, 予約時前払い金額, 会員番号, 旅行会社コード, ホテルコード, 客室タイプコード)。予約時前払い金額は把握してませんでしたが良いでしょう。
よってイは、旅行会社コード, ホテルコード, 客室タイプコード。模範解答には「宿泊割引券番号」が足りませんがまぁこれでとりあえず書いておきます。

ウについて
宿泊は14頁の5。「宿泊番号で識別」なので、主キーは宿泊番号。
他は6~9より見つけていくので、難しいですね。

エについて
予約有宿泊は、6チェックイン(1)。
「客室を決め宿泊を記録する」より、「客室コード」「宿泊番号」を使います。
転記する項目も記述があり「泊数」「宿泊人数」「宿泊料金」。予約から転記なので、予約表を参照するために「予約番号」を外部キーで追加するでしょう。
(2)は予約無なのでスルー。
(3)より「会員番号」を追加。
(4)はスルー。
(5)は宿泊表なのでスルー。
(6)も予約とは無関係なのでスルー。
以上より、予約有宿泊(客室コード, 宿泊番号, 泊数, 宿泊人数, 宿泊料金, 予約番号, 会員番号)。

ウについて(再度)
では、問題文仕様を1~9まで読み終えたので、ウを再度洗い出しましょう。

5:「宿泊番号で識別する」より宿泊番号が主キー(既にある)
6-(1):「客室を決め宿泊を記録する」から、宿泊表の話。客室番号を追加。しかも客室番号はホテルごとなので、ホテルコードも追加。ホテルコードと客室番号の複合キーにします。
6-(1):「泊数, 宿泊人数, 宿泊料金は、予約から転記」より、3項目追加(既にある)
6-(2):予約無の場合ですが、4項目は6-(1)と同じ
6-(3):「会員番号を記録」「予約の会員番号を宿泊に転記」より、会員番号を追加(既にある)
6-(4):予約表の話なのでスルー
6-(5):「宿泊ごとに」より宿泊Eの話。「氏名, 住所を記録」より2項目追加(宿泊者Eに既にある)
6-(6):「チェックイン年月日時刻」は宿泊ごとなので追加(既にある)
7:「チェックアウト年月日時刻」は各個人の宿泊なので宿泊Eに追加(既にある)
8-(1):チェックインは宿泊ごとなので考えます。「チェックアウト時に宿泊料金」「予約時」「チェックイン時に」と支払いタイミングが3つ。予約時は予約Eに「予約時前払い金額」があるので、残り2つを追加(既にある)
8-(2):館内施設の料金の話。既に館内施設利用料金があります
9-(1)①:「会員の宿泊に対して」より考える必要ありそう。でも発行についてなので、宿泊割引券E(発行元宿泊番号がある)と判断。ただし割引券発行区分は既にあります。
9-(1)②:予約時の話なので、予約Eに宿泊券割引券番号を追加するので無関係(空欄イ)。
9-(1)③:チェックインとチェックアウトでの割引券利用なので宿泊割引券番号を追加。
9-(2)①:発行についてなので無関係
9-(2)②:チェックアウト時の話なので、「館内施設割引券番号」を追加。
9-(2)②:「宿泊割引券と併用が可能」より、宿泊割引券番号と館内割引券番号の2項目が必要と確定します。併用できない場合は割引券番号を1項目で足りますから。

その他
得点には関係ないですが、エ(割引券発行対象宿泊)以降のスキーマについても問題文との関係を図にしておきました。

PMIIでは、スキーマは穴埋めどころか、自分で全部書きます。ER図もリレーションだけでなく、エンティティから書きます。
「問題文仕様からスキーマを正確に書き出す設計能力」を、PMIのうちにどんどん鍛えましょう。速く、正確に、そして慎重に。
設問1(1) | 完成したスキーマからER図を完成させる
スキーマの各エンティティ(表)を1つずつ見ていきます。
外部キー、主キーに注目します。
個数対応では、片方を1に固定して相手が1つか複数かを考えます。例えば、「1つの客室タイプは多くの客室に出てくるよな」「1つの客室は1つの客室タイプに属するよね」と考えて「1対多」だなと分かります。
もし「多対多」が現れたら間違いなので考え直してください。第三正規形を満たさないためあり得ません。「多対多」には、必ず「連関エンティティ」が間に入って「1対多」「多対1」にします。


申し訳ありません。「最新問題はXリポストで無料」を取りやめました。最近Xリポストを即削除する悪用が頻発しているためです。システム上できてしまうので違反ではないですが、「当方が割引分をお支払いして無料にしている」と解釈して頂けないようです。一番重要な最新問題だけでも多くの方に活用して頂きたかったですが残念です。善意や作成時間を蔑ろにする方は他サービスをご利用ください。
ここから先は

DB午後1解説(図解が豊富です)
【必ずリストを見てからご購入下さい】 データベーススペシャリスト「午後1」の解決Noteです。 取りこぼさないためのマーキング・スキー…
この記事が参加している募集
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ
