DBデータベーススペシャリスト試験 午後Ⅱ
平成29年度春期 データベーススペシャリスト 午後Ⅱ 問1
事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。
問題














解き方のヒントを見る
データの発生源と利用者を対応づける
設計上の判断を検討する前に、各データがどこで生まれ、誰がいつ更新し、どこで参照されるのかを一つの対応関係として整理しておくと、記述の根拠を問題文の条件に照らして確かめやすくなります。
この問題で問われていること
問題文に書かれた業務の流れや制約から、データの発生元・更新主体・参照主体・参照の時期を読み取り、それぞれの条件が設計上のどの判断に結び付くのかを自分の言葉で説明できるかを確認する観点です。
視点
複数の仕組みがデータを共有する場面では、個々の設計判断を別々に覚えるより、データごとに「生まれる場所」「書き換える者」「読む者」「必要になる時点」を一覧にして眺めると整理しやすくなります。この一覧は答えそのものを示すものではありません。問題文の記述とどこが一致し、どこが一致しないかを照合するための手がかりとして使ってください。
確認ポイント
- 問題文の中で、各データを最初に作成・登録するのはどの仕組みや担当者かを、本文の該当箇所を示しながら説明できるか
- そのデータを後から書き換える者と、読むだけの者を、本文の記述に基づいて区別できているか
- データが参照される時点と更新される時点の関係について、本文に書かれた条件をそのまま引用して説明できるか
正解と解説を見る
解説
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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針