初級シスアド データベース
ペンションの空き部屋検索システムに関する次の記述を読んで、各設問に答えよ。
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は部屋表とわかるのでしょうか。