みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

初級シスアド データベース

ペンションの空き部屋検索システムに関する次の記述を読んで、各設問に答えよ。
 Z町ペンション組合では、組合に登録されているペンションを共同のホームページで紹介している。このページの閲覧者から、部屋の空き状況や料金についてもこのページから調べられるようにしてほしいという希望が寄せられた。そこで、組合では空き部屋検索システムを構築することになった。

○部屋の利用人数と室料
 組合に登録されているペンションでは、各部屋の利用人数の上限(以下、上限人数という)を設定している。
 室料は各部屋の1泊当たりの料金であり、次の式で算出される。
   室料=部屋使用料+宿泊料*利用人数
(1)部屋の使用料は部屋ごとに決められており、利用人数にかかわらず一定である。
(2)宿泊料は1人当たりの金額で、同一ペンション内であれば、どの部屋を利用しても同額である。

○空き部屋検索システム
 今回構築するシステムの概要は、次のとおりである。
(1)部屋情報データベースを備え、ペンション、部屋および各部屋の空き状況に関する情報を蓄える。
(2)部屋情報データベースに蓄えられた情報から、閲覧者の指定する条件に適合する空き部屋情報を検索する。
(3)各部屋の空き状況に関する情報の登録および予約の受付は、別のシステムによって行う。

○部屋情報データベースのE-R図と構造を、それぞれ図1と図2に示す。図2中の(P)は、各表の主キーを示している。

図1 部屋情報データベースのE-R図
       ペンション → 部屋 → 空き部屋

図2
  ペンション表
  P番号(P) ペンション名 電話番号 所在地 オーナ a

  部屋表
  P番号(P) 部屋番号(P) 部屋名称 b c

  空き部屋表
  P番号(P) 部屋番号(P) d

 各ペンションには、それぞれ固有の番号(P番号)が割り振られている。さらに、それぞれのペンションでは、各部屋の部屋番号として、1から順に通し番号が割り振られている。このデータベースには、空き部屋情報として各部屋の空いている日が登録されている。
 別のシステムによって登録および予約の受付が行われると、その内容はこのデータベースに随時反映される。

○空き部屋の検索
(1)閲覧者が、利用開始日(チェックインの日)、利用終了日(チェックアウトの日)および利用人数を指定する。
(2)すべてのペンションを対象に、(1)で指定された条件を満たす部屋を検索し、その結果を候補一覧として閲覧者に提示する。ここで、"条件を満たす"とは、ある部屋が利用希望期間を通して空き状態にあり、さらにその上限人数が利用人数以上であることをいう。
(3)候補一覧は、第1キーを"室料"、第2キーを"上限人数"として、それぞれ昇順に並べ替えて表示する。

問1 図2中のa~dに入れる適切な字句を、解答群の中から選べ。
→これはa=宿泊料、b=上限人数、c=部屋使用料、d=年月日(P)と求めることができました。

問2 省略

問3 連泊の場合
 連泊の場合に整列済みの候補一覧を作成するための手順は、次の通りである。ここで、中間表1と中間表2は、両者とも"P番号"と"部屋番号"の2つの項目をもつ表として、あらかじめ定義されているものとする。
【】は語群の中から正解を抜き出したものです。

(1)次のSQL文の実行結果を、【中間表1】の状態とする。
  SELECT P番号,部屋番号 FROM 部屋表

(2)(1)の空室検索文中の[人数]を閲覧者が入力した利用人数とし、[利用日]を利用開始日から【利用終了日の前日】まで順に変化させながら、次の(a)~(c)の処理を繰り返す。
(a)空室検索文を実行する。
(b)(a)の結果から"P番号"と"部屋番号"の項目だけを取り出し、その結果を中間表2に設定する。
(c)中間表1の内容を、次のSQL文の実行結果で書き換える。
SELECT P番号,部屋番号 FROM 中間表1
WHERE 【EXISTS】(SELECT * FROM 中間表2 WHERE 中間表1.P番号=中間表2.P番号【AND】中間表1.部屋番号=中間表2.部屋番号)

(3)次のSQL文によって、整列済みの候補一覧を得る。
SELECT X.P番号,ペンション名,X.部屋番号,部屋名称,上限人数,(部屋使用料+宿泊料*[人数])AS 室料
FROM 【部屋表】X,【中間表1】Y,【ペンション表】Z
WHERE X.P番号=Y.P番号 AND Y.P番号=Z.P番号
 AND X.部屋番号=Y.部屋番号
ORDER BY 室料 ASC,上限人数 ASC

解説には、「抽出した中間表1をもとに、部屋表から部屋名称と上限人数を、ペンション表からペンション名を得ると判断できるので、Yは中間表1、Xは部屋表です。」と書いてありました。
何故、Yは中間表1、Xは部屋表とわかるのでしょうか。

投稿日時 - 2009-02-25 17:33:28

QNo.4748429

すぐに回答ほしいです

質問者が選んだベストアンサー

出典(平成14年 春期 初級システムアドミニストレータ 午後 問04)と問題&解答例は次のURLを参照のこと。
http://情報処理試験.jp/AD14a-pm/t04.html

----------------------------------------
>何故、Yは中間表1、Xは部屋表とわかるのでしょうか。

「Xは中間表1,Yは部屋表」という解答をお勧めしたいです。

設問2 (1) の FROM [ e ] X, [ f ] Y, [ g ] Z
設問2 (2) の FROM [ m ] X, [ n ] Y, [ o ] Z

は,3つの表を結合すればよいので,解答fとgは逆も可,解答mとnは逆も可です。
ただ,ER図からみて「(P番号)はこの2表の間で結合するのが本来のあり方だ」というより良い解答例があるわけです。

以下,解説です。
----------------------------------------
設問2 (2)連泊の場合 (1)
で作られる,初期状態の (i)中間表1 は,予約済/空き部屋かどうかを問わない全部屋の一覧。

設問2 (2)連泊の場合 (2)
を例えば,[利用日]=(2009/02/25,2009/02/26,2009/02/27)と3回繰り返し,初期状態だった中間表1の内容を実行結果で置き換えていく。
最終的に残った中間表1の内容は,3連泊のすべてで空き状態だった部屋の一覧。

つまり,連泊の場合における中間表1の役割は,1泊の場合における空き部屋表に対応するということ。

よって,図1の「空き部屋表」を「中間表1」に置き換えた,連泊の場合のER図は次のとおり。

「ペンション表」
  ↓ 結合キーは(P番号)
「部屋表」
  ↓ 結合キーは(P番号,部屋番号)
「中間表1」

蛇足かも知れないが確認しておくと,これは
設問2 (2)連泊の場合 (3)
のSQL文のWHERE条件に次のように対応する。

「Z ペンション表」
  ↓ Y.P番号 = Z.P番号
「Y 部屋表」
  ↓ X.P番号 = Y.P番号 AND X.部屋番号 = Y.部屋番号
「X 中間表1」

投稿日時 - 2009-02-26 10:02:03

補足

「Xは中間表1,Yは部屋表」、「Xは部屋表,Yは中間表1」のどちらでも可ということでしたが、試験ではどうすれば良いのでしょうか。

投稿日時 - 2009-02-28 19:37:37

お礼

ご回答ありがとうございました。

投稿日時 - 2009-03-04 15:19:11

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>どちらでも可ということでしたが、試験ではどうすれば良いのでしょうか。

順不同解答欄でどちらも正解になります。

投稿日時 - 2009-03-01 00:04:41

お礼

ご回答ありがとうございました。

投稿日時 - 2009-03-04 15:18:44

あなたにオススメの質問