 |
属性名の下線は主キーを示す。 |
図5 E-R図 |
|
ここでは,ホテル予約サーバにおいて,E-R図に合わせてエンティティ名を表名, 属性名を列名にして適切なデータ型で表定義した関係データベースによってデータをもつことにする。クライアントからの各業務要求に対する処理プログラムでは,ホスト言語による埋込みSQLを用いてデータを処理することにする。 |
|
設問1 |
図5のE-R図中の |
|
, |
|
に入れる適切な属性名を答えよ。 |
|
設問2 |
SQLによる表定義において,次の整合性制約を設定することで,既にホテルを予約している顧客に対し会員削除を行うことを防ぐことにする。 |
|
|
|
|
設問3 |
指定されたホテルコード及び宿泊日について,図4に示す予約一覧表を作成するためのSQLの問合せ指定を,次に示す。 |
|
|
|
なお,“:XXX”はクライアントから指定された”]]]”についてのデータを格納しているホスト変数を表すものとする。 |
|
|
|
SELECT 予約.予約番号,予約.室タイプ,予約.予約室数,予約.会員番号,会員.氏名, |
|
|
|
FROM 予約,会員,料金,カレンダ
WHERE 予約.ホテルコード=:ホテルコード
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 室タイプ=:室タイプ |
|
FOR UPDATE; |
|
|
図7 カーソルの宣言 |
|
|
|
(1)図6に示す予約実行ボタンが押されたときのデータ更新処理の流れ中の |
|
〜 |
|
に入れる適切な字句を |
|
|
解答群から選び記号で答えよ。 |
解答群 |
|
ア COMMIT
イ ROLLBACK
ウ カーソルからのFETCH
エ カーソルのOPEN
オ 室在庫へのINSERT
カ 予約へのINSERT
キ 予約へのUPDATE
ク 予約明細へのINSERT
ケ 予約明細へのUPDATE |
|
(2)図7に示すカーソルの宣言中の |
|
, |
|
に入れる適切な字句又は式を答えよ。 |
|
|
ただし,ホスト変数“:宿泊日F”及び“:宿泊日T”が使用できる。これらのホスト変数は.データベース上の“宿泊日”と同じDATE型であり,それぞれ指定された最初の宿泊日及び最後の宿泊日(最初の宿泊日+泊数−1日)を表している。 |
|
|
|
解答 |