DBデータベーススペシャリスト試験 午後Ⅱ

平成29年度春期 データベーススペシャリスト 午後Ⅱ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 データベースの設計,実装に関する次の記述を読んで,設問1~3に答えよ。 N社は,家具・日用雑貨の小売業を営む企業であり,全国に直営店舗を展開するほか,Webサイトのオンラインショップでも販売を行っている。直営店舗における販売(以下,店舗販売という)とオンラインショップにおける販売(以下,OL販売という)の各業務は,それぞれ運営する組織も,利用するシステムも異なっている。そこでN社では,かねてからの課題であった相互の情報共有を実現するために,各システムで保有する情報の一部を統合して,業務の改善を図ることにした。 〔現在の業務内容〕 1.店舗販売業務 (1) 運営組織 ① 全国を20のエリアに分割し,各エリアの管理担当者が,担当地域内の複数の倉庫,複数の店舗を管理している。 ② 店舗の従業員は,一つの店舗に所属し,役職及び担当職務が定められている。 (2) 商品 ① 取扱商品は,約5万点である。商品は商品コードで一意に識別される。 ② 商品分類は,大分類,中分類,小分類の3階層構成である。 (3) 会員 ① 店舗で会員登録を行った顧客(以下,店舗会員という)に,店舗ごとに一意な店舗会員番号を付与する。会員登録時に氏名,住所,電話番号を記録する。店舗会員には,ポイントカードを発行する。ポイントカードには,発行した店舗の店舗コードと店舗会員番号が印字されている。 ② ポイントカードの紛失時・不携帯時は,新たな店舗会員としてポイントカードが発行されるので,同一顧客が複数のポイントカードをもつこともある。 (4) 販売 ① 店舗のPOSレジで,精算ごとに販売,販売明細を記録する。 ② 店舗会員がポイントカードを提示すると,購入金額に応じてポイントが付与され,使用可能ポイントとして蓄積される。 ③ ポイントは,取得した翌日以降の購入時の支払に使用できる。使用したポイントは,即座に使用可能ポイントから差し引かれる。 ④ 蓄積されたポイントは,取得した年の2年後の年末まで有効である。 (5) 在庫 ① 店舗では,商品ごとに実在庫数を店舗在庫として管理している。 ② エリアでは,倉庫ごと,商品ごとに実在庫数,引当済数を倉庫在庫として管理している。 (6) 店舗への出荷 ① エリアの管理担当者は,店舗在庫を定期的に調べて,実在庫数が一定水準を下回る商品がある場合は,倉庫に対して店舗への出荷指示を行う。 ② 倉庫は,出荷指示を受けると,店舗ごとに商品をまとめて出荷する。 (7) 販売分析 エリアの管理担当者は,蓄積されている販売データを,専用の多次元分析ツールを用いて検索,集計し,その結果を販売促進,商品企画の参考にしている。 2.OL販売業務 (1) 運営組織 ① オンライン事業部が,オンラインショップを運営している。 ② OL販売専用の倉庫が一つある。 (2) 商品 ① 店舗での取扱商品の一部を販売する。商品は,店舗販売業務と同じ商品コードで識別される。 ② 商品分類は,3~5階層構成である。 (3) 会員 ① オンラインショップの利用には,会員登録が必要である。Webサイトから会員登録を行った顧客(以下,OL会員という)に,OL販売で一意な会員番号を付与する。会員登録時に,氏名,住所,電話番号,生年月日,性別,メールアドレスを記録する。 ② 会員登録時に,同一人の複数登録がないようにチェックする。 (4) 販売 ① 一つの注文で,複数商品の購入を受け付ける。商品の配送前であれば,注文の取消しができる。 ② 注文ごとに,購入金額に応じてポイントが付与され,使用可能ポイントとして蓄積される。ポイント使用時の取扱い,ポイント有効期限は店舗販売業務と同じである。 (5) 配送 ① オンライン事業部は,注文に応じて,倉庫に配送指示を行う。 ② 倉庫は,配送指示を受けると,商品を梱包し,外部の配送業者に委託して注文者の指定場所に配送する。 (6) 在庫 倉庫では,商品ごとの実在庫数,引当済数を倉庫在庫として管理している。 (7) 販売分析 オンライン事業部の管理担当者は,蓄積されている注文データを直接参照して検索,集計し,その結果を販売促進,商品企画の参考にしている。 〔販売業務改善の要件〕 (1) 共通情報の管理 ① 店舗販売業務とOL販売業務を統括する販売統括部を新設し,両業務に共通する商品情報及びそれに関連する商品分類情報を管理する。 ② 店舗会員とOL会員の情報を統合し,会員区分で識別する。会員情報漏えい防止対策として,参照者の範囲を限定する。 (2) ポイントの取扱い ① 会員が所持している1枚又は複数のポイントカードのポイントと,OL販売のポイントを,まとめて取り扱えるようにする。これをポイント統合という。 ② 会員から申請があれば,ポイント統合を行う。統合後は,OL販売の会員番号を正規の会員番号とし,ポイントを集約する。 ③ 会員は,統合するポイントカードの店舗コードと店舗会員番号を指定する。複数のポイントカードのうち,1枚だけを存続させ,その他は廃止する。 ④ ポイント統合は申請の翌日以降に有効となり,店舗販売とOL販売のどちらでもポイントを使用できるようにする。ポイント統合の対象となったポイントカードの統合申請日,統合対象ポイント(統合時点の使用可能ポイント)を記録し,照会画面から確認できるようにする。 (3) OL販売の取扱商品拡大と在庫回転率向上 ① 全エリアの倉庫からの配送を可能にして,店舗販売業務の取扱商品の多くをOL販売で取り扱えるようにする。 ② エリアの倉庫在庫から他エリアの店舗へ出荷できるようにする。 ③ 店舗で販売可能な商品とオンラインショップで販売可能な商品を区分する。 (4) 販売分析 ① 店舗販売とOL販売をチャネル区分で識別し,チャネル横断的に販売分析処理を行えるようにする。販売分析処理の例を表1に示す。 ② 会員の性別,居住地域(関東,東海など),年齢層(10代,20代など)を用いて分析を行う。 表1 販売分析処理の例 〔現行システムの概要〕 N社では,現行店舗販売システムと現行OL販売システムを個別に運用し,両システム間のデータ連携はなく,マスタ情報もそれぞれのシステムで管理している。 1.現行店舗販売システムのテーブル構造とCRUD 現行店舗販売システムのテーブル構造,CRUDを図1,表2に示す。 図1 現行店舗販売システムのテーブル構造(一部省略) 表2 現行店舗販売システムのCRUD 2.現行OL販売システムのテーブル構造とCRUD 現行OL販売システムのテーブル構造,CRUDを図2,表3に示す。 図2 現行OL販売システムのテーブル構造(一部省略) 表3 現行OL販売システムのCRUD 〔連携システムの概要〕 N社では,販売業務改善に向けて,新たに連携システムを構築することにした。店舗販売システムとOL販売システムの間で直接データ交換を行うのではなく,連携システムに,両システムのデータの一部を統合,一部を複製した上で,連携システムを介して双方の情報連携を行う。 〔RDBMSの仕様〕 店舗販売システム,OL販売システム及び連携システムに共通して用いられるRDBMSの仕様は,次のとおりである。 1.権限 (1) テーブル,ビューへのアクセスには,アクセス権限が必要である。 (2) ビューにアクセスする場合,そのビューが参照するテーブル又は他のビューのアクセス権限は不要である。 (3) テーブル,ビューのアクセス権限は,ユーザID,ロールに付与される。ロールは,ユーザID及び他のロールに付与される。 2.トリガ テーブルに対する操作(追加・更新)を契機に,あらかじめ定義された処理を実行する。実行タイミング(追加・更新の前又は後),列値による実行条件を定義することができる。 3.DB相互接続機能 同じネットワーク上にある異なるサーバ上のDBを,相互接続する機能である。相互接続したDB上のテーブルは,一つのSQL文で操作することができる。 4.レプリケーション機能 (1) 1か所のデータを複数か所に分散する機能,複数か所のデータを1か所に集約する機能,及び両者を組み合わせて双方向に同期をとる機能がある。これらの機能を使用すると,一方のテーブルへの追加・更新を他方に自動的に反映させ,データの同期をとることができる。 (2) トランザクションログを用いて一定間隔でデータの同期をとるバッチ型と,レプリケーション元のトランザクションによってデータの同期をとるイベント型とがある。 ① イベント型では,レプリケーション先への同期が失敗すると,レプリケーション元の更新はロールバックされる。 ② バッチ型では,テーブルごとに,レプリケーションの有効化,無効化をコマンドによって指示することができる。無効化したレプリケーションを有効化するときには,蓄積されたトランザクションログを用いてデータの同期をとる。 (3) 必要となる列の選択,必要となる行の選択及びその組合せによって,レプリケーション先のテーブルに必要とされるデータだけを同期することができる。 〔テーブル配置の検討〕 現行店舗販売システムと現行OL販売システム(以下,二つのシステムを合わせて現行システムという)のテーブルを,表4の配置方法①~⑤のいずれかによって配置することにし,表5に示すテーブル配置検討表を次の手順(i)~(v)で作成した。以下,現行システムのアプリケーションを現行AP,現行システムのDBを現行DB,連携システムのDBを連携DB,連携システムのアプリケーションを連携APという。 (i) 〔販売業務改善の要件〕から,店舗販売業務とOL販売業務に共通する情報を保有していて,双方で情報の参照,追加,更新が発生するテーブルには,情報共有対象欄に“○”を記入する。 (ii) 情報共有対象でないテーブルのうち,情報共有対象のテーブルから参照されるテーブルには,参照先欄に“○”を記入する。 (iii) (i)又は(ii)に該当するテーブルについて,現行システムの処理で追加・更新されるものは現行APを,販売統括部によって追加・更新されるものは連携APを追加・更新の起点欄に記入する。追加・更新されない場合は空欄にする。 (iv) 追加・更新の起点が現行APであるテーブルについて,現行DB及び連携DBの両方にテーブルを配置した場合に,現行DBの一方での追加・更新を,他方にも同期させる必要があれば双方向の同期欄に“○”を記入する。 (v) (i),(ii)のいずれにも該当しなければ配置方法①とし,該当する場合は,次のように配置方法を決める。 ・(iii)において,追加・更新の起点が連携APの場合は,配置方法②とする。 ・(iv)において,双方向の同期が必要でない場合は,配置方法③とする。 ・(iv)において,双方向の同期が必要な場合は,配置方法④とする。ただし,テーブルの主キーの値が等しい行に対する更新が同時に発生する可能性がある場合には,配置方法⑤とする。 表4 テーブルの配置方法 表5 テーブル配置検討表(未完成) 〔連携DBの設計・実装〕 1.連携DBのテーブル設計 表5のテーブル配置検討表に基づいて,情報共有対象のテーブル構造を検討した。“商品”,“会員”テーブルについては,データを統合した上で連携DBに配置することにして,図3のテーブル構造を作成した。 (1) “商品”テーブルの統合では,現行DBの“商品”テーブルの全情報をもつ。さらに,店舗販売区分,OL販売区分の列を追加し,各チャネルでの販売対象商品か否かを表す値を設定する。 (2) “会員”テーブルの統合では,次のようにテーブルを作成する。 ① OL販売システムの“会員”テーブルを連携DBに複製する。複製したテーブルに店舗販売システムの“会員”テーブルの全行を追加する。追加の際,店舗会員番号ごとに新たな会員番号を付与し,店舗会員とOL会員とを合わせて一意に識別する。店舗会員番号はそのまま使用するので,店舗会員番号と新たな会員番号とを関連付ける。さらに,会員区分の列を追加し,店舗会員とOL会員を識別する値を設定する。 ② 〔販売業務改善の要件〕におけるポイントの取扱いが可能になるように,必要な列を追加する。 図3 情報共有対象のテーブル構造(未完成) 2.会員の個人情報漏えい防止対策 “会員”テーブルを表4の配置方法⑤とする場合,店舗の従業員が全情報を参照することになり,情報漏えいのリスクが高まるので,次のアクセス制限を行う。 (1) アクセス制限の内容 ① 会員番号,氏名,ポイントは,全従業員に全会員の情報参照を許す。それ以外の情報(以下,機密情報という)の参照は,必要とする特定の役職及び特定の担当職務の従業員に限定する。 ② 機密情報の参照が認められた従業員であっても,参照できるのは従業員が所属する店舗の登録会員の情報だけに限定する。 (2) アクセス制限の実装 ① OL販売では,AP用のユーザIDとパスワードを用いてDBに接続する。ユーザIDとパスワードはAP内に隠ぺいする。 ② 店舗販売では,従業員ごとのユーザIDとパスワードを用いてDBに接続する。ユーザIDは従業員IDと同一で,パスワードは従業員が各自で管理する。 ③ “従業員”テーブルは,表4の配置方法③とし,連携DBにも配置する。 ④ 図4,5のSQL文を使ってビューを作成し,テーブル及びビューへの適切なアクセス権限を付与する。機密情報へのアクセス制御には,認可役職ロール,認可担当職務ロールを用いる。 ⑤ 図5のSQL文で作成したビューでは,従業員が所属する店舗の会員情報だけにアクセスを限定する。ただし,ポイント統合後の店舗会員については,統合先のOL会員情報も参照可能とする。 図4 “会員V1”ビュー作成SQL文 図5 “会員V2”ビュー作成SQL文(未完成) 3.販売分析データの作成(バッチ処理) 現行DBの“販売”,“販売明細”,“注文”,“注文明細”テーブルは,表4の配置方法③とし,連携DBにも配置する。これらのテーブルのデータを元に連携DBの販売ファクト,商品軸などの軸データをバッチ処理で作成する。 店舗販売業務,OL販売業務では,それぞれ,その日のうちに日締めを行っているが,日締時刻は日によって異なり,順序も決まっていない。バッチ処理中の元データ更新を避けるため,両業務とも日締めが完了したときに,該当テーブルのレプリケーションを自動的に無効化する。そのために,図6のテーブルを,表4の配置方法⑤として連携DBに配置し,日締め時に当該テーブルを更新する日締処理の追加,及び当該テーブルへの操作によって実行するトリガの定義を行うことにした。 図6 “日締管理”テーブルのテーブル構造 〔販売分析〕 1.販売分析業務のテーブル構造 現行店舗販売システムのテーブル構造(図1)を基に,連携DBに配置する販売分析業務のテーブル構造を設計する。“販売ファクト”テーブルは,伝票番号及び注文番号を一意に識別する販売IDを付与することにし,図7を作成した。 図7 連携DBに配置する販売分析業務のテーブル構造(未完成) 2.販売分析処理の検討 表1の処理例2について問合せの内容を整理し,表6を作成した。 表6 処理例2の問合せ(未完成) 設問1 〔テーブル配置の検討〕について,(1),(2)に答えよ。 (1) 表5中の“会員”テーブルの配置検討について,①,②に答えよ。 ① 配置方法④とした場合,“会員”テーブルに双方向の同期が必要となるのは,業務上どのような場合か。具体的に30字以内で述べよ。 ② 配置方法④とした場合,OL販売システムの現行DBへの同期が失敗した場合に更新がロールバックされる店舗販売システムの処理がある。該当する処理名を表2の中から全て答えよ。 (2) 表5中の[a]~[e]に入れる適切な配置方法を答えよ。 設問2 〔連携DBの設計・実装〕について,(1)~(3)に答えよ。 (1) 図3中の[f]に追加する列名と列値の内容を表7にまとめた。記入済みの例に倣って空欄を埋め,表を完成させよ。 表7 追加する列名と列値の内容 また,“会員”テーブルの統合で追加した列間の検査制約を一つ挙げ,その内容を次の例に倣って40字以内で述べよ。 例 店舗販売区分が販売対象商品の場合,小分類コードはNULLでない。 (2) “会員V1”ビュー,“会員V2”ビューの具体的なアクセス権限付与先を答えよ。また,図5中の[g]~[j]に入れる適切な字句を答えよ。ここで,DB接続に用いられたユーザIDはCURRENT_USERで参照されるものとする。 (3) 図6の“日締管理”テーブルを用いたバッチ処理の制御について,処理年月日が現在日付に対応する行について,各業務の日締処理で行う操作を具体的に60字以内で述べよ。また,トリガの定義内容について,①実行の契機となる操作,②実行条件,③実行する処理の内容を答えよ。ここで,“日締管理”テーブルは,日締処理以外で追加,更新されることはないものとする。 設問3 〔販売分析〕について,(1),(2)に答えよ。 (1) 〔販売業務改善の要件〕に従って,表1の販売分析処理が可能となるように,図7に追加すべきテーブル名を一つ挙げ,テーブル構造を答えよ。また,図7中の[k]~[m]に入れる列名を,それぞれ一つ又は複数答えよ。 なお,テーブル構造の解答については,主キーを表す実線の下線,外部キーを表す破線の下線も含めて,巻頭の表記ルールに従うこと。 (2) 表1の処理例2に用いる問合せについて,表6中の[ア]~[エ]に入れる適切なテーブル名又は内容を答えよ。
表1 販売分析処理の例。処理例1はOL販売の商品分類(第1~3階層)別・チャネル別・年月別に過去3年間の販売金額を時系列比較する。処理例2は指定期間に関東在住30代女性が購入した大分類K001(キッチン用品)の件数を曜日・時間帯ごとに集計する。
表1 販売分析処理の例。処理例1はOL販売の商品分類(第1~3階層)別・チャネル別・年月別に過去3年間の販売金額を時系列比較する。処理例2は指定期間に関東在住30代女性が購入した大分類K001(キッチン用品)の件数を曜日・時間帯ごとに集計する。
図1 現行店舗販売システムのテーブル構造(一部省略)。エリア,倉庫,店舗,従業員,大・中・小分類,商品,会員,店舗在庫,倉庫在庫,販売,販売明細,出荷指示,出荷指示明細,販売ファクト,店舗軸,商品軸,時間軸の関係スキーマ。主キーは実線下線,外部キーは破線下線で示す。
図1 現行店舗販売システムのテーブル構造(一部省略)。エリア,倉庫,店舗,従業員,大・中・小分類,商品,会員,店舗在庫,倉庫在庫,販売,販売明細,出荷指示,出荷指示明細,販売ファクト,店舗軸,商品軸,時間軸の関係スキーマ。主キーは実線下線,外部キーは破線下線で示す。
表2 現行店舗販売システムのCRUD。組織登録,従業員登録,商品登録,会員登録,POS入力,出荷手配,出荷,販売分析(オンライン)とポイント反映,分析データ作成(バッチ)の各処理が,エリア・倉庫・店舗など各テーブルに対して行うC/R/U操作のマトリクス。
表2 現行店舗販売システムのCRUD。組織登録,従業員登録,商品登録,会員登録,POS入力,出荷手配,出荷,販売分析(オンライン)とポイント反映,分析データ作成(バッチ)の各処理が,エリア・倉庫・店舗など各テーブルに対して行うC/R/U操作のマトリクス。
図2 現行OL販売システムのテーブル構造(一部省略)。商品分類,商品,商品画像,関連商品,会員,倉庫在庫,注文,注文明細,配送指示,配送指示明細の関係スキーマ。主キーは実線下線,外部キーは破線下線で示す。
図2 現行OL販売システムのテーブル構造(一部省略)。商品分類,商品,商品画像,関連商品,会員,倉庫在庫,注文,注文明細,配送指示,配送指示明細の関係スキーマ。主キーは実線下線,外部キーは破線下線で示す。
表3 現行OL販売システムのCRUD。商品登録,商品追加情報登録,会員登録,商品検索,注文受付,注文取消,配送手配,配送,販売分析(オンライン)とポイント反映,商品画像取込み(バッチ)が,商品分類から配送指示明細までの各テーブルに行うC/R/U操作のマトリクス。
表3 現行OL販売システムのCRUD。商品登録,商品追加情報登録,会員登録,商品検索,注文受付,注文取消,配送手配,配送,販売分析(オンライン)とポイント反映,商品画像取込み(バッチ)が,商品分類から配送指示明細までの各テーブルに行うC/R/U操作のマトリクス。
表4 テーブルの配置方法。配置方法①~⑤の内容。①現行DBに残す,②連携DBで更新しバッチ型で分散,③現行DBで更新しバッチ型で集約,④現行DBで更新しイベント型で双方向同期,⑤連携DBだけに置きDB相互接続で操作する。
表4 テーブルの配置方法。配置方法①~⑤の内容。①現行DBに残す,②連携DBで更新しバッチ型で分散,③現行DBで更新しバッチ型で集約,④現行DBで更新しイベント型で双方向同期,⑤連携DBだけに置きDB相互接続で操作する。
表5 テーブル配置検討表(未完成)。各テーブルの情報共有対象,参照先,追加・更新の起点,双方向の同期,配置方法の一覧。エリア・倉庫・店舗は配置方法③,商品は②,商品画像等と配送指示等は①,会員は双方向同期○。分類・在庫・出荷指示は空欄a~eとなっている。
表5 テーブル配置検討表(未完成)。各テーブルの情報共有対象,参照先,追加・更新の起点,双方向の同期,配置方法の一覧。エリア・倉庫・店舗は配置方法③,商品は②,商品画像等と配送指示等は①,会員は双方向同期○。分類・在庫・出荷指示は空欄a~eとなっている。
図3 情報共有対象のテーブル構造(未完成)。統合後の商品テーブル(小分類コード,分類コード,店舗販売区分,OL販売区分などを持つ)と会員テーブル(会員番号,個人情報,ポイント,店舗コード,店舗会員番号,会員区分,空欄f)の関係スキーマ。
図3 情報共有対象のテーブル構造(未完成)。統合後の商品テーブル(小分類コード,分類コード,店舗販売区分,OL販売区分などを持つ)と会員テーブル(会員番号,個人情報,ポイント,店舗コード,店舗会員番号,会員区分,空欄f)の関係スキーマ。
図4 “会員V1”ビュー作成SQL文。会員テーブルから会員番号,氏名,使用可能ポイント,本年ポイント,前年ポイント,前々年ポイントを選択する会員V1ビューを作成するCREATE VIEW文。
図4 “会員V1”ビュー作成SQL文。会員テーブルから会員番号,氏名,使用可能ポイント,本年ポイント,前年ポイント,前々年ポイントを選択する会員V1ビューを作成するCREATE VIEW文。
図5 “会員V2”ビュー作成SQL文(未完成)。会員AをgテーブルBと条件hで結合するSELECT文と,会員Aを会員Bと条件iで結合し,さらにgテーブルCと条件jで結合するSELECT文をUNIONした会員V2ビュー作成文。空欄g~jがある。
図5 “会員V2”ビュー作成SQL文(未完成)。会員AをgテーブルBと条件hで結合するSELECT文と,会員Aを会員Bと条件iで結合し,さらにgテーブルCと条件jで結合するSELECT文をUNIONした会員V2ビュー作成文。空欄g~jがある。
図6 “日締管理”テーブルのテーブル構造。日締管理(処理年月日,店舗日締フラグ,OL日締フラグ)の関係スキーマ。主キーは処理年月日。注記で,各フラグは日締めの完了又は未完了の状態を表すとしている。
図6 “日締管理”テーブルのテーブル構造。日締管理(処理年月日,店舗日締フラグ,OL日締フラグ)の関係スキーマ。主キーは処理年月日。注記で,各フラグは日締めの完了又は未完了の状態を表すとしている。
図7 連携DBに配置する販売分析業務のテーブル構造(未完成)。販売ファクト(販売ID,明細番号,店舗軸ID,商品軸ID,時間軸ID,数量,金額,空欄k),店舗軸(空欄l),商品軸(大・中・小分類コード,空欄m),時間軸の関係スキーマ。
図7 連携DBに配置する販売分析業務のテーブル構造(未完成)。販売ファクト(販売ID,明細番号,店舗軸ID,商品軸ID,時間軸ID,数量,金額,空欄k),店舗軸(空欄l),商品軸(大・中・小分類コード,空欄m),時間軸の関係スキーマ。
表6 処理例2の問合せ(未完成)。処理例2の問合せ手順。①販売ファクト全行選択,②時間軸と等結合し期間で選択,③空欄アへの問合せ(内容イ),④空欄ウへの問合せ(内容エ),⑤曜日・時間帯でグループ化。射影は曜日,時間帯,販売IDの件数。
表6 処理例2の問合せ(未完成)。処理例2の問合せ手順。①販売ファクト全行選択,②時間軸と等結合し期間で選択,③空欄アへの問合せ(内容イ),④空欄ウへの問合せ(内容エ),⑤曜日・時間帯でグループ化。射影は曜日,時間帯,販売IDの件数。
表7 追加する列名と列値の内容。列名と列値の内容の表。記入例として統合区分(ポイント統合の有無を表す値)が示され,残り4行は解答者が記入する空欄になっている。
表7 追加する列名と列値の内容。列名と列値の内容の表。記入例として統合区分(ポイント統合の有無を表す値)が示され,残り4行は解答者が記入する空欄になっている。
解き方のヒントを見る

データの発生源と利用者を対応づける

設計上の判断を検討する前に、各データがどこで生まれ、誰がいつ更新し、どこで参照されるのかを一つの対応関係として整理しておくと、記述の根拠を問題文の条件に照らして確かめやすくなります。

この問題で問われていること

問題文に書かれた業務の流れや制約から、データの発生元・更新主体・参照主体・参照の時期を読み取り、それぞれの条件が設計上のどの判断に結び付くのかを自分の言葉で説明できるかを確認する観点です。

視点

複数の仕組みがデータを共有する場面では、個々の設計判断を別々に覚えるより、データごとに「生まれる場所」「書き換える者」「読む者」「必要になる時点」を一覧にして眺めると整理しやすくなります。この一覧は答えそのものを示すものではありません。問題文の記述とどこが一致し、どこが一致しないかを照合するための手がかりとして使ってください。

確認ポイント

  • 問題文の中で、各データを最初に作成・登録するのはどの仕組みや担当者かを、本文の該当箇所を示しながら説明できるか
  • そのデータを後から書き換える者と、読むだけの者を、本文の記述に基づいて区別できているか
  • データが参照される時点と更新される時点の関係について、本文に書かれた条件をそのまま引用して説明できるか
正解と解説を見る

解説

N社は店舗販売とOL販売の各システムを、新設の連携DBを介して連携させます。本問では、テーブル配置方法の選択、会員テーブルの統合で追加する列と検査制約、ビュー・ロール・CURRENT_USERを使ったアクセス制限、日締管理テーブルとトリガによるレプリケーション制御、会員軸を加えたスタースキーマと問合せ手順を扱います。いずれも、要件記述・CRUD表・RDBMSの仕様を根拠に答えを導く総合問題です。

問題の全体像

家具・日用雑貨を扱うN社は、店舗販売とOL販売を別々のシステムで運用しています。今回、連携システム(連携DB)を新設し、商品・会員などの情報を共有する計画です。要件は次のとおりです。販売統括部が商品と商品分類を一元管理すること。店舗会員とOL会員を統合し、ポイントをまとめて扱えるようにすること(ポイント統合)。全エリアの倉庫からOL販売の商品を配送できるようにすること。チャネル区分や会員属性を使って横断的に販売分析できるようにすること。出題趣旨では、インテグリティ制約の実現方式、テーブル設計、レプリケーション設計、データ操作の設計、セキュリティ要件の実装の各能力を評価するとしています。採点講評によると、全体の正答率は低めでした。特に、同時参照・更新のケースの指摘(設問1(1)①)、d、自己結合条件i、トリガの理解、会員軸を使った問合せで得点しにくかったようです。

設問1(1)①

表4の配置方法④は、現行APが自分の現行DBを更新し、イベント型の双方向レプリケーションで連携DBに、必要なら他方の現行DBにも同期させる方式です。“会員”テーブルで両方向の同期が必要になるのは、同じ会員の同じポイント情報を、店舗とOLの両方で更新する場面です。要件(2)④には、ポイント統合が有効になると店舗販売とOL販売のどちらでもポイントを使えるとあります。また、使用したポイントは即座に使用可能ポイントから差し引かれます(現在の業務内容1(4)③)。したがって、公式解答例のとおり「ポイント統合後の会員が購入時にポイントを使用した場合」が該当します。採点講評では、両業務で同じ情報を同時に参照・更新するケースに当たらない解答が散見されたとあります。30字以内で答える際は、「統合後」と「ポイント使用」の二つを必ず入れてください。

設問1(1)②

RDBMSの仕様4(2)①によると、イベント型ではレプリケーション先への同期に失敗すると、レプリケーション元の更新がロールバックされます。そこで、店舗販売システムの中で“会員”テーブルを追加・更新する処理を表2から探します。会員列にCまたはUがあるのは、会員登録(CU)、POS入力(RU)、ポイント反映(U)の三つです。公式解答例もこの三つを挙げています。参照だけの処理は同期の対象にならないため含めません。

設問1(2)(a)

要件(1)①には、販売統括部が両業務に共通する商品情報と、それに関連する商品分類情報を管理するとあります。また、図3の統合後の“商品”テーブルは小分類コードを外部キーとして持つので、大分類・中分類・小分類は共有対象の商品から参照されます。追加・更新の起点は販売統括部、つまり連携APです。手順(v)により、起点が連携APのテーブルは配置方法②になります。公式解答例も配置方法②です。

設問1(2)(b)

OL販売側の“商品分類”も、図3の“商品”が持つ分類コードから参照される商品分類情報です。要件(1)①により、これも販売統括部(連携AP)が追加・更新します。したがって(a)と同じく配置方法②で、公式解答例も配置方法②です。

設問1(2)(c)

店舗在庫は店舗ごとの実在庫数で、店舗販売業務の中だけで使われます。要件(3)で拡大されるのは倉庫からの配送・出荷であり、OL販売が店舗在庫を参照・更新する要件はありません。共有対象のテーブルから参照されることもないため、手順(i)(ii)のどちらにも当たらず、配置方法①になります。公式解答例も配置方法①です。

設問1(2)(d)

要件(3)①により、全エリアの倉庫からOL販売の配送が可能になります。そのため、エリアの倉庫在庫を、店舗向けの出荷手配・出荷(表2でRU・U)と、OL向けの注文受付・注文取消・配送(表3でRU・U)の両方が更新することになります。同じ倉庫コード・商品コードの行、つまり主キーが同じ行を両業務が同時に更新する可能性があるため、手順(v)のただし書きにより配置方法⑤になります。公式解答例も配置方法⑤です。採点講評では、このdの正答率が低かったとされています。共有対象・共有範囲・更新の起点・更新範囲を整理することが重要です。

設問1(2)(e)

出荷指示・出荷指示明細は、店舗へ出荷するための店舗販売業務専用のテーブルです。OL販売は別に配送指示を使います(表5で配置方法①)。出荷指示は共有対象の倉庫を参照しますが、逆に共有対象のテーブルから参照されることはありません。そのため手順(ii)には当たらず、配置方法①になります。公式解答例も配置方法①です。

設問2(1)(追加する列名と列値の内容)

要件(2)②〜④のポイント統合に必要な情報を、列として洗い出します。③「複数カードのうち1枚だけを存続させ、他は廃止する」から、廃止区分(ポイントカードの廃止の有無を表す値)が必要です。②「統合後はOL販売の会員番号を正規の会員番号とする」から、統合先会員番号(ポイント統合後の統合先の会員番号)が必要です。④からは、統合申請日(ポイント統合の申請日)と、統合対象ポイント(統合時点の使用可能ポイント)が必要です。公式解答例はこの4列を、記入済みの統合区分に加えて挙げています。

設問2(1)(制約の内容)

統合後の“会員”テーブルは、会員区分で店舗会員とOL会員というサブタイプを一つの表に同居させた構造です。店舗会員だけが持つ列には、会員区分の値に応じたNULL制約を付けます。公式解答例では次の二つが示されています。「会員区分が店舗会員の場合、店舗コード及び店舗会員番号はNULLでない」「会員区分が店舗会員かつ統合区分が統合済みの場合、統合先会員番号はNULLでない」。採点講評では、サブタイプ区分値の記述が不十分な解答が散見されたとあります。40字以内で答える際も、条件側の区分名と値(例:会員区分が店舗会員)を省略しないことが大切です。

設問2(2)(会員V1の権限の付与先)

図4の“会員V1”は、会員番号・氏名・ポイント関連の列だけを全会員分返すビューです。アクセス制限(1)①には、これらは全従業員に全会員分の参照を許すとあります。店舗販売では従業員ごとのユーザIDで接続するので((2)②)、公式解答例では付与先を「全従業員のユーザID」としています。

設問2(2)(会員V2の権限の付与先)

“会員V2”は、A.*、つまり機密情報を含む全列を返すビューです。機密情報を参照できるのは特定の役職・担当職務の従業員に限られ、(2)④にはその制御に認可役職ロールと認可担当職務ロールを使うとあります。したがって公式解答例では、付与先を「認可役職ロール及び認可担当職務ロール」としています。RDBMSの仕様1(2)により、ビューに権限があれば基のテーブルへの権限は不要です。

設問2(2)(g)

接続中の従業員の所属店舗を知るには、従業員IDと店舗コードを持つ“従業員”テーブルが必要です。(2)③にあるとおり、従業員テーブルは配置方法③で連携DBにも置かれます。そのため、二つのSELECTのどちらでも結合相手は従業員であり、公式解答例も「従業員」です。

設問2(2)(h)

一つ目のSELECTは、ログインしている従業員の所属店舗で登録された会員だけを取り出します。会員Aの店舗コードを従業員Bの店舗コードと一致させ、さらに従業員IDをCURRENT_USERで絞ります(ユーザIDは従業員IDと同じ)。公式解答例は「B.店舗コード = A.店舗コード AND B.従業員ID = CURRENT_USER」です。

設問2(2)(i)

二つ目のSELECTは、(2)⑤のただし書き「ポイント統合後の店舗会員については、統合先のOL会員情報も参照可能とする」を実現する部分です。会員テーブルを自己結合し、Aが統合先のOL会員、Bがそこに統合された店舗会員となるように結びます。公式解答例は「A.会員番号 = B.統合先会員番号」です。採点講評では、このiの正答率が低かったとされています。取り出したい行(A)と条件判定に使う行(B)の役割を区別して考えましょう。

設問2(2)(j)

統合元の店舗会員Bが、ログイン従業員の所属店舗の会員であることを確かめる条件です。hと同じ考え方で、店舗コードの一致とCURRENT_USERによる絞り込みを、従業員Cに対して書きます。公式解答例は「C.店舗コード = B.店舗コード AND C.従業員ID = CURRENT_USER」です。

設問2(3)(日締処理で行う操作)

日締めの時刻も順序も決まっていないため、その日の行があるかどうかは、先に日締めを終えたのがどちらの業務かで変わります。公式解答例では次のように書かれています。行がなければ、自業務のフラグを完了、他方を未完了として行を追加する。行があれば、自業務のフラグを完了に更新する。60字以内で答えるには、「行の有無で追加か更新かを分けること」「追加時は他方のフラグを未完了にすること」「自業務のフラグを完了にすること」の三つを押さえます。

設問2(3)(トリガ①)

行を追加するのは先に日締めを終えた業務だけです。このとき他方は必ず未完了なので、追加の時点で両方が完了になることはありません。両方のフラグがそろうのは、後から日締めを終えた業務が行を更新したときです。したがって、公式解答例では契機を「更新」としています。

設問2(3)(トリガ②)

バッチ処理中に元データが更新されないよう、両業務とも日締めが完了した時点でレプリケーションを止める必要があります。トリガには列の値による実行条件を定義できるので(RDBMSの仕様2)、公式解答例では条件を「店舗日締フラグとOL日締フラグが共に完了であること」としています。

設問2(3)(トリガ③)

“販売”“販売明細”“注文”“注文明細”は、配置方法③(バッチ型)で連携DBに同期しています。バッチ型では、テーブルごとにコマンドでレプリケーションの有効化・無効化を指示できます(RDBMSの仕様4(2)②)。したがって公式解答例では、実行する処理を「レプリケーションを無効化する」としています。採点講評では、トリガの理解が不十分と思われる解答が散見されたとあります。

設問3(1)(追加するテーブル)

要件(4)②は、会員の性別・居住地域・年齢層を使った分析を求めています。しかし図7には会員の属性を持つ軸テーブルがありません。スタースキーマでは分析条件の属性を軸(ディメンション)テーブルに持たせるので、公式解答例では会員軸(会員軸ID、性別、居住地域、年齢層)を追加し、会員軸IDを主キーの実線下線としています。採点講評では、スタースキーマを理解していないと思われる解答が散見されたとあります。

設問3(1)(k)

会員軸を追加したら、ファクトテーブルからその軸を参照できなければなりません。そのため、販売ファクトに外部キーとして会員軸IDを持たせます。公式解答例も「会員軸ID」です。

設問3(1)(l)

要件(4)①は、店舗販売とOL販売をチャネル区分で識別し、チャネルをまたいで分析することを求めています。販売ファクトは店舗軸IDを持つので、店舗軸にチャネル区分を加えれば、販売がどちらのチャネルのものか識別できます。公式解答例も「チャネル区分」です。

設問3(1)(m)

表1の処理例1は、OL販売業務の商品分類のうち第1〜3階層の中から選んで集計します。図7の商品軸には店舗側の大・中・小分類コードしかないため、OL側の各階層の分類コードを加える必要があります。公式解答例は「分類コード1、分類コード2、分類コード3」です。

設問3(2)(ア)

処理例2の条件「大分類コードが‘K001’」は、商品の属性です。販売ファクトに結合して絞り込む相手は商品軸なので、公式解答例も「商品軸」です。

設問3(2)(イ)

②の結果と商品軸を、商品軸IDで等結合します。そのうえで大分類コードが‘K001’と一致する行を選びます。公式解答例もこの内容です。採点講評によると、商品軸による問合せは正答率が高かったとされています。

設問3(2)(ウ)

「関東地域に居住する30代の女性」は会員の属性です。そのため、設問3(1)で追加した会員軸を使います。公式解答例も「会員軸」です。なお、公式解答例ではア・イの組とウ・エの組の順序は問わないとされています。

設問3(2)(エ)

③の結果と会員軸を、会員軸IDで等結合します。そのうえで、性別が女性、年齢層が30代、居住地域が関東地域の三つの条件をすべて満たす行を選びます。公式解答例もこの内容です。採点講評では、会員軸による問合せの正答率が低かったとされています。結合キーと三つの条件を漏れなく書くことが大切です。

学習のポイント

更新の起点と同時更新の有無から配置方法を判定する手順を身につけてください。あわせて、サブタイプ区分に基づくNULL制約、自己結合ビューの結合条件、トリガの契機と実行条件、スタースキーマでの軸の追加と結合を重点的に復習しましょう。

出典:独立行政法人 情報処理推進機構(IPA)平成29年度春期 データベーススペシャリスト試験 午後Ⅱ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針