応用情報技術者 ― データベース 問題一覧・解説
全15問の問題文・選択肢・正解・解説を掲載しています。 フラッシュカード形式で実際に解いてみたい方は「練習する」ボタンをご利用ください。
🎴 フラッシュカードで練習する(15問)リレーショナルデータベースにおいて、行を一意に識別するための列を何と呼ぶか。
📝 解説
主キー(プライマリキー)はリレーショナルデータベースのテーブルで「各行を一意に識別するための列(または列の組み合わせ)」です。社員証番号に例えると、同姓同名の社員が複数いても社員証番号は必ず一意なので、1人を特定できます。主キーはNULL値を含まず、テーブル内で重複しない値を持つという2つの制約があります。外部キーは「別のテーブルの主キーを参照する列」で、テーブル間の関係を表します。インデックスはデータ検索を高速化するための索引です。ビューはSQL文を仮想的なテーブルとして定義したものです。「主キー=一意識別・NULLなし・重複なし」という定義を確実に覚えておきましょう!
データベースの正規化の主な目的はどれか。
📝 解説
正規化はデータの重複や矛盾を排除するためにテーブル設計を整理するプロセスです。住所録で考えると、「顧客名・住所・商品名・単価」を1つの表にまとめると、同じ顧客が複数の商品を購入するたびに顧客名と住所が重複して入力されます。顧客テーブルと注文テーブルに分ければ重複がなくなり、住所変更も1か所を直すだけで済みます。これが正規化の目的「データ重複の排除と更新時異常の防止」です。第1正規形(繰り返し項目の排除)→第2正規形(部分関数従属の排除)→第3正規形(推移的関数従属の排除)という段階があります。誤答の「1つの表にまとめる」は正規化と逆の方向です!
SQLにおいて、特定の条件に合致する行を抽出するために使用する句はどれか。
📝 解説
SQLのWHERE句は「条件を満たす行だけを絞り込む」フィルターの役割を担います。図書館の蔵書リストから「2020年以降に出版された本だけ」を取り出すのに似ています。例えば「SELECT * FROM 商品 WHERE 価格 < 1000」なら1000円未満の商品だけを抽出します。混同しやすい句との違いを整理すると、GROUP BYは「カテゴリ別に集計するためのグループ化」、ORDER BYは「取得したデータを並べ替えるだけで絞り込みはしない」、HAVINGは「GROUP BYで集計した後のグループを絞り込む」ために使います。「WHERE→行を絞る」「GROUP BY→グループ化」「HAVING→グループ後の絞り込み」「ORDER BY→並べ替え」という役割の違いを整理しましょう!
トランザクションの性質「ACID」のうち、障害が発生しても完了した更新結果が失われない性質はどれか。
📝 解説
トランザクションのACID特性のD、耐久性(Durability)は「コミットが完了した処理結果は、その後に障害が発生してもデータベースに永続的に保存される」性質です。銀行ATMでの振り込みが「完了しました」と表示された後に停電が起きてもデータが消えないことを保証します。これはトランザクションログをディスクに書き出すことで実現されます。他のACID特性:A(原子性Atomicity)=処理が全て成功か全て失敗か、C(一貫性Consistency)=処理前後でデータの整合性が保たれる、I(独立性Isolation)=複数トランザクションが互いに干渉しない。「コミット後は絶対失われない=耐久性(D)」と覚えましょう!
複数のトランザクションが互いに相手のロック解除を待ってしまい、処理が進まなくなる状態を何と呼ぶか。
📝 解説
デッドロックは「2つ以上のトランザクションが互いの持つロックを待ち合って永久に進めなくなる」状態です。交差点で4方向から来た車が互いに道を譲らず動けなくなる渋滞に似ています。例えばトランザクションAがリソースXをロックしてYを待ち、BがYをロックしてXを待つと互いに相手を待ち続けます。解消策は「タイムアウト後に一方を強制ロールバックする」か「待ちグラフで循環を検出して中断する」方法があります。予防策は「全トランザクションでリソースの取得順序を統一する」ことです。誤答の「ライブロック」は互いに避けようとして永久に状態が変わらないケース、「ダーティリード」は未コミットデータを読んでしまう問題です!
SQLでデータを並べ替えて取得する際に使用する句はどれか。
📝 解説
SQLのORDER BY句は「取得した結果を指定した列の値で並べ替える」命令です。図書館で本を請求番号順に並べるように、SELECT文の取得結果を任意の順序に整えます。「ORDER BY 年齢 DESC」なら年齢の大きい順(降順)、「ORDER BY 名前 ASC」なら名前のあいうえお順(昇順)になります。DESCを省略するとASC(昇順)がデフォルトです。GROUP BYは「グループ化して集計するため」の句で並べ替えとは別の目的です。「SORT BY」はSQLの標準句ではありません。DISTINCTは重複行を除外するためのキーワードです。「並べ替えにはORDER BY、グループ化にはGROUP BY」という使い分けを確実に押さえましょう!
一貫性制約(参照制約)を維持するために、外部キーは何を参照する必要があるか。
📝 解説
外部キー(参照制約)は「別のテーブルの主キーを参照することで、テーブル間のデータの整合性を保証する」仕組みです。住民票の市区町村コードが実在するコードでなければならないように、注文テーブルの「顧客ID」に存在しない顧客IDを登録しようとするとエラーになります。これを参照整合性と言い、外部キーは必ず参照先テーブルの主キー(または一意制約が付いた列)を参照する必要があります。主キーを削除しようとして外部キーから参照されている場合もエラーとなり、孤立したデータの発生を防ぎます。「外部キー→参照先の主キーを指す→整合性保証」という流れをしっかり理解しましょう!
データベースの障害回復において、ログファイルを用いてコミット前の状態に戻す操作はどれか。
📝 解説
ロールバックはトランザクションを「コミット前の状態に戻す」操作です。料理で失敗したとき鍋ごと捨てて最初からやり直すイメージです。銀行振り込みで「引き落とし完了後に入金処理が失敗」という半端な状態を作らないため、一連の処理を全て取り消して元の残高に戻します。これがACIDのA(原子性=全か無か)の実現手段です。対照的なロールフォワードは「バックアップから復元後、ログを使って最新状態まで再適用する」操作です。チェックポイントはロール処理の範囲を限定するためにデータベースの状態を定期的に記録する仕組みです。「ロールバック=元に戻す」「ロールフォワード=ログで最新状態へ進める」という違いを覚えましょう!
NoSQLデータベースの特徴として、適切なものはどれか。
📝 解説
NoSQLデータベースは「スキーマレスで大量の非定型データを高速処理できる」データベースです。RDB(リレーショナルDB)がきっちり決まった棚(スキーマ)に整然とデータを格納する百貨店の倉庫なら、NoSQLは形を問わず何でも入れられる大型雑貨倉庫のイメージです。SNSの投稿・ログデータ・センサーデータなど多様かつ大量のデータをリアルタイムで処理するのが得意で、水平スケーリング(サーバを横に追加)も容易です。MongoDB(ドキュメント型)・Redis(キーバリュー型)・Cassandra(カラム型)が代表例。誤答の「JOINが得意」「ACID常に最優先」「SQLのみ使用」はいずれもRDBの特徴です!
関係演算のうち、2つのテーブルから共通の列の値が一致する行を組み合わせて新しい表を作る操作はどれか。
📝 解説
結合(JOIN)は「2つ以上のテーブルで共通の列の値が一致する行を組み合わせて新しい表を作る」関係演算です。社員名簿と売上記録を社員IDで照合して、社員名と売上額を1行にまとめるイメージです。SQLではINNER JOIN(両方に一致する行のみ)、OUTER JOIN(片方にしかない行もNULLで含む)などがあります。他の関係演算との違いを整理しましょう。射影(PROJECTION)は「特定の列だけを取り出す(不要な列を削除する)」操作。選択(SELECTION)は「特定の条件に合う行だけを取り出す」操作です。「結合=2つのテーブルを横につなぐ」「射影=列を絞る」「選択=行を絞る」この3つの関係演算の違いを確実に押さえましょう!
トランザクションのACID特性のAは何を表すか?
📝 解説
トランザクションのACID特性は「信頼性の高いデータベース処理の4条件」を表す重要な概念です。銀行の振込処理を例に考えましょう。A口座から1万円をB口座へ振り込む際、「A口座の残高を減らす」と「B口座の残高を増やす」の2操作は必ずセットで成功するか、セットで取り消されなければなりません。これがAtomicity(原子性)です。操作が「すべて完了(コミット)」か「すべて取り消し(ロールバック)」かのどちらかになり、中間状態(A口座だけ減ってB口座に届いていない状態)が存在してはいけません。残りの3つを整理すると、Consistency(一貫性)はトランザクション前後でデータの整合性が保たれること、Isolation(独立性/分離性)は複数トランザクションが互いに干渉しないこと、Durability(耐久性/永続性)はコミットされたデータは障害後も保持されることです。「ACID=原子性・一貫性・独立性・耐久性」の4つをセットで確実に覚えましょう!
SQLでテーブルからデータを取得する際に使用する基本的なコマンドは?
📝 解説
SQLはリレーショナルデータベースを操作するための標準言語です。図書館の司書に「〇〇という本を持ってきてください」と依頼するように、データベースに「〇〇のデータを取得してください」と命令する言葉がSQLです。データを取得する際の基本コマンドはSELECTです。基本構文は「SELECT 列名 FROM テーブル名 WHERE 条件」で、英語の「選んで(SELECT)、テーブルから(FROM)、条件は(WHERE)」という語順と自然に対応しています。他の主要コマンドも覚えておきましょう。INSERTはデータの挿入(新しい行の追加)、UPDATEはデータの更新(既存行の変更)、DELETEはデータの削除(行の削除)です。誤答のGET、FETCH、RETRIEVEはSQLには存在しないコマンドです。「SELECT=データ取得・検索」はSQLの最頻出操作で、JOINやGROUP BYなどと組み合わせた複合的なクエリも試験に出ます。まずSELECT文の基本構文を完全に習得しましょう!
第3正規形の条件として正しいものはどれか?
📝 解説
正規化はデータベースの設計において「データの重複と矛盾を排除する」プロセスです。第3正規形(3NF)は第2正規形をさらに一歩進めたものです。まず第1正規形(1NF)は繰り返しグループをなくしてすべての値を原子的にすること。第2正規形(2NF)は1NFを満たし、非キー属性が主キー全体に完全関数従属すること(複合主キーの一部への依存を排除)。そして第3正規形(3NF)は2NFを満たした上で「推移的関数従属がないこと」が条件です。推移的関数従属とは「主キーA→非キーB→非キーC」という間接的な依存のことです。例えば「受注テーブル」に受注ID→担当者ID→担当者氏名という依存がある場合、担当者氏名は受注IDに直接依存しているのではなく担当者IDを経由しており、これを推移的関数従属といいます。3NFでは担当者テーブルを別に分離します。誤答の「部分関数従属がないこと」は2NFの条件、「繰り返しグループがないこと」は1NFの条件です。
デッドロックとは何か?
📝 解説
デッドロックは「複数のトランザクションが互いに相手の保持するリソースのロック解除を待ち合い、誰も先に進めなくなった状態」です。道路の交差点でお互いが相手に道を譲り合って(実は譲らずに)誰も動けない渋滞に例えると分かりやすいでしょう。例えばトランザクションAが「テーブル1をロック→テーブル2のロックを要求」、同時にトランザクションBが「テーブル2をロック→テーブル1のロックを要求」した場合、AはBのロック解除待ち、BはAのロック解除待ちとなり無限に待ち続けます。デッドロックを検出後は一方のトランザクションを強制的にロールバックして解消します。デッドロックの予防策として、「全トランザクションが同じ順序でリソースをロックする」ルールを設けることが有効です。誤答の「一つのトランザクションが長時間ロックを保持」はロックタイムアウトの問題、「接続が切断された状態」や「ロールバックされた状態」はデッドロックの定義とは別の概念です。
インデックスを作成する主な目的は何か?
📝 解説
インデックス(索引)はテーブルの特定列に対して作成するデータ構造で、本の索引(巻末の「あいうえお順の用語と掲載ページ一覧」)と全く同じ役割を果たします。本文を全ページスキャンせずに目的のページをすぐ見つけられるように、インデックスがあればテーブルの全行スキャン(フルスキャン)なしに目的のデータをすばやく検索できます。特にBツリーインデックスは検索・範囲検索に強く、計算量O(log n)で高速に検索できます。一方でインデックスはデータと別に管理するため、INSERT・UPDATE・DELETEのたびにインデックスも更新するオーバーヘッドが発生します。「読み込みは速くなるが書き込みはやや遅くなる」というトレードオフです。誤答の「データの整合性確保」は主キー制約や外部キー制約の役割、「ストレージ容量の節約」はインデックスが追加容量を必要とするため真逆、「バックアップの高速化」はインデックスとは無関係です。「インデックス=検索・参照の高速化(書き込みオーバーヘッドと引き換え)」と覚えましょう!