難易度は Level 1(やさしめ)〜Level 5(難関) の5段階です。
データベーススペシャリスト試験のサンプル問題(本番形式・解説付き)
データベーススペシャリスト試験(経済産業省(IPA)・データベーススペシャリスト試験(DB))の出題形式を、実際の問題で確かめられます。ここに掲載する5問は、無料の会員登録で解ける模試 第1回(25問)の冒頭から抜粋したオリジナル問題です。当サイトは全519問を本番CBT準拠の形式で収録しており、この5問はそのごく一部にあたります。
設問1
正規化された表をあえて非正規化した場合に生じるリスクとして、最も適切なものはどれか。
- 非正規化した表に対しては結合を含むSELECT文が実行できなくなり、関連する表のデータをアプリケーション側で突き合わせる必要が生じる
- 同じ値が複数の表・行に重複して格納されるため、更新時にすべての重複箇所を漏れなく修正しないとデータ間に不整合が生じるリスクが高まる(正解)
- 重複した列を持つ表では主キー制約が無効になり、同じ主キーの値を持つ行が登録できるようになるため、行の一意性が失われる
- 重複した値を持つ列にはインデックスを作成できなくなるため、非正規化した表の検索ではインデックスが使えず全件走査になる
解説
非正規化によってデータが重複して格納されると、更新時にすべての重複箇所を一貫して修正しなければならず、一部を更新し忘れることでデータ間に不整合が生じるリスクが高まります。これが非正規化の代表的なデメリットです。非正規化してもSELECT文は通常どおり使え、結合も書けます。非正規化と主キー制約の有効・無効は直接関係しません。非正規化した表にもインデックスは通常どおり作成でき、むしろ検索性能向上のために積極的に使われることが多いです。
他の選択肢が誤りである理由
- 「非正規化した表に対しては結合を含むSELECT文が実行できなくなり、関連する表のデータをアプリケーション側で突き合わせる必要が生じる」非正規化してもSELECT文は通常どおり使え、結合も書けます。
- 「重複した列を持つ表では主キー制約が無効になり、同じ主キーの値を持つ行が登録できるようになるため、行の一意性が失われる」非正規化と主キー制約の有効・無効は直接関係しません。
- 「重複した値を持つ列にはインデックスを作成できなくなるため、非正規化した表の検索ではインデックスが使えず全件走査になる」非正規化した表にもインデックスは通常どおり作成でき、むしろ検索性能向上のために積極的に使われることが多いです。
設問2
WAL(ログ先書き)方式を採るDBMSで、あるトランザクションがCOMMITを発行してから、利用者に完了を返すまでの処理の順序として、適切なものはどれか。ここで、更新したデータページの書出しは、チェックポイントなどで後から行われるものとする。
- 変更したデータページをディスクへ書き出す → コミットのログレコードを作る → ログを書き出す → 完了を返す
- コミットのログレコードを作る → 完了を返す → ログバッファをディスクへ書き出す → 書出しの完了を待つ
- コミットのログレコードを作る → ログバッファをディスクへ書き出す → 書出しの完了を待つ → 完了を返す(正解)
- コミットのログレコードを作る → 変更したデータページをディスクへ書き出す → 完了を返す → ログを書き出す
解説
WAL では、コミットを示すログが安定記憶に書かれた時点で、そのトランザクションの耐久性が保証されます。そのため、ログの書出しの完了を待ってから完了を返し、データページの書出しは後回しにできます。完了を先に返すと、直後の障害でコミット済みの更新が失われます。
他の選択肢が誤りである理由
- 「変更したデータページをディスクへ書き出す → コミットのログレコードを作る → ログを書き出す → 完了を返す」データページを先に書き出すと、ログより先にデータが変わり、WAL の原則に反します。コミットのたびにページを書く必要もありません。
- 「コミットのログレコードを作る → 完了を返す → ログバッファをディスクへ書き出す → 書出しの完了を待つ」ログがディスクに届く前に完了を返すと、その直後に障害が起きた時、利用者には完了と伝えた更新が失われます。
- 「コミットのログレコードを作る → 変更したデータページをディスクへ書き出す → 完了を返す → ログを書き出す」データページをコミットのたびに書き出す必要はなく、ログより先にデータを書く順は WAL の原則に反します。
設問3
メタデータリポジトリを用いてデータリネージ(データの発生源から利用先までの流れ)を管理する利点として、最も適切なものはどれか。
- データの発生源から利用先までの流れを記録しておくことで、表の行がどのバックアップに含まれるかが分かり、復旧に使うバックアップを自動で選べる
- テーブルの列ごとに業務上の意味と定義を登録し、部門間で用語の解釈をそろえられる
- 各テーブルへのアクセス者と操作内容を記録し、不正なアクセスを後から追跡できる
- あるテーブルの仕様変更が、下流のどのレポートやアプリケーションに影響するかを事前に特定でき、変更影響分析が容易になる(正解)
解説
データリネージを管理すると、あるデータ項目やテーブルの変更が下流のどの処理・レポートに影響するかを追跡でき、変更時の影響分析やトラブル時の原因調査を効率化できます。リネージはデータの流れと変換の記録で、バックアップの世代管理とは別の仕組みです。用語と定義を登録して解釈をそろえるのはビジネスグロッサリー(用語集)の役割です。リネージはデータの流れを追跡します。アクセス者と操作の記録は監査ログの役割です。リネージが記録するのはデータの発生源から利用先までの流れです。
他の選択肢が誤りである理由
- 「データの発生源から利用先までの流れを記録しておくことで、表の行がどのバックアップに含まれるかが分かり、復旧に使うバックアップを自動で選べる」リネージはデータの流れと変換の記録で、バックアップの世代管理とは別の仕組みです。
- 「テーブルの列ごとに業務上の意味と定義を登録し、部門間で用語の解釈をそろえられる」用語と定義を登録して解釈をそろえるのはビジネスグロッサリー(用語集)の役割です。リネージはデータの流れを追跡します。
- 「各テーブルへのアクセス者と操作内容を記録し、不正なアクセスを後から追跡できる」アクセス者と操作の記録は監査ログの役割です。リネージが記録するのはデータの発生源から利用先までの流れです。
設問4
銀行の口座Aから口座Bへ10万円を振り込む処理を1つのトランザクションとして実行する。この処理の途中でシステム障害が発生し、口座Aから10万円を引き落とす更新は完了したが、口座Bへ10万円を加算する更新は実行されなかった。この結果としてデータベースに10万円が「消えた」状態のまま残ってしまうことがあってはならない、というトランザクションへの要求は、ACID特性のうちどれに該当するか。
- 一貫性(Consistency)
- 独立性(Isolation)(同時に実行されている他のトランザクションから処理途中の状態が見えないよう、ロックや多版管理によって相互の干渉を抑える特性)
- 耐久性(Durability)
- 原子性(Atomicity)(正解)
解説
トランザクションに含まれる複数の更新は、すべて実行されるか、すべて取り消されるかのいずれかでなければならないという性質が原子性(Atomicity)です。設問のように一部の更新だけが反映され残高の合計が変化してしまう状態を防ぐのが原子性の役割です。一貫性は制約(残高の合計が変化しない等)を満たした状態を保つことを指す性質で、「全部実行されるか全く実行されないか」という性質そのものは原子性が担います。独立性は複数のトランザクションが同時実行された際に互いの処理が干渉しないようにする性質であり、単一トランザクション内の更新が部分的にしか反映されない問題とは直接関係しません。耐久性はコミットが完了した更新が障害後も失われないことを保証する性質であり、コミット前に一部の更新だけが中途半端に残ってしまう問題を防ぐのは原子性です。
他の選択肢が誤りである理由
- 「一貫性(Consistency)」一貫性は制約(残高の合計が変化しない等)を満たした状態を保つことを指す性質で、「全部実行されるか全く実行されないか」という性質そのものは原子性が担います。
- 「独立性(Isolation)(同時に実行されている他のトランザクションから処理途中の状態が見えないよう、ロックや多版管理によって相互の干渉を抑える特性)」独立性は複数のトランザクションが同時実行された際に互いの処理が干渉しないようにする性質であり、単一トランザクション内の更新が部分的にしか反映されない問題とは直接関係しません。
- 「耐久性(Durability)」耐久性はコミットが完了した更新が障害後も失われないことを保証する性質であり、コミット前に一部の更新だけが中途半端に残ってしまう問題を防ぐのは原子性です。
設問5
分散処理フレームワークにおけるMapReduceの基本的な処理の流れとして、最も適切なものはどれか。
- 大量のデータを複数のノードに分割し、各ノードで並列に変換処理(Map)を行った後、その結果をキーごとに集約処理(Reduce)する(正解)
- MapReduceはリレーショナルデータベースのインデックス作成専用の仕組みであり、既存テーブルへの索引付けに使われる機能だと位置づけられる
- 単一のノード(single node)だけで全データを順番に処理する方式であり、複数ノードへの分散は行わないため、データ量が増えても構成台数は変わらない
- MapReduceは処理を並列化せず直列に実行し、ノード間の同時実行を制御する仕組みは持たないアーキテクチャである
解説
MapReduceは、大量のデータを複数のノードに分割して並列に変換処理(Map)を行い、その結果をキーごとに集約処理(Reduce)することで、大規模データの分散処理を実現するプログラミングモデルです。MapReduceはインデックス作成専用の仕組みではなく、汎用的な大規模データの並列処理モデルです。単一ノードで順番に処理する方式はMapReduceの特徴ではなく、複数ノードでの並列分散処理がMapReduceの本質です。MapReduceは複数ノードでの並列実行を前提とした仕組みであり、常に直列実行されるという説明は誤りです。
他の選択肢が誤りである理由
- 「MapReduceはリレーショナルデータベースのインデックス作成専用の仕組みであり、既存テーブルへの索引付けに使われる機能だと位置づけられる」MapReduceはインデックス作成専用の仕組みではなく、汎用的な大規模データの並列処理モデルです。
- 「単一のノード(single node)だけで全データを順番に処理する方式であり、複数ノードへの分散は行わないため、データ量が増えても構成台数は変わらない」単一ノードで順番に処理する方式はMapReduceの特徴ではなく、複数ノードでの並列分散処理がMapReduceの本質です。
- 「MapReduceは処理を並列化せず直列に実行し、ノード間の同時実行を制御する仕組みは持たないアーキテクチャである」MapReduceは複数ノードでの並列実行を前提とした仕組みであり、常に直列実行されるという説明は誤りです。
続きは、会員登録なしでそのまま50問解けます。採点と解説つきで、上と同じ本物の問題です。
登録なしで50問解く