令和4年度 秋期 データベーススペシャリスト試験 午後II 問題 問1 宿泊管理システムの分析データ抽出と客室稼働率の異常値対応
テクノロジデータベース
学習ガイド
ホテル運営会社の宿泊管理システムから、マーケティング用の分析データを抽出する業務を扱う問題です。業務ルールの適否判定、相関副問合せやウィンドウ関数を使ったSQLの完成、客室稼働率の異常値の原因調査、貸会議室業務に伴うテーブル構造と移行手順の見直しまで、データベーススペシャリストが実務で行う一連の流れを追います。
この記事で押さえる論点
- 概念データモデルと関係スキーマから、業務ルールの想定が正しいか(○/×)を参照するエンティティタイプとともに判定できる
- COUNT(DISTINCT)・EXISTSによる相関副問合せ・NTILEなどのウィンドウ関数を使った問合せの空欄を埋め、試験データで結果を予測できる
- 客室稼働率が100%を超える異常値の原因を、貸会議室の客室タイプと客室の多対多の関係から推測できる
- 移行手順とトリガーの組合せで起きる無限ループなどの問題を見抜き、テーブル構造と手順の変更を設計できる
出題情報
- 出題
- 2022(R4)秋 データベーススペシャリスト 午後II 問1
- 配点
- 100点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
長年運用を続けたデータベースは,開発時の論理モデルから逸脱したデータをテーブル構造の変更なしに格納していることがある。 本問では,宿泊施設の予約業務における分析データ抽出を題材として,データ設計後の論理モデルを理解・検証する能力,問合せを設計・試験する能力,データの異常を調査し修正する能力,継続的な改善をデータベース領域で実践する能力を問う。
問1では,宿泊施設の予約業務における分析データ抽出を題材に,データベースの実装・運用について出題した。全体として正答率は平均的であった。
問題本文
データベースの実装・運用に関する次の記述を読んで,設問に答えよ。
D社は,全国でホテル,貸別荘などの施設を運営しており,予約管理,チェックイン及びチェックアウトに関する業務に,5年前に構築した宿泊管理システムを使用している。データベーススペシャリストのBさんは,企画部門からマーケティング用の分析データ(以下,分析データという)の提供依頼を受けてその収集に着手した。
〔分析データ収集〕
- 分析データ提供依頼
企画部門からの分析データ提供依頼の例を表1に示す。表1中の指定期間には分析対象とする期間の開始年月日及び終了年月日を指定する。

図の説明テキスト
| 依頼番号 | 依頼内容 |
|---|---|
| 依頼 1 | 施設ごとにリピート率を抽出してほしい。リピート率は,累計新規会員数に対する指定期間内のリピート会員数の割合(百分率)である。累計新規会員数は指定期間終了年月日以前に宿泊したことのある会員の総数,リピート会員数は過去 1 回以上宿泊し,かつ,指定期間内に 2 回目以降の宿泊をしたことのある会員数である。リピート会員がいない施設のリピート率はゼロにする。 |
| 依頼 2 | 会員を指定期間内の請求金額の合計値を基に上位から 5 等分に分類したデータを抽出してほしい。 |
| 依頼 3 | 客室の標準単価と客室稼働率との関係を調べるために,施設コード,標準単価及び客室稼働率を抽出してほしい。客室稼働率は,指定期間内の予約可能な客室数に対する同期間内の予約中又は宿泊済の客室数の割合(百分率)である。 |
- 宿泊管理業務の概要
宿泊管理システムの概念データモデルを図1に,関係スキーマを図2に,主な属性の意味・制約を表2に示す。宿泊管理システムでは,図2中の関係“予約”,“会員予約”及び“非会員予約”を概念データモデル上のスーパータイプである“予約”にまとめて一つのテーブルとして実装している。
Bさんは,宿泊管理業務への理解を深めるために,図1,図2,表2を参照して,表3の業務ルール整理表を作成した。表3では,Bさんが想定する業務ルールの例が,図1,図2,表2に反映されている業務ルールと一致しているか否かを判定し,一致欄に“○”(一致)又は“×”(不一致)を記入する。エンティティタイプ欄には,判定時に参照する一つ又は複数のエンティティタイプ名を記入する。リレーションシップを表す線及び対応関係にゼロを含むか否かの区別によって適否を判定する場合には,リレーションシップの両端のエンティティタイプを参照する。

図の説明テキスト
図1 宿泊管理システムの概念データモデル。
大きく「マスター領域」と「トランザクション領域」に分かれている。マスター領域には「会員」「価格区分」「客室タイプ」「施設」「施設客室タイプ」「プラン」「プラン明細」「客室在庫」「客室」「オプション」「客室状況」のエンティティが含まれる。トランザクション領域には「会員予約」「非会員予約」「予約」「オプション予約」「宿泊」「オプション利用」「宿泊者」「請求」「請求明細」のエンティティが含まれる。エンティティ間はリレーションシップ(黒丸や白丸、矢印など)で接続されており、「予約」エンティティは「会員予約」と「非会員予約」のスーパータイプとして表現されているなどの詳細な構造が示されている。

図の説明テキスト
図2 宿泊管理システムの関係スキーマ(一部省略)
枠内に以下の関係スキーマが定義されている。
施設 (施設コード, 施設区分, 施設名, 住所, 電話番号, …)
客室タイプ (客室タイプコード, 客室タイプ名, 定員, 階数, 部屋数, 間取り, 面積, ペット同伴可否, 備考, …)
価格区分 (価格区分コード, 価格区分名, 標準単価, 価格設定規則)
施設客室タイプ (施設コード, 客室タイプコード, 価格区分コード)
客室 (施設コード, 客室タイプコード, 客室番号, 禁煙喫煙区分, 客室状態, 備考)
客室状況 (施設コード, 客室番号, 年月日, 予約可否)
客室在庫 (施設コード, 客室タイプコード, 禁煙喫煙区分, 年月日, 予約可能数, 割当済数)
プラン (施設コード, プランコード, プラン名, チェックイン時刻, チェックアウト時刻, 開始年月日, 終了年月日, 朝食有無, 夕食有無, 禁煙喫煙区分, 備考)
プラン明細 (施設コード, プランコード, 客室タイプコード, 利用料金, 連泊割引率)
会員 (会員番号, 氏名, カナ氏名, メールアドレス, 電話番号, 生年月日, 住所, …)
オプション (施設コード, オプション番号, オプション名, 単価, …)
予約 (施設コード, 予約番号, プランコード, 客室タイプコード, 予約状態, 会員予約区分, 当日予約フラグ, 利用開始年月日, 泊数, 人数, 客室数, キャンセル年月日, …)
会員予約 (施設コード, 予約番号, 会員番号)
非会員予約 (施設コード, 予約番号, 氏名, カナ氏名, メールアドレス, 電話番号, 住所)
オプション予約 (施設コード, 予約番号, オプション予約明細番号, オプション番号, 利用数, …)
宿泊 (施設コード, 宿泊番号, 客室番号, 予約番号, 人数, チェックイン年月日, チェックアウト年月日)
宿泊者 (施設コード, 宿泊番号, 明細番号, 氏名, カナ氏名, 住所, 電話番号, 前泊地, 後泊地)
オプション利用 (施設コード, 宿泊番号, オプション利用番号, オプション番号, 利用数, 請求番号, 請求明細番号)
請求 (請求番号, 施設コード, 宿泊番号, 宿泊料金, オプション利用料金, 請求合計金額)
請求明細 (請求番号, 請求明細番号, 請求金額)

図の説明テキスト
表2 主な属性の意味・制約
| 属性名 | 意味・制約 |
|---|---|
| 施設コード | 施設を識別するコード(3桁の半角英数字) |
| 施設区分 | 'H'(ホテル),'R'(貸別荘) |
| 客室タイプコード | ホテルはシングル,ツインなど,貸別荘はテラスハウス,グランピングなど客室の構造,定員などによる分類である。 |
| 標準単価,価格設定規則 | 標準単価は,各施設が利用料金を決める際に基準となる金額,価格設定規則は,その際に従うべきルールの記述である。 |
| 予約可否 | 'Y'(予約可),'N'(修繕中) |
| 予約可能数,割当済数 | 予約可能数は,客室状況の予約可否が 'Y' の客室数で,手動で設定することもある。割当済数は,予約に割り当てられた客室数の合計である。 |
| 予約状態 | '1'(予約中),'2'(宿泊済),'9'(キャンセル済) |
| 会員予約区分 | '1'(会員予約),'2'(非会員予約) |
| オプション番号 | 施設ごとに有償で提供する設備,物品,サービスを識別する番号である。 |
| 客室状態 | '1'(準備中),'2'(チェックイン可),'3'(チェックイン済),'4'(チェックアウト) |

図の説明テキスト
表3 業務ルール整理表(未完成)
| 項番 | 業務ルールの例 | エンティティタイプ | 一致 |
|---|---|---|---|
| 1 | 施設ごと客室タイプごとに価格区分を設定し,価格区分ごとに標準単価を決めている。客室は施設ごとに一意な客室番号で識別する。 | 施設,客室タイプ,価格区分,施設客室タイプ,客室 | ○ |
| 2 | 全施設共通のプランがある。 | プラン | a |
| 3 | 会員は,予約時に登録済の会員番号を提示すれば氏名,住所などの提示を省略できる。 | 会員,会員予約 | b |
| 4 | 同一会員が,施設,プラン,客室タイプ,利用開始年月日が全て同じ複数の予約を取ることはできない。 | 会員,予約 | c |
| 5 | 予約のない宿泊は受け付けていない。飛び込みの場合でも当日の予約手続を行った上で宿泊を受け付ける。 | 予約,宿泊 | d |
| 6 | 連泊の予約を受け付ける場合に,連泊中には同じ客室になるように在庫の割当てを行うことができる。 | 予約 | e |
| 7 | 予約の際にはプラン及び客室タイプを必ず指定する。一つの予約で同じ客室タイプの複数の客室を予約できる。 | ア | f |
| 8 | 宿泊時には1名以上の宿泊者に関する情報を記録しなければならない。 | イ | ○ |
- 問合せの設計
Bさんは,表1の依頼1〜依頼3の分析データ抽出に用いる問合せの処理概要及び SQL 文をそれぞれ表4~表6 に整理した。hv1, hv2 はそれぞれ指定期間の開始年月日,終了年月日を表すホスト変数である。問合せ名によって,ほかの問合せの結果行を参照できるものとする。

図の説明テキスト
表4 依頼1の分析データ抽出に用いる問合せ(未完成)
| 問合せ名 | 処理概要(上段)と SQL 文(下段) |
|---|---|
| R1 | チェックイン年月日が指定期間の終了日以前の宿泊がある会員数を数えて施設ごとに累計新規会員数を求める。 SELECT A.施設コード, ウ AS 累計新規会員数 FROM 宿泊 A INNER JOIN 予約 B ON A.施設コード = B.施設コード AND A.予約番号 = B.予約番号 WHERE B.会員予約区分 = '1' AND A.チェックイン年月日 <= CAST(:hv2 AS DATE) GROUP BY A.施設コード |
| R2 | チェックイン年月日が指定期間内の宿泊があり,指定期間にかかわらずその宿泊よりも前の宿泊がある会員数を数えて施設ごとにリピート会員数を求める。 SELECT A.施設コード, ウ AS リピート会員数 FROM 宿泊 A INNER JOIN 予約 B ON A.施設コード = B.施設コード AND A.予約番号 = B.予約番号 WHERE B.会員予約区分 = '1' AND A.チェックイン年月日 BETWEEN CAST(:hv1 AS DATE) AND CAST(:hv2 AS DATE) AND エ (SELECT * FROM 宿泊 C INNER JOIN 予約 D ON C.施設コード = D.施設コード AND C.予約番号 = D.予約番号 WHERE A.施設コード = C.施設コード AND オ AND カ ) GROUP BY A.施設コード |
| R3 | R1, R2 から施設ごとのリピート率を求める。 SELECT R1.施設コード, 100 * キ AS リピート率 FROM R1 LEFT JOIN R2 ON R1.施設コード = R2.施設コード |

図の説明テキスト
表5 依頼2の分析データ抽出に用いる問合せ
| 問合せ名 | 処理概要(上段)と SQL 文(下段) |
|---|---|
| T1 | 会員別に指定期間内の請求金額を集計する。 SELECT C.会員番号, SUM(A.請求合計金額) AS 合計利用金額 FROM 請求 A INNER JOIN 宿泊 B ON A.施設コード = B.施設コード AND A.宿泊番号 = B.宿泊番号 INNER JOIN 予約 C ON B.施設コード = C.施設コード AND B.予約番号 = C.予約番号 WHERE B.チェックイン年月日 BETWEEN CAST(:hv1 AS DATE) AND CAST(:hv2 AS DATE) AND C.会員予約区分 = '1' GROUP BY C.会員番号 |
| T2 | T1 から会員を5等分に分類して会員ごとに階級番号を求める。 SELECT 会員番号, NTILE(5) OVER (ORDER BY 合計利用金額 DESC) AS 階級番号 FROM T1 |

図の説明テキスト
表6 依頼3の分析データ抽出に用いる問合せ
| 問合せ名 | 処理概要(上段)とSQL文(下段) |
|---|---|
| S1 | 予約から利用開始年月日が指定期間内に含まれる予約中又は宿泊済の行を選択し,施設コード,価格区分コードごとに客室数を集計して累計稼働客室数を求める。 SELECT A.施設コード, B.価格区分コード, SUM(A.客室数) AS 累計稼働客室数 FROM 予約 A INNER JOIN 施設客室タイプ B ON A.施設コード = B.施設コード AND A.客室タイプコード = B.客室タイプコード WHERE A.利用開始年月日 BETWEEN CAST(:hv1 AS DATE) AND CAST(:hv2 AS DATE) AND A.予約状態 <> '9' GROUP BY A.施設コード, B.価格区分コード |
| S2 | 客室状況から年月日が指定期間内に含まれる予約可能な客室の行を選択し,施設コード,価格区分コードごとに行数を数えて累計予約可能客室数を求める。 SELECT A.施設コード, C.価格区分コード, COUNT(A.客室番号) AS 累計予約可能客室数 FROM 客室状況 A INNER JOIN 客室 B ON A.施設コード = B.施設コード AND A.客室番号 = B.客室番号 INNER JOIN 施設客室タイプ C ON B.施設コード = C.施設コード AND B.客室タイプコード = C.客室タイプコード WHERE A.予約可否 = 'Y' AND A.年月日 BETWEEN CAST(:hv1 AS DATE) AND CAST(:hv2 AS DATE) GROUP BY A.施設コード, C.価格区分コード |
| S3 | S1, S2 及び価格区分から施設コード, 価格区分コードごとに標準単価, 客室稼働率を求める。 SELECT A.施設コード, A.価格区分コード, C.標準単価, 100 * COALESCE(B.累計稼働客室数,0) / A.累計予約可能客室数 AS 客室稼働率 FROM S2 A LEFT JOIN S1 B ON A.施設コード = B.施設コード AND A.価格区分コード = B.価格区分コード INNER JOIN 価格区分 C ON A.価格区分コード = C.価格区分コード |
4. 問合せの試験
Bさんは,各SQL文の実行によって期待どおりの結果が得られることを確認する試験を実施した。Bさんが作成した,表5のT2の試験で使用するT1のデータを表7に,T2の試験の予想値を表8に示す。

図の説明テキスト
表7 T2の試験で使用するT1のデータ
| 会員番号 | 合計利用金額 |
|---|---|
| 100 | 50,000 |
| 101 | 42,000 |
| 102 | 5,000 |
| 103 | 46,000 |
| 104 | 25,000 |
| 105 | 8,000 |
| 106 | 5,000 |
| 107 | 12,000 |
| 108 | 17,000 |
| 109 | 38,000 |

図の説明テキスト
表8 T2の試験の予想値(未完成)
| 会員番号 | 階級番号 |
|---|---|
| 100 | 1 |
| 101 | |
| 102 | |
| 103 | |
| 104 | |
| 105 | |
| 106 | |
| 107 | |
| 108 | |
| 109 |
5. 問合せの実行
Bさんは,実データを用いて,2022-09-01から2022-09-30を指定期間として表4〜表6のSQL文を実行して結果を確認したところ,表6の結果行を反映した図3の標準単価と客室稼働率の関係(散布図)に客室稼働率100%を超える異常値が見られた。

図の説明テキスト
図3 標準単価と客室稼働率の関係(散布図)
横軸は「標準単価(円)」で、0から120,000まで20,000刻みで目盛りが振られている。縦軸は「客室稼働率(%)」で、0から140まで20刻みで目盛りが振られている。多数のデータポイントがプロットされており、標準単価が10,000円〜40,000円で客室稼働率が50%〜100%の範囲に密集している。特徴的な点として、標準単価20,000円未満のところで客室稼働率が120%に達している異常値が1点存在する。標準単価が60,000円を超えると、客室稼働率は概ね40%〜70%の間に分布している。
〔異常値の調査・対応〕
- 異常値発生原因の調査手順
Bさんは,次の(1)〜(3)の手順で調査を行った。
(1) ①S3のSQL文を変更して再度問合せを実行し,異常値を示している施設コード,価格区分コードの組だけを求める。
(2) (1)で求めた施設コード,価格区分コードについて,S1, S2のSQL文を変更して,施設コード,価格区分コード,客室タイプコードごとの累計稼働客室数,累計予約可能客室数をそれぞれ求める。
(3) (2)の結果から累計稼働客室数,累計予約可能客室数のいずれかに異常が認められたら,その集計に関連するテーブルの行を抽出する。
- 異常値発生原因の調査結果
調査手順の(1)から施設コード '103',価格区分コード 'C4' を,調査手順の(2)から表9,表10を得た。調査手順の(3)では,累計予約可能客室数に異常があると判断して表11~14を得た。

図の説明テキスト
表9 (2)の S1 で得た結果行
| 施設コード | 価格区分コード | 客室タイプコード | 累計稼働客室数 |
|---|---|---|---|
| 103 | C4 | 71 | 5 |
| 103 | C4 | 72 | 10 |
| 103 | C4 | 73 | 14 |
| 103 | C4 | 74 | 7 |

図の説明テキスト
表10 (2)で得た S2 の結果行
| 施設コード | 価格区分コード | 客室タイプコード | 累計予約可能客室数 |
|---|---|---|---|
| 103 | C4 | 71 | 30 |

図の説明テキスト
表11 (3)で得た “客室状況” テーブルの行(一部省略)
| 施設コード | 客室番号 | 年月日 | 予約可否 |
|---|---|---|---|
| 103 | 1050 | 2022-09-01 | Y |
| 103 | 1050 | 2022-09-02 | Y |
| ⋮ | ⋮ | ⋮ | ⋮ |
| 103 | 1050 | 2022-09-30 | Y |

図の説明テキスト
表12 (3)で得た “客室” テーブルの行(一部省略)
| 施設コード | 客室タイプコード | 客室番号 | … |
|---|---|---|---|
| 103 | 71 | 1050 | … |

図の説明テキスト
表13 (3)で得た“施設客室タイプ”テーブルの行
| 施設コード | 客室タイプコード | 価格区分コード |
|---|---|---|
| 103 | 71 | C4 |
| 103 | 72 | C4 |
| 103 | 73 | C4 |
| 103 | 74 | C4 |

図の説明テキスト
表14 (3)で得た“客室タイプ”テーブルの行(一部省略)
| 客室タイプコード | 客室タイプ名 | 定員 | ... |
|---|---|---|---|
| 71 | 貸会議室タイプ A 9 時~11 時 | 25 | ... |
| 72 | 貸会議室タイプ A 11 時~13 時 | 25 | ... |
| 73 | 貸会議室タイプ A 13 時~15 時 | 25 | ... |
| 74 | 貸会議室タイプ A 15 時~17 時 | 25 | ... |
異常値発生原因の推測
Bさんは,調査結果を基に,施設コード‘103’の施設で異常値が発生する状況を次のように推測した。
・客室を会議室として時間帯に区切って貸し出している。
・客室タイプに貸会議室のタイプと時間帯とを組み合わせて登録している。一つの客室(貸会議室)には時間帯に区切った複数の客室タイプがあり,客室と客室タイプとの間に事実上多対多のリレーションシップが発生している。
・②これを S2 の SQL 文によって集計した結果,累計予約可能客室数が実際よりも小さくなり,客室稼働率が不正になった。施設へのヒアリング
該当施設の管理者にヒアリングを行い,異常値の発生原因は推測どおりであることを確認した。さらに,貸会議室の運用について次の説明を受けた。
・客室の一部を改装し,会議室として時間貸しする業務を試験的に開始した。
・貸会議室は,9時〜11時,11時〜13時,13時〜15時のように1日を幾つかの連続する時間帯に区切って貸し出している。
・貸会議室ごとに,定員,価格区分を決めている。定員,価格区分は変更することがある。
・宿泊管理システムの客室タイプに時間帯を区切って登録し,客室タイプごとに予約可能数を設定している。さらに,貸会議室利用を宿泊として登録することで,宿泊管理システムを利用して,貸会議室の在庫管理,予約,施設利用,及び請求の手続を行っている。
・貸会議室は全て禁煙である。
・1回の予約で受け付ける貸会議室は1室だけである。
・音響設備,プロジェクターなどのオプションの予約,利用を受け付けている。
・一つの貸会議室の複数時間帯の予約を受けることもある。現在は時間帯ごとに異なる予約を登録している。貸会議室の業務を拡大する予定なので,1回の予約で登録できるようにしてほしい。
- 対応の検討
(1) 分析データ抽出への対応
Bさんは,③表6中のS2の処理概要及びSQL文を変更することで,異常値を回避して施設ごとの客室稼働率を求めることにした。
(2) 異常値発生原因の調査で判明した問題への対応
Bさんは,異常値発生原因の調査で,④このまま貸会議室の業務に宿泊管理システムを利用すると,貸会議室の定員変更時にデータの不整合が発生する,宿泊登録時に無駄な作業が発生する,などの問題があることが分かったので,宿泊管理システムを変更する方がよいと判断した。
〔RDBMSの主な仕様〕
宿泊管理システムで利用するRDBMSの主な仕様は次のとおりである。
テーブル定義
テーブル定義には,テーブル名を変更する機能がある。トリガー機能
テーブルに対する変更操作(挿入,更新,削除)を契機に,あらかじめ定義した処理を実行する。
(1) 実行タイミング(変更操作の前又は後。前者をBEFOREトリガー,後者をAFTERトリガーという),列値による実行条件を定義することができる。
(2) トリガー内では,変更操作を行う前の行,変更操作を行った後の行のそれぞれに相関名を指定することで,行の旧値,新値を参照することができる。
(3) あるAFTERトリガーの処理実行が,ほかのAFTERトリガーの処理実行の契機となることがある。この場合,後続のAFTERトリガーは連鎖して処理実行する。
〔宿泊管理システムの変更〕
- 概念データモデルの変更
Bさんは,施設へのヒアリング結果を基に,宿泊管理業務の概念データモデルに,貸会議室の予約業務を追加することにした。Bさんが作成した貸会議室予約業務追加後のトランザクション領域の概念データモデルを図4に示す。図4では,マスタ領域のエンティティタイプとのリレーションシップを省略している。

図の説明テキスト
図4 貸会議室予約業務追加後のトランザクション領域の概念データモデル。外枠内にトランザクション領域のエンティティとリレーションシップが示されている。エンティティとして「予約」「会員予約」「非会員予約」「宿泊予約」「貸会議室予約」「オプション予約」「貸会議室予約明細」「施設利用」「宿泊」「貸会議室利用」「オプション利用」「宿泊者」「請求」「請求明細」がある。「予約」の下位に「会員予約」「非会員予約」のサブタイプ、および「宿泊予約」「貸会議室予約」のサブタイプがある。「施設利用」の下位に「宿泊」「貸会議室利用」のサブタイプがある。各エンティティ間の関係が黒丸・白丸や矢印、カラスの足跡のような記号を伴う線で接続されている。
- テーブル構造の変更
Bさんは,施設へのヒアリングで聴取した要望に対応しつつ,現行のテーブル構造は変更せずに,貸会議室の予約,利用を管理するためのテーブルを追加することにして図5の追加するテーブルのテーブル構造を設計した。

図の説明テキスト
図5 追加するテーブルのテーブル構造(未完成)。外枠内に以下のテーブル構造が記述されている。
貸出時間帯(時間帯コード,開始時刻,終了時刻)
貸会議室在庫( ク )
貸会議室予約明細( ケ )
- テーブル名の変更
図4の概念データモデルでは,エンティティタイプ“宿泊”及び“貸会議室利用”は,エンティティタイプ“施設利用”のサブタイプである。現行の“宿泊”テーブルはエンティティタイプ“施設利用”を実装したものだが,概念データモデル上サブタイプのエンティティタイプ名をテーブル名に用いることによる誤解を防ぐために,“宿泊”テーブルは“施設利用”に名称を変更することにした。
D社では,アプリケーションプログラム(以下,APという)の継続的な改善を実施しており,APのアクセスを停止することなくAPのリリースを行う仕組みを備えている。
貸会議室予約機能のリリースに合わせてテーブル名の変更を行いたいが,“宿泊”テーブルには多くのAPで行の挿入,更新を行っていて,これら全てのAPの改定,試験を行うとリリース時期が遅くなる。そこで,一定の移行期間を設け,移行期間中は新旧両方のテーブル名を利用できるようにデータベースを実装し,必要な全てのAPの改定後に移行期間を終了して“宿泊”テーブルを廃止することにした。
実装に当たって,更新可能なビューを利用した更新可能ビュー方式,トリガーを利用したトリガー同期方式の2案を検討し,移行期間前,移行期間中,移行期間後の手順を表15に,表15中の手順[b2],[b4]のトリガーの処理内容を表16に整理した。

図の説明テキスト
表15 更新可能ビュー方式,トリガー同期方式の手順
| 実施時期 | 更新可能ビュー方式の手順 | トリガー同期方式の手順 |
|---|---|---|
| 移行期間前 | [a1] 更新可能な“施設利用”ビューを作成する。 | [b1] “施設利用”テーブルを新規作成する。 [b2] “宿泊”テーブルの変更を“施設利用”テーブルに反映するトリガーを作成する。 [b3] “宿泊”テーブルから,施設コード,宿泊番号順に,“施設利用”テーブルに存在しない行を一定件数ごとにコミットしながら複写する。 [b4] “施設利用”テーブルの変更を“宿泊”テーブルに反映するトリガーを作成する。 |
| 移行期間中 | なし | なし |
| 移行期間後 | [c1] “施設利用”ビューを削除する。 [c2] “宿泊”テーブルを“施設利用”テーブルに名称を変更する。 |
[d1] 作成したトリガーを削除する。 [d2] “宿泊”テーブルを削除する。 |
注記1 [ ]で囲んだ英数字は,手順番号を表す。
注記2 手順内で発生するトランザクションのISOLATIONレベルは,READ COMMITTEDである。
![表16 表15中の手順[b2], [b4]のトリガーの処理内容(未完成)](/exams/assets/ipa/db/2022autumn-pm2/bb_19_2.png)
図の説明テキスト
表16 表15中の手順[b2], [b4]のトリガーの処理内容(未完成)
| 手順 | 変更操作 | 処理内容 |
|---|---|---|
| [b2] | INSERT | “宿泊”テーブルの追加行のキー値で“施設利用”テーブルを検索し,該当行がない場合に“施設利用”テーブルに同じ行を挿入する。 |
| UPDATE | “宿泊”テーブルの変更行のキー値で“施設利用”テーブルを検索し,該当行があり,かつ,コ場合に,“施設利用”テーブルの該当行を更新する。 | |
| [b4] | INSERT | “施設利用”テーブルの追加行のキー値で“宿泊”テーブルを検索し,該当行がない場合に“宿泊”テーブルに同じ行を挿入する。 |
| UPDATE | “施設利用”テーブルの変更行のキー値で“宿泊”テーブルを検索し,該当行があり,かつ,[ 網掛け ]場合に,“宿泊”テーブルの該当行を更新する。 |
注記 網掛け部分は表示していない。
設問と解答・解説
設問1
〔分析データ収集〕について答えよ。
表3中の空欄 aに入れる“〇”又は“×”を答えよ。
模範解答
×
採点基準
- 2点: 論理モデルと物理テーブルのデータの扱いを正しく理解し、正答を導き出している。
- 0点: 誤った記号を選択している。
- 2点: 指定された記号を用いて適切に表現している。
- 0点: 指定された形式に従っていない。
解説
正解の根拠
宿泊施設の予約業務のデータ分析において、論理モデルと物理テーブルのデータの扱いを正しく理解する必要があります。表3の分析データ収集の空欄aについては、条件とデータの関係から「×」が当てはまります。
高得点のポイント
- 論理モデルと物理テーブルのデータの扱いを理解していること - 指定された記号で正しく表現していること
表3中の空欄 bに入れる“〇”又は“×”を答えよ。
模範解答
○
採点基準
- 2点: 論理モデルと物理テーブルのデータの扱いを正しく理解し、正答を導き出している。
- 0点: 誤った記号を選択している。
- 2点: 指定された記号を用いて適切に表現している。
- 0点: 指定された形式に従っていない。
解説
正解の根拠
表3の空欄bには、条件を満たすため「〇」が該当します。
高得点のポイント
- 論理モデルと物理テーブルのデータの扱いを理解していること - 指定された記号で正しく表現していること
表3中の空欄 cに入れる“〇”又は“×”を答えよ。
模範解答
×
採点基準
- 2点: 論理モデルと物理テーブルのデータの扱いを正しく理解し、正答を導き出している。
- 0点: 誤った記号を選択している。
- 2点: 指定された記号を用いて適切に表現している。
- 0点: 指定された形式に従っていない。
解説
正解の根拠
表3の空欄cには、データの扱いの条件から「×」が該当します。
高得点のポイント
- データの条件を正しく把握していること - 正確に指定の記号で回答していること
表3中の空欄 dに入れる“〇”又は“×”を答えよ。
模範解答
○
採点基準
- 2点: 論理モデルと物理テーブルのデータの扱いを正しく理解し、正答を導き出している。
- 0点: 誤った記号を選択している。
- 2点: 指定された記号を用いて適切に表現している。
- 0点: 指定された形式に従っていない。
解説
正解の根拠
表3の空欄dには、業務要件に照らし合わせて「〇」が該当します。
高得点のポイント
- 業務要件とテーブル設計の整合性を理解していること - 指定された形式で正しく回答していること
表3中の空欄 eに入れる“〇”又は“×”を答えよ。
模範解答
×
採点基準
- 2点: 論理モデルと物理テーブルのデータの扱いを正しく理解し、正答を導き出している。
- 0点: 誤った記号を選択している。
- 2点: 指定された記号を用いて適切に表現している。
- 0点: 指定された形式に従っていない。
解説
正解の根拠
表3の空欄eには、データの仕様から「×」が該当します。
高得点のポイント
- データの仕様を正確に読み取っていること - 正しい記号で回答していること
表3中の空欄 fに入れる“〇”又は“×”を答えよ。
模範解答
○
採点基準
- 2点: 論理モデルと物理テーブルのデータの扱いを正しく理解し、正答を導き出している。
- 0点: 誤った記号を選択している。
- 2点: 指定された記号を用いて適切に表現している。
- 0点: 指定された形式に従っていない。
解説
正解の根拠
表3の空欄fには、分析データの収集条件に一致するため「〇」が該当します。
高得点のポイント
- 収集条件とデータの関係性を理解していること - 指定された形式で正しく回答していること
表3中の空欄 アに入れる一つ又は複数の適切なエンティティタイプ名を答えよ。
模範解答
プラン明細,予約
採点基準
- 2点: 必要なエンティティタイプ名を全て正しく特定できている。
- 1点: 一部のみ特定できている。
- 0点: 全く特定できていない。
- 2点: 適切な名称を過不足なく並べて記述できている。
- 0点: 適切な形式で記述されていない。
解説
正解の根拠
表3の空欄アには、関連するエンティティタイプとして「プラン明細」と「予約」が該当します。これらは分析データを抽出する際に参照すべき主要なエンティティです。
高得点のポイント
- 必要なエンティティタイプ名を全て正しく特定できていること - 適切な名称を過不足なく並べて記述できていること
表3中の空欄 イに入れる一つ又は複数の適切なエンティティタイプ名を答えよ。
模範解答
宿泊,宿泊者
採点基準
- 2点: 必要なエンティティタイプ名を全て正しく特定できている。
- 1点: 一部のみ特定できている。
- 0点: 全く特定できていない。
- 2点: 適切な名称を過不足なく並べて記述できている。
- 0点: 適切な形式で記述されていない。
解説
正解の根拠
表3の空欄イには、データ収集に不可欠なエンティティタイプとして「宿泊」と「宿泊者」が該当します。
高得点のポイント
- 必要なエンティティタイプ名を全て正しく特定できていること - 適切な名称を過不足なく並べて記述できていること
表4中の空欄 ウに入れる適切な字句を答えよ。
模範解答
COUNT(DISTINCT B.会員番号)
COUNT(DISTINCT 会員番号)
採点基準
- 2点: SQLの文法や要求される条件を正確に理解し、正しい字句を導き出している。
- 1点: 概念は理解しているが、関数名や演算子に一部誤りがある。
- 0点: 全く異なっている。
- 2点: SQL文の構文規則に則り、正しく記述できている。
- 0点: 構文規則に反している。
解説
正解の根拠
表4の空欄ウでは、会員ごとの集計において重複を排除してユニークな会員数をカウントする必要があります。そのため、 または が適切です。
高得点のポイント
- 重複排除のために DISTINCT キーワードを用いていること - カウント対象の列として 会員番号 を正しく指定していること
表4中の空欄 エに入れる適切な字句を答えよ。
模範解答
EXISTS
採点基準
- 2点: SQLの文法や要求される条件を正確に理解し、正しい字句を導き出している。
- 1点: 概念は理解しているが、字句に一部誤りがある。
- 0点: 全く異なっている。
- 2点: SQL文の構文規則に則り、正しく記述できている。
- 0点: 構文規則に反している。
解説
正解の根拠
表4の空欄エでは、相関サブクエリを用いてレコードの存在確認を行うため、EXISTS 句を使用するのが適切です。
高得点のポイント
- 存在確認のための関数として EXISTS を理解していること - SQLの構文規則に則り正しく記述できていること
表4中の空欄 オに入れる適切な字句を答えよ。
模範解答
B.会員番号 = D.会員番号
A.チェックイン年月日 > C.チェックイン年月日
採点基準
- 2点: 「B.会員番号 = D.会員番号」または「A.チェックイン年月日 > C.チェックイン年月日」(順不同。オ・カの両方で同じ条件を答えていないこと)を正しく導いている。
- 1点: 概念は理解しているが、条件の記述に一部誤りがある。
- 0点: 全く異なっている。
- 2点: SQL文の構文規則に則り、正しく記述できている。
- 0点: 構文規則に反している。
解説
正解の根拠
表4の空欄オでは、テーブルBとテーブルDを結合し、同一会員であることを紐づける条件が必要です。したがって、 が適切です。
高得点のポイント
- 会員を紐づけるための正しい結合条件を理解していること - テーブルのエイリアスを用いて正しく記述できていること
公式解答例では オ・カ は順不同です(2 つの条件は AND で結ばれるため、どちらをオ・カに入れても正解。ただしオ・カに同じ条件を入れた回答は正答ではありません)。
表4中の空欄 カに入れる適切な字句を答えよ。
模範解答
B.会員番号 = D.会員番号
A.チェックイン年月日 > C.チェックイン年月日
採点基準
- 2点: 「B.会員番号 = D.会員番号」または「A.チェックイン年月日 > C.チェックイン年月日」(順不同。オ・カの両方で同じ条件を答えていないこと)を正しく導いている。
- 1点: 概念は理解しているが、演算子の向きや列名に一部誤りがある。
- 0点: 全く異なっている。
- 2点: SQL文の構文規則に則り、正しく記述できている。
- 0点: 構文規則に反している。
解説
正解の根拠
表4の空欄カでは、チェックイン日時の前後関係を比較する条件が求められます。Aのチェックイン年月日がCのチェックイン年月日より後であることを示すため、 が適切です。
高得点のポイント
- 日付の比較条件を正しく理解していること - 適切な比較演算子と列名を用いて記述できていること
公式解答例では オ・カ は順不同です(2 つの条件は AND で結ばれるため、どちらをオ・カに入れても正解。ただしオ・カに同じ条件を入れた回答は正答ではありません)。
表4中の空欄 キに入れる適切な字句を答えよ。
模範解答
COALESCE(リピート会員数,0) / 累計新規会員数
採点基準
- 2点: SQLの文法や要求される条件を正確に理解し、正しい字句を導き出している。
- 1点: 関数名や計算式に一部誤りがある。
- 0点: 全く異なっている。
- 2点: SQL文の構文規則に則り、正しく記述できている。
- 0点: 構文規則に反している。
解説
正解の根拠
表4の空欄キでは、リピート会員率を計算する式が入ります。NULL値が含まれる場合に0として扱うためCOALESCE関数を使用し、 となります。
高得点のポイント
- NULLハンドリングのために COALESCE 関数を適切に使用していること - リピート率を求める正しい計算式を構成できていること
表8中の太枠内に適切な数値を入れ,表を完成させよ。
模範解答
会員番号 階級番号: 100 1, 101 2, 102 5, 103 1, 104 3, 105 4, 106 5, 107 4, 108 3, 109 2
採点基準
- 2点: 算出ロジックを正しく適用し、正確な結果を導き出している。
- 1点: 一部の算出結果に誤りがある。
- 0点: 全く異なっている。
- 2点: 指定された形式に従って正しく記述できている。
- 0点: 指定の形式に従っていない。
解説
正解の根拠
表8の太枠内には、会員番号ごとの階級番号の算出結果が入ります。各会員の利用実績に応じて、100は1、101は2、102は5…といったように正しい階級が割り当てられます。
高得点のポイント
- 階級の算出ロジックを正確に理解し、全ての会員に対して正しい階級番号を導き出していること - 指定された表の形式に合わせて正しく数値を埋められていること
設問1では,(2)ウ,キの正答率が低かった。SQL文をデータ分析の一環に用いるケースも増えている。SQLの構文及び関数を理解し,データを操作する技術を身に付けてほしい。
設問2
〔異常値の調査・対応〕について答えよ。
本文中の下線①で,調査のために表6中のS3をどのように変更したらよいか。変更内容を50字以内で具体的に答えよ。
模範解答
累計稼働客室数が累計予約可能客室数よりも大きい行を選択する条件のWHERE句を追加する。
客室稼働率が100%よりも大きい行を選択する条件をWHERE句に追加する。
採点基準
- 2点: 累計稼働客室数が累計予約可能客室数よりも大きい(または客室稼働率が100%よりも大きい)行を選択する条件を含めている。
- 1点: 異常値を特定する条件に言及しているが、不完全である。
- 0点: 記載がないか、全く誤っている。
- 1点: WHERE句を追加するというSQLの変更方法として論理的に記述されている。
- 0点: 論理的な記述になっていない。
解説
正解の根拠
本文中の下線①における調査のためには、異常値の発生条件をSQLで特定する必要があります。累計稼働客室数が累計予約可能客室数を超える、あるいは客室稼働率が100%を超える行を選択する条件をWHERE句に追加します。
高得点のポイント
- 累計稼働客室数が累計予約可能客室数よりも大きい条件に言及していること - WHERE句への条件追加という形式で具体的に記述していること
本文中の下線②で,累計予約可能客室数が実際よりも小さくなった理由を50字以内で具体的に答えよ。
模範解答
時間帯に区切った客室タイプのうち,客室に対応しないものが累計予約可能客室数に含まれないから
客室タイプ72~74に対応する客室数が累計予約可能客室数にカウントされないから
採点基準
- 2点: 客室に対応しない客室タイプ(72〜74など)が累計予約可能客室数に含まれない(カウントされない)ことを正しく指摘している。
- 1点: 理由の一部(特定の客室タイプの存在など)に言及しているが不完全である。
- 0点: 記載がないか、全く誤っている。
- 1点: 理由として論理的に意味が通る文で記述されている。
- 0点: 論理的な記述になっていない。
解説
正解の根拠
下線②で累計予約可能客室数が実際よりも小さくなった理由は、時間帯に区切った客室タイプのうち、客室に対応しないもの(客室タイプ72〜74など)が累計予約可能客室数にカウントされない仕様になっているためです。
高得点のポイント
- 客室に対応しない客室タイプが存在することを指摘していること - それらが累計予約可能客室数に含まれないことを明確に記述していること
本文中の下線③で,表6中のS2において,“客室状況”テーブルに替えてほかのテーブルから累計予約可能客室数を求めることにした。そのテーブル名を答えよ。
模範解答
客室在庫
採点基準
- 3点: 「客室在庫」テーブルを正しく特定している。
- 0点: 誤っている。
- 2点: 余計な文字を含まず、テーブル名のみを正確に記述している。
- 0点: 誤っている。
解説
正解の根拠
下線③において、客室状況テーブルに代わって累計予約可能客室数を正確に求めるためには、「客室在庫」テーブルを参照する必要があります。
高得点のポイント
- 「客室在庫」テーブルを正しく特定していること - 余計な文字を含まず、テーブル名のみを正確に記述していること
本文中の下線④について,どのようなデータの不整合が発生するか,40字以内で具体的に答えよ。
模範解答
同じ貸会議室の異なる客室タイプの定員に異なる値が設定される。
採点基準
- 2点: 同じ貸会議室の異なる客室タイプで、定員に異なる値が設定されることを正しく指摘している。
- 1点: 不整合の概要には触れているが、客室タイプや定員への言及が欠けている。
- 0点: 誤っている。
- 1点: 不整合の状況が矛盾なく論理的に記述されている。
- 0点: 論理的な記述になっていない。
解説
正解の根拠
下線④において、宿泊施設予約の業務ルールをそのまま貸会議室予約に適用すると、同じ貸会議室であるにもかかわらず、異なる客室タイプ間で定員に異なる値が設定されるというデータの不整合が発生します。
高得点のポイント
- 同じ貸会議室の異なる客室タイプ間で定員設定が異なることを指摘していること - 不整合の状況が矛盾なく論理的に記述されていること
本文中の下線④について,どのような無駄な作業が発生するか,40字以内で具体的に答えよ。
模範解答
宿泊者がないにもかかわらず,1名以上の宿泊者を記録しなければならない。
採点基準
- 2点: 宿泊者がないにもかかわらず、1名以上の宿泊者を記録しなければならないことを正しく指摘している。
- 1点: 宿泊者の記録に関する無駄な作業について触れているが、具体性に欠ける。
- 0点: 誤っている。
- 1点: 無駄な作業の内容が第三者に伝わるよう明確に記述されている。
- 0点: 論理的な記述になっていない。
解説
正解の根拠
下線④に関連して、貸会議室では宿泊者が存在しないにもかかわらず、システムの制約上1名以上の宿泊者を記録しなければならないという無駄な入力作業が発生してしまいます。
高得点のポイント
- 宿泊者がないにもかかわらず記録が必要になる点に言及していること - 無駄な作業の内容が第三者に伝わるよう明確に記述されていること
設問2では,(2)及び(4)(b)の正答率が低かった。(2)では,テーブル構造とデータの意味との相違に着目した解答を求めたが,SQL文の構文の問題を指摘する解答が散見された。(4)(b)では,宿泊施設予約の業務ルールをそのまま貸会議室予約に適用することで生じる問題の指摘を求めたが,定員を確認するなど通常の業務を指摘する解答が散見された。
設問3
〔宿泊管理システムの変更〕について答えよ。
図5中の空欄 クに入れる一つ又は複数の列名を答えよ。なお,入れる列が主キーを構成する場合,主キーを表す実線の下線を付けること。
模範解答
施設コード,客室タイプコード,年月日,時間帯コード,予約可能数,割当済数
採点基準
- 3点: 必要な列をすべて特定し、主キーも正しく指定できている。
- 2点: 列の特定は概ね正しいが、一部欠落または主キーの指定に誤りがある。
- 1点: 複数の欠落や誤りがある。
- 0点: 全く誤っている。
- 2点: 列名が適切に列挙され、指示通りの形式を満たしている。
- 0点: 指定の形式に従っていない。
解説
正解の根拠
図5の空欄クには、宿泊管理システムの変更に伴い、「施設コード」「客室タイプコード」「年月日」「時間帯コード」「予約可能数」「割当済数」の列を追加・定義する必要があります。このうち、一意にレコードを特定する主キー項目に対する理解が問われます。
高得点のポイント
- 必要な列をすべて特定し、主キーも正しく指定できていること - 列名がコンマ区切り等で列挙され、指示通り主キーへの下線付与が表現されていること
図5中の空欄 ケに入れる一つ又は複数の列名を答えよ。なお,入れる列が主キーを構成する場合,主キーを表す実線の下線を付けること。
模範解答
施設コード,予約番号,時間帯コード
採点基準
- 3点: 必要な列をすべて特定し、主キーも正しく指定できている。
- 2点: 概ね正しいが、一部欠落等がある。
- 1点: 複数の欠落がある。
- 0点: 全く誤っている。
- 2点: 適切に列名が列挙され、指示通りの形式を満たしている。
- 0点: 満たしていない。
解説
正解の根拠
図5の空欄ケには、「施設コード」「予約番号」「時間帯コード」の列が入ります。これらは予約情報を管理する上で必須のキー項目および属性となります。
高得点のポイント
- 必要な列をすべて正しく特定できていること - 主キーとなる項目を正確に理解し、指示された形式で記述できていること
表15中の更新可能ビュー方式の手順の実施に際して,APのアクセスを停止する必要がある。APのアクセスを停止するのはどの手順の前か。表15中の手順番号を答えよ。
模範解答
c1
採点基準
- 3点: 「c1」を正しく導き出せている。
- 0点: 誤っている。
- 2点: 手順番号のみを適切に記述している。
- 0点: 形式に誤りがある。
解説
正解の根拠
表15の更新可能ビュー方式の手順において、APのアクセスを停止する必要があるのは、旧テーブルとビューの切り替えやデータの不整合を防ぐため、手順「c1」の直前となります。
高得点のポイント
- 更新可能ビュー方式におけるシステム停止の適切なタイミングを理解していること - 手順番号のみを適切に記述していること
表15中の更新可能ビュー方式の手順の実施に際して,APのアクセスを停止する理由を40字以内で具体的に答えよ。
模範解答
新APが“施設利用”テーブルにアクセスすると異常終了するから
採点基準
- 2点: 新APが“施設利用”テーブルにアクセスすると異常終了することを正しく指摘している。
- 1点: 理由の一部(エラー発生など)には触れているが具体性に欠ける。
- 0点: 誤っている。
- 1点: 理由として因果関係が明確に記述されている。
- 0点: 論理的でない。
解説
正解の根拠
更新可能ビュー方式においてAPのアクセスを停止する理由は、新APがアクセス先となる「施設利用」テーブルにアクセスしようとした際に、対象が存在しない等の理由で異常終了してしまうのを防ぐためです。
高得点のポイント
- 新APが「施設利用」テーブルにアクセスすると異常終了することを指摘していること - 理由として因果関係が明確に記述されていること
表15中のトリガー同期方式において,APのアクセスを停止せずにリリースを行う場合,表15中の手順では“宿泊”テーブルと“施設利用”テーブルとが同期した状態となるが,手順[b2],[b3]の順序を逆転させると,差異が発生する場合がある。それはどのような場合か。50字以内で具体的に答えよ。
模範解答
“施設利用”テーブルへのデータの複写が済んだ“宿泊”テーブルの行への更新が発生した場合
採点基準
- 2点: データの複写が済んだ宿泊テーブルの行への更新が発生した場合を正しく指摘している。
- 1点: 更新の発生には言及しているが、複写のタイミング等との関係の記述が不十分。
- 0点: 誤っている。
- 1点: 状態の差異が生じる条件が論理的に記述されている。
- 0点: 論理的でない。
解説
正解の根拠
トリガー同期方式において手順の順序を逆転させると、「施設利用」テーブルへのデータの複写がすでに完了した「宿泊」テーブルの行に対して更新が発生した場合に、トリガーが正しく連携されずデータ差異が生じるリスクがあります。
高得点のポイント
- データの複写が済んだ行への更新が発生した場合を正しく指摘していること - 状態の差異が生じる条件が論理的に記述されていること
表16中の空欄 コの条件がないと問題が発生する。どのような問題が発生するか。20字以内で具体的に答えよ。
模範解答
処理の無限ループが発生する。
採点基準
- 2点: 処理の無限ループが発生することを正しく指摘している。
- 1点: ループや繰り返しに言及しているが、不完全な表現である。
- 0点: 誤っている。
- 1点: 問題の内容が簡潔に記述されている。
- 0点: 論理的でない。
解説
正解の根拠
表16の空欄コの条件が欠落していると、更新処理が相互にトリガーを呼び出し続け、処理の無限ループが発生するという致命的な問題が起こります。
高得点のポイント
- 処理の無限ループが発生することを正しく指摘していること - 問題の内容が簡潔かつ論理的に記述されていること
模範解答
“宿泊”テーブルの行の旧値と新値が一致しない。
採点基準
- 2点: “宿泊”テーブルの行の旧値と新値が一致しない、という条件を正しく記述している。
- 1点: 値の変更有無に関する条件であることには触れているが、不正確である。
- 0点: 誤っている。
- 1点: 条件として適切に構文が成立している。
- 0点: 論理的でない。
解説
正解の根拠
無限ループを回避し適切な同期処理を行うためには、更新対象となる「宿泊」テーブルの行の旧値と新値が一致しない場合にのみ処理を実行する、という条件を空欄コに指定する必要があります。
高得点のポイント
- 行の旧値と新値が一致しないという条件を正しく記述していること - 条件として適切に構文が成立していること
設問3では,(1)及び(4)の正答率が低かった。(1)では,定義すべき列が欠落している解答,主キーが誤っている解答が散見された。テーブル上で管理する具体的な業務データをイメージしながら,設計したテーブル構造が業務要件を満たしていることを入念に確認するように心掛けてほしい。(4)では,アプリケーションプログラムの継続的な改善を行うために,システムを停止せずにデータベースを変更する手法について理解を深めてほしい。