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

平成30年度春期 データベーススペシャリスト 午後Ⅰ 問3

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

問題

問3 物理データベースの設計及び実装に関する次の記述を読んで、設問1、2に答えよ。 A社は、都市近郊で複数の日帰り温泉施設(以下、施設という)を運営している。 A社では、リピータを増やすために、全施設で利用できる会員カードを希望する客に発行し、新たにシニア向けの割安な利用料金を設定することにした。また、この計画に伴いシステムを拡張することが決まり、Fさんが物理データベースの設計及び実装(以下、物理DB設計及び実装という)を担当することになった。 〔RDBMSの主な仕様〕 (1)テーブル及び索引のストレージ上の物理的な格納場所を、表領域という。 (2)RDBMSとストレージ間の入出力単位を、ページという。同じページに異なるテーブルの行が格納されることはない。 (3)索引は、ユニーク索引と非ユニーク索引に分けられる。 (4)索引は、クラスタ性という性質によって、高クラスタな索引と低クラスタな索引に分けられる。 ・高クラスタな索引:キー値の順番と、キーが指す行の物理的な並び順が一致しているか、完全に一致していなくても、隣接するキーが指す行が同じページに格納されている割合が高い。 ・低クラスタな索引:キー値の順番と、キーが指す行の物理的な並び順が一致している割合が低く、行へのアクセスがランダムになる。 (5)DMLのアクセスパスは、RDBMSによってテーブル及び索引に関する統計情報に基づいて索引探索又は表探索に決められる。ただし、次の場合は除く。 ・WHERE句のANDだけで結ばれた等値比較の対象列がユニーク索引のキー列に一致している場合:統計情報にかかわらず、その索引の索引探索に決められる。 ・統計情報からテーブルが空(0行)と判断した場合:表探索に決められる。 (6)主キー制約及びUNIQUE制約は、制約を定義する列の構成に一致したユニーク索引がRDBMSによって自動的に作成されることで一意性が保証される。 〔施設運営及び会員カードの概要〕 1.施設運営 (1)営業時間帯は、9:00~24:00である。 (2)各施設には、エステ、理容、食事処、売店など、一つ以上の店舗がある。 (3)受付では、客が一人1枚ずつ入館券を購入し、入館券ごとに腕輪付きロッカー鍵(以下、鍵という)を一つ受け取り、帰るときに返却する。 (4)客は、鍵のバーコードに記録されている鍵番号を店舗のレジに読み取らせることで、店舗の有料サービスを含む商品を利用できる。レジに記録されたデータは、客が精算するまでにシステムのデータベースに送られる。 (5)未精算の利用額は、退館時に複数台のいずれかの精算機で精算する。 (6)同じ客が同じ日に、同じ施設を複数回、利用することができる。この場合、入館券を再度、購入する必要がある。 2.会員カード (1)客は、会員カード申込書(以下、申込書という)に必要な情報(氏名、生年月日など)を記入する。未就学児の入館は無料なので申込対象外である。 (2)客は、会員IDが刻印された会員カード(申込書に添付)を受け取り、その日から利用することができる。会員には、鍵を用いた利用の額に応じてポイントを付与する。ポイントは、次回以降の施設利用に使うことができる。 (3)システムは、翌朝の開館までに申込書に基づいて会員情報を登録し、また、毎日の営業時間外に、会員の生年月日に基づいて年齢及び年齢区分を設定する。 (4)登録の翌日以降、客は、会員カードを提示して、年齢に応じた入館券を購入する。その際、年齢を示す証明書の提示を求められることはない。 〔物理DB設計及び実装〕 1.物理DB設計及び実装の前提 (1)テーブル構造は、既に決まっている。 (2)テーブルごとの行数は、過去の実績及び伸び率の予想に基づいて見積もる。 (3)利用実績データは、分析のために1年分を保存する。 (4)システムで用いられるユーザ、ロールは、定義済みである。 (5)プログラム開発者は、DMLを設計し、プログラムの開発・単体テストを行う。 (6)索引は、プログラム開発者が設計したDMLに基づいてFさんが設計を行う。 2.主なテーブル構造及び主な列の意味と制約 主なテーブル構造を図1に、主な列の意味・制約を表1に示す。また、“会員”テーブルの年齢区分と年齢の組合せを限定する検査制約を、図2に示す。 図1 主なテーブル構造(一部省略) 表1 主な列の意味・制約 図2 年齢区分と年齢の組合せを限定する検査制約(未完成) 3.物理DB設計及び実装の作業工程表 Fさんが作成中の物理DB設計及び実装の作業工程表を、表2に示す。 表2 物理DB設計及び実装の作業工程表(未完成) (1)作業W4(追加索引設計)で、利用額の精算時に実行されるDMLの例を表3に、FさんがDML2及びDML3のために追加した索引を表4に示す。 表3 利用額の精算時に実行されるDMLの例 表4 DML2及びDML3のために追加した索引 (2)作業W5(表領域設計)で、可変長列があるテーブルのストレージ所要量を見積もる計算の手順を、表5に示す。また、作業W6(DML性能予測)で、DML性能の指標としてDMLのテーブルからの読込みページ数を、表5の見積結果を用いて予測する計算の手順を、表6に示す。 表5 可変長列があるテーブルのストレージ所要量を見積もる計算の手順(未完成) 表6 テーブルからの読込みページ数を予測する計算の手順(未完成) 〔G部長の指摘〕 表2の作業工程表について、Fさんは、表に示した作業順で逐次、各作業を行うつもりであったが、G部長から次のような指摘があった。 指摘1 作業を並行して進めることで、作業工程期間を短縮できる。 指摘2 作業W8(統計情報取得及びアクセスパス確認)の作業順が8番目では、表3のDMLのアクセスパスが適切に決められない。作業W8を、作業【あ】の後に行うべきである。 設問1 表2の作業工程表について、(1)~(5)に答えよ。 (1)作業W2(追加制約設計)で“店舗”、“精算”の各テーブルにUNIQUE制約を設計する場合について、UNIQUE制約を定義する列の構成(列名又は列名の組合せ)を、それぞれ一つ答えよ。 なお、UNIQUE制約がない場合、“なし”と答えよ。 (2)作業W2(追加制約設計)について、図2中の【a】~【d】に入れる適切な述語を一つずつ答えよ。 (3)作業W4(追加索引設計)に関する表4の索引について、①、②に答えよ。 ① 索引1は、ユニーク索引又は非ユニーク索引のどちらに該当するか答えよ。 ② 索引2は、高クラスタな索引である。その理由を35字以内で述べよ。 (4)作業W5(表領域設計)について、表5中の【ア】~【キ】に入れる適切な字句を、表5中の下線部分の用語を用いて答えよ。 (5)作業W6(DML性能予測)について、表6中の【ク】~【コ】に入れる適切な字句を、表5、6中の下線部分の用語を用いて答えよ。 設問2 〔G部長の指摘〕について、(1)~(3)に答えよ。 (1)指摘1について、Fさんは、他の三つ以上の作業と並行して進められる作業としてW3とW9の二つを選んだ。作業順を変えた後の、直前の作業及び直後の作業の作業IDを、それぞれ答えよ。 (2)指摘2について、アクセスパスが索引探索でなく表探索に決められるDMLを、表3から全て答え、表探索に決められる理由を、W8の作業順の観点から40字以内で述べよ。 (3)【あ】に入れる適切な作業IDを、一つ答えよ。
図1 主なテーブル構造(一部省略)。施設、店舗、商品、会員、券、鍵、店舗利用、精算、精算明細などの主なテーブル構造を示す図。
図1 主なテーブル構造(一部省略)。施設、店舗、商品、会員、券、鍵、店舗利用、精算、精算明細などの主なテーブル構造を示す図。
表1 主な列の意味・制約。店舗ID、内線番号、商品ID、会員ID、年齢区分、券番号、鍵番号などの列の意味と制約を整理した表。
表1 主な列の意味・制約。店舗ID、内線番号、商品ID、会員ID、年齢区分、券番号、鍵番号などの列の意味と制約を整理した表。
図2 年齢区分と年齢の組合せを限定する検査制約(未完成)。年齢区分と年齢の組合せをCHECK制約で限定する構文の未完成部分を示す図。
図2 年齢区分と年齢の組合せを限定する検査制約(未完成)。年齢区分と年齢の組合せをCHECK制約で限定する構文の未完成部分を示す図。
表2 物理DB設計及び実装の作業工程表(未完成)。W1からW11までの物理データベース設計・実装作業と、その作業内容及び作業順を示す表。
表2 物理DB設計及び実装の作業工程表(未完成)。W1からW11までの物理データベース設計・実装作業と、その作業内容及び作業順を示す表。
表3 利用額の精算時に実行されるDMLの例。鍵の検索、精算明細への挿入、精算明細の検索を行う三つのDML例を示す表。
表3 利用額の精算時に実行されるDMLの例。鍵の検索、精算明細への挿入、精算明細の検索を行う三つのDML例を示す表。
表4 DML2及びDML3のために追加した索引。DML2用の店舗利用索引とDML3用の精算明細索引について、対象テーブルとキー構成を示す表。
表4 DML2及びDML3のために追加した索引。DML2用の店舗利用索引とDML3用の精算明細索引について、対象テーブルとキー構成を示す表。
表5 可変長列があるテーブルのストレージ所要量を見積もる計算の手順(未完成)。可変長列を含むテーブルについて、ページ長、有効ページ長、平均行数、必要ページ数などを求める手順の未完成表。
表5 可変長列があるテーブルのストレージ所要量を見積もる計算の手順(未完成)。可変長列を含むテーブルについて、ページ長、有効ページ長、平均行数、必要ページ数などを求める手順の未完成表。
表6 テーブルからの読込みページ数を予測する計算の手順(未完成)。表探索と索引探索について、低クラスタ及び高クラスタの索引による読込みページ数を予測する手順の未完成表。
表6 テーブルからの読込みページ数を予測する計算の手順(未完成)。表探索と索引探索について、低クラスタ及び高クラスタの索引による読込みページ数を予測する手順の未完成表。
解き方のヒントを見る

作業間の前提関係に注目する

物理DB設計に関わる作業を検討するときは、各作業が何を入力として必要とし、何を成果として生み出すかを一つずつ書き出す姿勢が役立ちます。前提となる情報がそろっているかという観点だけに絞って考えを整理しましょう。

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

問題を読むときは、登場する作業や設計要素それぞれについて、判断に必要な情報がどの時点で確定しているのかを意識してください。ある判断が別の判断の結果に依存しているかどうかを、自分の言葉で説明できるかが確認の中心です。

視点

設計作業には、他の成果を受け取って初めて進められるものと、比較的独立して検討できるものがあります。どちらに当たるかは、その作業が扱う情報の出どころを確認すると整理しやすくなります。

確認ポイント

  • 各作業が判断材料として何を必要としているかを書き出したか
  • その判断材料が、別の作業の成果として得られるものかを確かめたか
  • 依存関係の理由を、用語の暗記ではなく自分の言葉で説明できるか
正解と解説を見る

解説

日帰り温泉施設の会員管理システム拡張を題材に、物理DB設計から実装までの作業を扱う問題です。UNIQUE制約と検査制約の設計、索引のユニーク性とクラスタ性、可変長列テーブルの容量見積り、読込みページ数の机上予測、作業工程の並行化、統計情報を取得する時期とアクセスパスの関係を問う。どの設問も、問題文にある列の意味、RDBMSの仕様、表の計算式、作業内容の依存関係を正確に読めば解答できる。

問題の全体像

A社は会員カードとシニア料金を導入するためシステムを拡張し、Fさんが物理DB設計及び実装を担当する。表2の作業工程表(W1〜W11)に沿って、制約設計(W2)、索引設計(W4)、表領域設計(W5)、DML性能予測(W6)の具体的な内容を問い、さらにG部長の指摘をもとに作業の並行化と統計情報を取得する時期を問う構成です。公式解答例の出題趣旨では、物理設計から実装までの作業の内容と、作業間の前後関係・依存関係を理解して適切な作業工程計画を作成する能力を問うとしている。採点講評では、全体として正答率は低かったとされている。

設問1(1)

公式解答例では、店舗は「施設ID,内線番号」、精算は「なし」です。表1によると、内線番号は各店舗の内線電話を「施設内で」識別する番号です。そのため、施設IDと内線番号の組合せで店舗が一意に決まり、これが主キー以外の候補キーになる。主キーの{施設ID、 店舗ID}はW1で主キー制約として定義済みなので、W2でUNIQUE制約として再定義することはない(採点講評では、主キーの列名をそのまま並べた誤答が多かったと指摘されている)。精算について採点講評は、客が非会員のときは複数台のいずれかの精算機で精算するため、主キー以外の列の組合せで行を一意にできないと説明している。会員IDはNULLになり得るし、同じ客が同じ日に同じ施設を複数回利用できるので、会員IDを含む組合せでも一意にならない。

設問1(2)(a)

公式解答例では「年齢 < 12」です。表1の年齢区分'1'は子供(12歳未満)です。したがって、年齢区分 = '1' と組み合わせる条件は、年齢が12未満であることになる。

設問1(2)(b)

公式解答例では「年齢区分 = '2'」である(cとは順不同)。図2の二つ目の括弧は、年齢区分'1'と'3'の間にあり、大人('2')の組合せを表す部分です。そのため、一方の述語は年齢区分が'2'であることを示す等値比較になる。

設問1(2)(c)

公式解答例では「年齢 BETWEEN 12 AND 59」である(bとは順不同)。大人は12歳以上60歳未満です。年齢列はSMALLINT型(整数)なので、12以上59以下を表すBETWEEN 12 AND 59で範囲を正しく限定できる。

設問1(2)(d)

公式解答例では「年齢 >= 60」です。シニア('3')は60歳以上なので、年齢区分 = '3' と組み合わせる条件は、年齢が60以上であることになる。

設問1(3)(1)

公式解答例では「非ユニーク索引」です。索引1は店舗利用テーブルの{施設ID、 鍵番号、 未精算フラグ}をキーとする。一人の客が同じ鍵で複数の商品を利用すれば、未精算フラグ'Y'の行が複数できる。また、表1にあるように鍵は精算後に再利用されるため、精算済み('N')の行も同じ施設ID・鍵番号で多数たまる。したがって、このキー値は一意にならない。

設問1(3)(2)

公式解答例では「同じ券番号の行が精算時にまとめて追加されるから」です。精算明細の行は、精算時にDML2のINSERT…SELECTによって、その券番号の利用分がまとめて挿入される。そのため、索引2のキー(利用年月日、 施設ID、 券番号)が同じ行は、物理的に隣接して同じページに格納されやすい。これは仕様(4)の高クラスタな索引の定義(隣接するキーが指す行が同じページに格納されている割合が高い)に当てはまる。35字以内の答案では、「同じ券番号の行」「精算時にまとめて追加」の2点を押さえる。

設問1(4)(ア)

公式解答例では「最大行長」です。手順2は、ページ長を決めるときに、どの行でも1ページに格納できるようにする手順です。可変長列があるテーブルでは、最も長い行(最大行長)が1行以上入るページ長を選ぶ必要がある。

設問1(4)(イ)

公式解答例では「有効ページ長」です。手順3の不等式は、ロード後に空けておく領域(有効ページ長 × 空き領域率 ÷ 100)に平均的な行が1行以上入る条件を表します。行を格納できるのはヘッダ部を除いた領域なので、有効ページ長を用いる。手順4のページ当たりの平均行数の式でも、割られる数(イ)は有効ページ長です。

設問1(4)(ウ)

公式解答例では「平均行長」です。表5の手順4の式は「ページ当たりの平均行数 = 有効ページ長 ÷ 平均行長(小数点以下を切捨て)」です。1ページの格納可能領域を行の平均長で割り、1ページに平均何行入るかを求める。

設問1(4)(エ)

公式解答例では「見積行数」です。必要ページ数は、テーブル全体の行数を1ページ当たりの行数で割って求める。そのため、割られる数は手順1で得た見積行数になる。

設問1(4)(オ)

公式解答例では「ページ当たりの平均行数」です。表5の手順4では、1行目で「ページ当たりの平均行数 = 有効ページ長 ÷ 平均行長」を求め、2行目の「必要ページ数 = 見積行数 ÷ オ(小数点以下を切上げ)」で、その値を割る数として使う。全行数を1ページに入る平均行数で割り、端数ページも1ページとして数えるために切り上げる、という流れです。空き領域率は手順3で決める値で、表5のこの計算式には含まれていない。式にない要素を持ち込まず、直前の行で求めた値をそのまま使う。

設問1(4)(カ)

公式解答例では「ページ長」である(キとは順不同)。ストレージに割り当てる容量はページ単位で決まるので、ヘッダ部を含むページ全体の大きさ(ページ長)に必要ページ数を掛ける。有効ページ長ではなくページ長を使う点に注意する。

設問1(4)(キ)

公式解答例では「必要ページ数」である(カとは順不同)。直前の行で求めた必要ページ数にページ長を掛けたものが、テーブルのストレージ所要量(バイト)になる。

設問1(5)(ク)

公式解答例では「必要ページ数」です。表探索ではテーブルの全ページを読むので、読込みページ数は表5で求めたテーブルの必要ページ数になる。採点講評によると、(5)は(4)より正答率が低かった。容量見積りだけでなく、机上でアクセスパスと性能を予測し、性能目標を決めてから測定することが重要だと述べられている。

設問1(5)(ケ)

公式解答例では「探索行数」です。低クラスタな索引では行へのアクセスがランダムになるため、最悪の場合は探索する1行ごとに別のページを読む。そのため、最大読込みページ数は探索行数と等しくなる。結果行数ではなく、ページから読み込む行数(探索行数)を使う点が重要です。

設問1(5)(コ)

公式解答例では「ページ当たりの平均行数」です。高クラスタな索引では、探索する行が連続したページに詰まって格納されている。そのため、最小読込みページ数は、探索行数を1ページに入る平均行数(表5で求めた値)で割って切り上げた値になる。

設問2(1)(W3)

公式解答例では、直前の作業IDがW1、直後の作業IDがW7です。W3(アクセス権限設計)でGRANT文を設計するには、W1で決まるテーブル名があればよく、制約・索引・表領域の設計(W2、W4〜W6)の結果は必要ない。一方、設計したGRANT文はW7で実行されるので、W7より前に終わっている必要がある。したがってW1の後、W7の前に置けば、W2、W4、W5、W6の四つの作業と並行して進められる。

設問2(1)(W9)

公式解答例では、直前の作業IDがW1、直後の作業IDがW10です。採点講評によると、W9の直前の作業IDは正答率が低かった。W1でCREATE TABLE文を設計すれば、性能測定用データのレイアウト設計に必要な列のデータ型と定義順が分かる。そのため、W9はW1の直後から始められる。生成したデータはW10でロードするので、直後の作業はW10になる。

設問2(2)(DML)

公式解答例では「DML2,DML3」です。仕様(5)により、ANDだけで結ばれた等値比較の対象列がユニーク索引のキー列に一致する場合は、統計情報にかかわらず索引探索になる。DML1は鍵テーブルの主キー{施設ID、 鍵番号}の等値比較なので、主キーのユニーク索引による索引探索に決まる。DML2(店舗利用、索引1は非ユニーク)とDML3(精算明細、索引2のキーは主キーの一部にすぎず非ユニーク)はこの例外に当たらない。そのため、アクセスパスは統計情報に基づいて決まる。

設問2(2)(理由)

公式解答例では「作業W7直後のテーブルは空だと判断されて表探索に決められるから」です。W8を8番目に行うと、W7でテーブルを作成した直後、データをロードする(W10)前に統計情報を取得することになる。仕様(5)により、統計情報からテーブルが空(0行)と判断されると表探索に決まる。採点講評でも、仕様(5)を読めば理由を導けるとされている。40字以内の答案では、「W7直後(ロード前)に統計情報を取得」「テーブルが空と判断」「表探索に決まる」の要素を含める。

設問2(3)

公式解答例では「W10」です。統計情報は、実際のデータ量を反映した状態で取得しなければ、適切なアクセスパスが選ばれない。したがって、W10(ロード実行)で性能測定用データをロードした後にW8を行い、アクセスパスを確認してからW11(DML性能測定)に進むのが適切です。

学習のポイント

主キーとUNIQUE制約の違い、索引のクラスタ性と読込みページ数の関係、容量見積りの計算式の流れ、統計情報を取得する時期とアクセスパスの関係、作業の成果物から考える工程の依存関係を押さえる。

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

関連する過去問一覧

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