応用情報技術者 模擬試験

応用情報技術者 午前 データベース問題10問|解説つき

正規化はどこまで分ければいいの。ACID特性って結局なに。デッドロックはなぜ起きる。データベースを学び始めると、こんな疑問につまずいたことはありませんか。

結論から言えば、データベースは応用情報技術者試験で「午前・午後の両方で得点を稼げる、いちばんおいしい分野」です。午前ではテクノロジ系の中でも出題数が安定していて、毎回数問が確実に問われます。さらに午後ではデータベースが選択問題の定番テーマで、SQLの記述やER図の読み取り、正規化が題材になります。午前でしっかり用語と仕組みを押さえておくと、午後の長文問題で「何を問われているか」がすぐ見抜けるようになります。

頻出テーマは、関係データベースの正規化(第1〜第3正規形)SQLの集合演算と結合トランザクションのACID特性と隔離レベル排他制御とデッドロック、インデックス、障害回復、分散データベースの2相コミットです。つまずきやすいのは、「正規形の段階」と「ACIDの4文字」の取り違え、そしてロックの粒度や隔離レベルが引き起こす現象(ダーティリードなど)です。用語の暗記だけでは選択肢を絞れず、「なぜその操作が必要なのか」を仕組みから理解できているかが問われます。1問ずつ、その理解度を確かめていきましょう。

応用情報レベルで問われやすいテーマを10問に集めました。手が止まった問題は、各解説のリンクをたどってデータベースの詳しい記事で背景を確認できます。

 

Q1. 関係データベースの第1正規形(1NF)の説明として、もっとも適切なものはどれですか?

回答

解説

正解は「A」です。

第1正規形(1NF)は、1つのセルに繰り返し項目や複数の値を持たせず、各セルを単一の値(原子値)にした状態です。たとえば「電話番号」欄に2つの番号を並べて入れている表は、行を分けて1セル1値に整えることで第1正規形になります。

B は第2正規形(部分関数従属の排除)、C は第3正規形(推移的関数従属の排除)の説明で、いずれも1NFの定義ではありません。D は正規化の手順とは無関係な誤りであるため、適切ではありません。

SQLと正規化とはを見る

 

Q2. 第2正規形を満たす表を第3正規形(3NF)にするために排除すべき従属関係はどれですか?

回答

解説

正解は「C」です。

第3正規形(3NF)は、第2正規形を満たしたうえで、推移的関数従属を排除した状態です。推移的関数従属とは、非キー項目が別の非キー項目を介して主キーから間接的に決まる関係を指します。たとえば社員表に「部署コード」と「部署名」を両方持たせると、部署名は部署コードに従属するため、部署マスタに切り出すのが3NFです。

A は第1正規形、B は第2正規形で解消すべき従属関係であり、D は正規形ではなく参照整合性の話であるため、いずれも適切ではありません。

SQLと正規化とはを見る

 

Q3. SQLの集計を行うGROUP句とHAVING句の関係の説明として、もっとも適切なものはどれですか?

回答

解説

正解は「B」です。

集計を行うGROUP句(グループ化)は、指定した列の値が等しい行をまとめ、合計や件数などの集計関数を適用します。まとめた後のグループ単位の絞り込み条件はHAVING句で指定します。一方、集計前の個々の行を絞り込むのはWHERE句です。「行の絞り込みはWHERE、グループの絞り込みはHAVING」と整理すると分かりやすいです。

A はHAVINGとWHEREの役割を取り違えており、C は並べ替え(ORDER句)の説明、D は結合(JOIN)の説明であるため、いずれも適切ではありません。

SQLと正規化とはを見る

 

Q4. 関係データベースの表の結合(JOIN)に関する説明として、もっとも適切なものはどれですか?

回答

解説

正解は「D」です。

内部結合(INNER JOIN)は、両方の表で結合条件に一致した行だけを取り出します。左外部結合(LEFT OUTER JOIN)は、左側の表の行を残し、右側に一致する行がない部分は空値(NULL)で補って出力します。これにより、対応する相手がいない行も結果から消えずに残ります。

A は内部結合を外部結合のように説明した誤り、B は左右の扱いが逆、C は交差結合(直積・全組み合わせ)の説明が逆であるため、いずれも適切ではありません。

SQLと正規化とはを見る

 

Q5. トランザクションのACID特性のうち「原子性(Atomicity)」の説明として、もっとも適切なものはどれですか?

回答

解説

正解は「A」です。

原子性(Atomicity)は、トランザクション内の複数の処理を「全体を確定する」か「まったく行わなかった状態に戻す」かのいずれかにする性質です。途中で障害が起きても中途半端な状態を残さず、ロールバックによって開始前の状態へ戻します。

B は持続性(Durability)、C は分離性(Isolation)、D は一貫性(Consistency)の説明であり、いずれも原子性の定義ではありません。

データベースとはを見る

 

Q6. トランザクションの隔離(分離)レベルと、それによって防げる不都合の説明として、もっとも適切なものはどれですか?

回答

解説

正解は「C」です。

隔離レベル(分離レベル)は、複数のトランザクションを同時に実行するときに、互いの途中経過がどこまで見えるかを制御する設定です。レベルを高くするほど、ダーティリード(未確定データの読み取り)や反復不能読み取りなどの不整合は防ぎやすくなりますが、ロックなどの制御が増えて同時実行性(並行性)は低下しやすくなります。整合性と性能のトレードオフを踏まえて選ぶのが実務の考え方です。

A はレベルを低くするほど整合性が高まるという逆の説明、B は暗号化と混同した誤り、D はトレードオフがないとする誤りであるため、いずれも適切ではありません。

データベースとはを見る

 

Q7. 排他制御で用いるロックと、デッドロックに関する説明として、もっとも適切なものはどれですか?

回答

解説

正解は「B」です。

デッドロックは、複数のトランザクションが互いに相手の保持するロックの解放を待ち合い、どちらも先へ進めなくなる状態です。予防策の一つに、ロックを獲得する資源の順序を全トランザクションでそろえる方法があり、待ち合いの循環を断ち切れます。発生後はいずれかのトランザクションを強制終了(ロールバック)して解消します。

A は共有ロックどうしは両立できる(競合しない)ため誤り、C はデッドロックが複数トランザクション間の待ち合いで起こる点に反する誤り、D は専有ロック中は他から更新できない点に反する誤りであるため、いずれも適切ではありません。

データベースとはを見る

 

Q8. 関係データベースのインデックス(索引)に関する説明として、もっとも適切なものはどれですか?

回答

解説

正解は「D」です。

インデックス(索引)は、特定の列の値から目的の行を素早く探すための仕組みで、B木(B-tree)などの構造を用いて検索を高速化します。一方で、データの挿入・更新・削除のたびに索引も保守する必要があり、その分だけ書き込み時の負荷が増えます。検索性能と更新負荷のバランスを見て、必要な列に絞って作成するのが実務の考え方です。

A は更新系も速くなる・全列に作るのが最適とする誤り、B は暗号化と混同した誤り、C は更新時に保守されないとする誤りであるため、いずれも適切ではありません。

データベースとはを見る

 

Q9. データベースの障害回復で用いる、ログを使った回復処理の説明として、もっとも適切なものはどれですか?

回答

解説

正解は「A」です。

障害回復では、トランザクションの更新内容を記録したログを使って状態を整えます。障害時に未完了だったトランザクションは、更新前情報を使って開始前へ戻すロールバック(後退復帰)で取り消します。完了済みなのにディスクへ反映されていなかった更新は、更新後情報を使って再適用するロールフォワード(前進復帰)で復元します。チェックポイントは回復の起点を作り、処理範囲を狭める役割を持ちます。

B はロールバックとロールフォワードの説明が逆、C はログを用いずバックアップだけで戻せるとする誤り、D はチェックポイントの説明が誤りであるため、いずれも適切ではありません。

データベースとはを見る

 

Q10. 分散データベースで複数サイトの更新の整合性を保つ2相コミット(2フェーズコミット)の説明として、もっとも適切なものはどれですか?

回答

解説

正解は「B」です。

2相コミット(2フェーズコミット)は、分散データベースで複数サイトの更新を矛盾なく確定するための手順です。第1フェーズ(準備フェーズ)で調整役(コーディネータ)が各サイトにコミット可能かを問い合わせ、全サイトが準備完了と答えたときだけ、第2フェーズ(確定フェーズ)で一斉にコミットします。1つでも準備できなければ全サイトでロールバックし、サイト間の整合性を保ちます。

A は調整役を置かず食い違いを許容するとする誤り、C は分散トランザクションに使えないとする誤り、D はサイトごとに勝手に確定してよいとする誤りであるため、いずれも適切ではありません。

データベースとはを見る

 

データベースの基礎をあらためて確認したい時は、データベースとはSQLと正規化とは も参考になります。