問1 ホテル予約システムに関する次の記述を読んで,設問1〜5に答えよ。   

 A旅行会社では,ホテル予約システムを構築することになった。本システムは,図1に示すように,ホテル予約サーバとそれにネットワークを介して接続される顧客側及びホテル側クライアントから構成される。主な業務は,ホテル側クライアントからホテル予約サーバに登録されたホテルの室情報(以下,室在庫という)に対して,会員登録された顧客による顧客側クライアントからの予約を受け付けることである。
 
 図1 ホテル予約システムの構成
 
本システムで取り扱う業務を表に示す。
 表 ホテル予約システムの取扱業務
クライアント   業 務     機能概要
ホテル側  室在庫登録/変更  ホテル,宿泊日を指定し,室タイプごとに室在庫を登録する。また,室在庫の登録変更を行う。
予約一覧表出力  ホテル,宿泊日を指定し,予約されている室在庫,顧客,料金合計なとの一覧表を出力する。
料金登録  ホテルを指定し,シーズン,室タイプごとに室料金を設定する。
顧客側  ホテル検索/予約  地域,地区,宿泊日,室タイプ,室数を指定し,ホテルの検索を行う。また,検索されたホテルの一つを指定して,部屋の予約を行う。
予約内容照会/取消し  顧客の予約している内容を表示する。また,その予約の取消しを行う。
会員登録/変更/削除  顧客情報を入力し、会員の登録を行う。また,その顧客情報の変更,削除を行う。

本システムにおける前提条件を次に示す。
・室在庫による室数の在庫管理を行う。すなわち,ホテル予約は空室の数が要求室数以上の場合だけ可能とし,予約/取消しの実行によって空室の数を減/増させる。
・室タイプは,シングル,ツイン,トリプル,スイートの4種類とする。
・シーズンは,オフ,ミドル,オンの3種類とし,宿泊日によってどれかに決まる。
・室料金は,ホテル,室タイプ,シーズンごとに設定される,1室1泊当たりの料金とする。
・料金合計は,室数×室料金で算出され,割引は考えない。
・会員登録されている顧客だけがホテル予約を実行可能であり,予約している顧客の会員削除は不可とする。
 なお,クライアント操作者の認証,各業務の取扱期間,室料金の改定、発券及び決済に関しては,この問題の範囲外とする。
 取扱業務の画面,帳票例を図2〜4に示す。図3も,図2の凡例に従う。
室在庫登録/変更
ホテルコード:
1234
ホテル名: ホテル稚内  地域: 北海道  地区: 稚内
宿泊日
2001
7
20
  
シングル  ツイン  トリプル  スイート
現在 予約済室数        −         −         −         − 
登録室数        −         −         −         − 
登録/ 変更 室数
120
60
 
5
  
    
 
登録OK    シングル  ツイン  トリプル  スイート
予約済室数     0         0        −       0   
登録室数    120       60       −        5   
 
 
 凡例
 
:入力エリア
 
:候補から選択して入力するエリア
       :入力された内容に応じて出力される表示エリア
 :どれか一つを選択するボタン
:実行ボタン
の上側画面の登録実行,検索実行,予約実行の実行ボタンを
クリックすると, の下側画面が表示される。
図2 室在庫登録/変更画面例
 
図3 ホテル検索/予約画面例
ホテル検索/予約
地域:
北海道
地区:
稚内
宿泊日:
2001
7
20
室タイプ:
ツイン
室数:
2
ホテル名 室料金 空室状況
  ホテル稚内 ¥ 18,000  満室 
北の国ホテル ¥ 15,000 空室有り
ホテル野寒布 ¥ 17,000 空室有り
予約完了
予約番号:  23456 
会員番号:  3456       情報太郎   様 
宿泊日:  2001    7   20 
ホテル  北の国ホテル 
室タイプ  ツイン  室数:  2 
室料金: ¥15,000 料金合計: ¥30,000
 
図4 予約一覧表出力例
予約一覧表 2001年7月10日現在
ホテルコード:  1234  ホテル名:  ホテル稚内  地域:  北海道  地区:  稚内 
宿泊日:  2001    7   15 
予約番号 室タイプ 室数 会員番号 氏名 料金合計
45678 シングル 1 7890 情報次郎 ¥12,000
56789 シングル 2 8901 システム花子 ¥24,000
67890 ツイン 1 9012 開発三郎 ¥18,000
 
  
                                 属性名の下線は主キーを示す。
図5 E-R図
 
 ここでは,ホテル予約サーバにおいて,E-R図に合わせてエンティティ名を表名, 属性名を列名にして適切なデータ型で表定義した関係データベースによってデータをもつことにする。クライアントからの各業務要求に対する処理プログラムでは,ホスト言語による埋込みSQLを用いてデータを処理することにする。
 
設問1
図5のE-R図中の
b
に入れる適切な属性名を答えよ。
設問2 SQLによる表定義において,次の整合性制約を設定することで,既にホテルを予約している顧客に対し会員削除を行うことを防ぐことにする。
次の記述中の
f
に入れる適切な字句を答えよ。
表の
列について,
表に対する
f
を設定する。
設問3 指定されたホテルコード及び宿泊日について,図4に示す予約一覧表を作成するためのSQLの問合せ指定を,次に示す。
記述中の
に入れる適切な字句又は式を答えよ。
なお,“:XXX”はクライアントから指定された”]]]”についてのデータを格納しているホスト変数を表すものとする。
 
SELECT 予約.予約番号,予約.室タイプ,予約.予約室数,予約.会員番号,会員.氏名,
FROM 予約,会員,料金,カレンダ
WHERE 予約.ホテルコード=:ホテルコード
AND 予約.宿泊日 =:宿泊日
AND  
h
AND 料金.ホテルコード =:ホテルコード
AND 料金.室タイプ=予約.室タイプ
AND カレンダ.宿泊白 =:宿泊日
AND  
 
設問4
連泊を取り扱うため,ホテル検索/予約画面に泊数の入力エリアを追加し,1回の予約操作(一つの予約番号)でホテル,室タイプ,室数がすべて同一の複数宿泊日の予約をできるようにしたい。そのため,図5のE-R図中の“予約”エンティティを,1件の予約に対応する“予約”と各宿泊日に対応する“予約明細”の二つに分割し,属性をその二つに分配する。それぞれのエンティティに分配する適切な属性名を凡例に従って記入し,E-R図の関連する部分を完成させよ。
なお,室料金は各宿泊日ごとにそのシーズンのものを適用し,必要のない冗長なデータはもたないようにする(第2正規形)。
設問5
設問4の仕様変更後のホテル予約処理プログラムにおいて,予約実行ボタンが押されたときのデータ更新処理の流れを図6に示す。このプログラムでは,室在庫の表から導かれるカーソルを図7に示すように宣言しておき,複数宿泊日の処理をカーソル操作で行う。
 このプログラムでは,複数のデータを更新することになるが,複数クライアントから同時に並行して要求された場合や処理途中でシステムに異常が発生した場合においてもデータ更新の整合性を保つために,関係データベースのトランザクション管理機能を利用する。この機能によってトランザクションは,プログラムの開始時に自動的に開始されSQLのCOMMIT文又はROLLBACK文の実行時に区切られ,その間に行ったデータ更新が確定又は取り消される。
 なお,ホテル検索処理から予約処理の前までの間はデータのロックを行わないので,検索処理時に空室があったホテルでも,予約処理時に再度空室があることを確認する必要がある。また,COMMIT文又はROLLBACK文を実行するとカーソルのCLOSEも自動的に実行される。
 連泊の予約においては,すべての宿泊目について予約可能な場合だけ予約を実行し,それ以外の場合には室在庫などのデータに影響を残さないようにする。
図6 予約実行ボタンが押されたときのデータ更新処理の流れ
 
DECLARE  カーソル室在庫 CURSOR
FOR SELECT *
WHERE ホテルコード =:ホテルコード
AND 室タイプ=:室タイプ
AND
FOR UPDATE;
図7 カーソルの宣言
 
(1)図6に示す予約実行ボタンが押されたときのデータ更新処理の流れ中の
j
n
に入れる適切な字句を
解答群から選び記号で答えよ。
解答群
ア COMMIT
イ ROLLBACK
ウ カーソルからのFETCH
エ カーソルのOPEN
オ 室在庫へのINSERT
カ 予約へのINSERT
キ 予約へのUPDATE
ク 予約明細へのINSERT
ケ 予約明細へのUPDATE
(2)図7に示すカーソルの宣言中の
に入れる適切な字句又は式を答えよ。
ただし,ホスト変数“:宿泊日F”及び“:宿泊日T”が使用できる。これらのホスト変数は.データベース上の“宿泊日”と同じDATE型であり,それぞれ指定された最初の宿泊日及び最後の宿泊日(最初の宿泊日+泊数−1日)を表している。
 
 解答