初級シスアド 過去問題 平成14年度 春期 午後(問4)

 
■問4■

 ペンションの空き部屋検索システムに関する次の記述を読んで,設問1,2に答えよ。

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

〔部屋の利用人数と室料〕
 組合に登録されているペンションでは,各部屋の利用人数の上限(以下,上限人数という)を設定している。
 室料は各部屋の1泊当たりの料金であり,次の式で算出される。
     室料=部屋使用料+宿泊料×利用人数
(1)  部屋使用料は部屋ごとに決められており,利用人数にかかわらず一定である。
(2)  宿泊料は1人当たりの金額で,同一ペンション内であれば,どの部屋を利用しても同額である。
 
〔空き部屋検索システム〕
 今回構築するシステムの概要は,次のとおりである。
(1)  部屋情報データベースを備え,ペンション,部屋及び各部屋の空き状況に関する情報を蓄える。
(2)  部屋情報データベースに蓄えられた情報から,閲覧者の指定する条件に適合する空き部屋情報を検索する。
(3)  各部屋の空き状況に関する情報の登録及び予約の受付は,別のシステムによって行う。
 
〔部屋情報データベース〕
 部屋情報データベースのE-R図と構造を,それぞれ図1と図2に示す。図2中の下線は,各表の主キーを示している。

       
 
     

 各ペンションには,それぞれ固有の番号(P番号)が割り振られている。さらに,それぞれのペンションでは,各部屋の部屋番号として,1から順に通し番号が割り振られている。このデータベースには,空き部屋情報として各部屋の空いている日が登録されている。
 別のシステムによって登録及び予約の受付が行われると,その内容はこのデータベースに随時反映される。
 
〔空き部屋の検索〕
(1)  閲覧者が,利用開始日(チェックインの日),利用終了日(チェックアウトの日)及び利用人数を指定する。
(2)  すべてのペンションを対象に,(1)で指定された条件を満たす部屋を検索し,その結果を候補一覧として閲覧者に提示する。ここで,“条件を満たす” とは,ある部屋が利用希望期間を通して空き状態にあり,さらにその上限人数が利用人数以上であることをいう。
(3)  候補一覧は,第1キーを “室料”,第2キーを “上限人数” として,それぞれの昇順に並べ替えて表示する。

 

■設問1■

 図2中の 【   】 に入れる適切な字句を,解答群の中から選べ。

解答群
 ア 宿泊料  イ 宿泊料 ウ 上限人数 エ 上限入数
 オ 年月日  カ 年月日 キ 部屋使用料 ク 部屋使用料
 ケ 利用人数  コ 利用人数

 

■設問2■
 〔空き部屋の検索〕の(2)に関する次の記述中の 【   】 に入れる適切な字句を,解答群の中から選べ。
 
(1) 1 泊の場合
 利用終了日が利用開始日の翌日の場合である。このときは,次のSQL文(以下,空室検索文という)を使って,整列済みの候補一覧を作成することができる。ここで,閲覧者が入力した利用開始日を [利用日],利用人数を [人数] とする。

SELECT X.P番号,ペンション名,Y.部屋番号,部屋名称,上限人数,
       (部屋使用料+宿泊料 * [人数]) AS 室料
FROM 【  e  】 X,【  f  】 Y,【  g  】 Z
WHERE X.P番号 = Y.P番号 AND Y.P番号 = Z.P番号
   AND Y.部屋番号 = Z.部屋番号 AND 年月日 = [利用日]
   AND 上限人数 【  h  】 [人数]
ORDER BY 室料 ASC,上限人数 ASC
 
(2) 連泊の場合
 連泊の場合に整列済みの候補一覧を作成するための手順は,次のとおりである。ここで,中間表1と中間表2は,両者とも “P番号” と “部屋番号” の二つの項目をもつ表として,あらかじめ定義されているものとする。
@  次のSQL文の実行結果を,【  i  】 の初期状態とする。
 SELECT P番号,部屋番号 FROM 部屋表
A  (1)の空室検索文中の [人数] を閲覧者が入力した利用人数とし,[利用日] を利用開始日から【  j  】 まで順に変化させながら,次の(a)〜(c)の処理を繰り返す。
(a) 空室検索文を実行する。
(b) (a)の結果から “P番号” と “部屋番号” の項目だけを取り出し,その結果を中間表2に設定する。
(c) 中間表1の内容を,次のSQL文の実行結果で置き換える。
   SELECT P番号,部屋番号 FROM 中間表1
   WHERE 【  k  】
     (SELECT *
       FROM 中間表2
       WHERE 中間表1.P番号 = 中間表2.P番号
          【  ℓ  】 中間表1.部屋番号 = 中間表2.部屋番号)
B  次のSQL文によって,整列済みの候補一覧を得る。
SELECT X.P番号,ペンション名,X.部屋番号,部屋名称,上限人数,
       (部屋使用料+宿泊料 * [人数]) AS 室料
FROM 【  m  】 X,【  n  】 Y,【  o  】 Z
WHERE X.P番号 = Y.P番号 AND Y.P番号 = Z.P番号
  AND X.部屋番号 = Y.部屋番号
ORDER BY 室料 ASC,上限人数 ASC
 
e〜gに関する解答群
 ア 空き部屋表  イ 部屋表 ウ ペンション表
 
h に関する解答群
 ア =  イ < ウ > エ <= オ >=
 
 i に関する解答群
 ア 中間表1 イ 中間表2
 
 j に関する解答群
 ア 利用終了日の前日  イ 利用終了日 ウ 利用終了日の翌日
 
k ,ℓ に関する解答群
 ア AND  イ OR ウ EXISTS エ NOT EXISTS
 オ IN  カ NOT IN
 
m〜oに関する解答群
 ア 空き部屋表  イ 中間表1 ウ 中間表2
 エ 部屋表  オ ペンション表

■答え■
設問1 : a−ア,b−ウ,c−キ,d−カ (b,c は順不同
設問2 : e−ウ,f−イ,g−ア,h−オ,i−ア,j−ア,k−ウ,ℓ−ア,m−イ**,n−エ**,o−オ
f,g は順不同 **m,n は順不同

初級シスアド講座

初級シスアド 分野別過去問題 初級シスアド 過去問題

SQL講座

セキュリティー情報