【基本情報技術者試験】第14回:データベース問題のアプローチ!正規化・SQL・トランザクションを徹底攻略





【基本情報技術者試験】第14回:データベース問題のアプローチ!正規化・SQL・トランザクションを徹底攻略




【基本情報技術者試験】第14回:データベース問題のアプローチ!正規化・SQL・トランザクションを徹底攻略

前回(第13回)は、アルゴリズム問題の攻略について解説し、疑似言語やデータ構造、典型的なソート・探索のパターンを学習しました。今回は、午後試験でも人気かつ頻出のデータベース問題に焦点を当てます。

データベース問題では、ER図や正規化SQLクエリの読解や作成トランザクション管理など多岐にわたるテーマが扱われます。どれもITエンジニアにとって重要な知識領域であり、しっかり勉強しておけば午後試験の得点源になること間違いなしです。この記事では、午後問題に特化したデータベースの読み解き方と解答手順を詳しく解説します。


1. データベース問題の特徴と出題傾向

1-1. 午後試験でのデータベース問題

基本情報技術者試験の午後問題では、データベースに関する大問が出題されることが多く、以下のような構成になるケースが典型的です。

  • ER図やテーブル定義が与えられ、それに基づく設問(正規化やキーの説明など)
  • SQL文が登場し、実行結果や問い合わせの意図を問う問題
  • トランザクション管理や整合性制約、ロック機構などの概念を問う記述問題
  • システム運用上の観点で、バックアップやリカバリ方法を問う問題が含まれる場合もある

大半が長文形式で、テーブル構造やサンプルデータが示され、その上で数個の設問に答えるパターンです。内容は実務をイメージしたものになっており、どれだけ実践感覚をもって理解できるかがポイントとなります。

1-2. 問題形式の例

具体的にはこんなイメージの問題が出されます。

  1. 「受注管理システム」におけるER図が掲載され、主キー外部キーの設定について説明させる。
  2. 顧客テーブル商品テーブル受注テーブルなど複数のテーブル定義があり、SELECT文を実行した結果どうなるかを問う。
  3. UPDATEDELETEの実行によるロック競合やデッドロックをイメージさせ、トランザクションの隔離性ロックの粒度について考察させる。
  4. 正規化の手順を問われ、正規形(第1〜第3正規形)の定義や具体的なテーブル分割を答えさせる。

いずれも午前試験の知識がそのまま活用できる反面、長文読解と応用力が必要とされます。


2. ER図と正規化問題の攻略

2-1. ER図の読み解き方

データベース問題では、エンティティ(表)リレーションシップ(関係)を示すER図が出題されることがあります。把握すべきポイントは:

  • エンティティ名属性(カラム)主キー
  • 多重度(1対1、1対多、多対多)
  • 多対多を解消するための中間テーブルの有無

問題としては、「どの属性が主キーとしてふさわしいか」「外部キーはどれか」「リレーションシップの多重度を間違えた場合、どんな不都合があるか」などが問われます。

2-2. 正規化の手順とよくある落とし穴

また、正規化に関する問題も定番です。第1正規形〜第3正規形にかけて:

  • 第1正規形(1NF): 繰り返し属性の排除。列は原子的な値を持たせる。
  • 第2正規形(2NF): 複合主キーの場合に生じる部分関数従属を排除。
  • 第3正規形(3NF): 非キー属性同士の推移的従属を排除(例:部署名は部署IDから分かるので部署テーブルに分離、など)。

午後試験では、1つの大きなテーブルが与えられ、「このテーブルを正規化せよ」「適切な主キーと、切り出すべき属性を示せ」といった出題形式があります。正規化の落とし穴として、

  • 「顧客ID」と「注文日」だけで主キーとみなしているが、実は一意にならないなどキーの見極め
  • 「支店名」や「担当部署名」などがテーブル内に重複記載されているが、別テーブルに分けるべきかどうか

過去問を通じて「正規化するときにどんな視点で分割するか」を身につければ、解答もスムーズになるでしょう。


3. SQLクエリ問題へのアプローチ

3-1. SELECT文の読解

午後試験では、SQL文を読み解き、結果セットがどうなるかを問われる問題が頻出です。特にSELECT文の以下の要素を着目して確認しましょう。

SELECT カラムA, カラムB, ...
FROM テーブルX
[JOIN テーブルY ON 条件]
WHERE 条件式
GROUP BY ...
HAVING ...
ORDER BY ...
  • JOINの種類(INNER, LEFT OUTER, RIGHT OUTER など)
  • 集約関数(COUNT, SUM, AVG, MAX, MIN)とGROUP BYHAVING
  • WHEREHAVINGの使い分け(HAVINGはグループに対する条件)
  • ORDER BYの並び順やカラム

設問例:「このSQLを実行すると、商品ごとの受注件数が多い順に表示される。3番目に表示される商品IDと件数を答えよ」など。

対策としては、問題文のサンプルデータを見ながら実際にデータをグループ化・集計してテーブルを書き出すと効果的です。また、複数テーブルをJOINしている場合は、結合条件を見落とすと答えがずれてしまうので注意しましょう。

3-2. INSERT/UPDATE/DELETEと制約

SQLではSELECT文だけでなく、INSERTUPDATEDELETEが出ることもあります。特に以下の点が問われやすいです。

  • 外部キー制約をかけているとき、親テーブルにない主キーをINSERTできるか
  • ON DELETE CASCADEなどの設定により、関連テーブルが自動削除されるかどうか
  • 一意制約(UNIQUE)NOT NULL制約を持つカラムに対して、不正な値をINSERT/UPDATEしようとしていないか

午後試験だと、「このUPDATE文を実行しようとするとエラーが出る。その原因は何か」といった設問が出る可能性があります。制約関連テーブルとの関係をしっかり理解しておきましょう。


4. トランザクション管理と並行制御

4-1. トランザクションとACID特性

基本情報技術者試験では、トランザクション管理ロールバックコミットの仕組みが出題されることがあります。特に有名なのがACID特性(原子性・一貫性・独立性・永続性)です。

  • Atomicity(原子性): トランザクション内の操作はすべて成功か、すべて失敗か。途中で止まらない。
  • Consistency(一貫性): トランザクション後もDB整合性が保たれる。
  • Isolation(独立性): 同時実行されるトランザクション同士が互いに影響を与えない。
  • Durability(永続性): コミットされた結果は障害が起きても失われない。

設問例:「コミットした後にサーバが落ちたが、データは正しく保存されていた。この特性はACIDのうちどれに該当するか」=Durabilityなど。

4-2. ロック機構とデッドロック

また、排他制御ロックに関する問題も午後試験で登場します。典型的には:

  • 共有ロック(Sロック): 読み取り専用のロック。複数のトランザクションが同時に取得できる。
  • 排他ロック(Xロック): 書き込み処理用のロック。他のトランザクションは同時にロックできない。

さらに、デッドロックが発生する状況(2つのトランザクションがお互いが保有するリソースを待ち合う状態)を問われ、「どのような回避策があるか」を答えさせる問題もあります。2相ロック(Two-Phase Locking)などの原理を知っておくと理解が深まります。


5. 午後試験データベース問題:解き方の手順

5-1. 問題文とテーブル定義をざっと把握

まずは問題文全体を眺め、システム概要テーブル構成を大まかに理解します。ここで意識すべきは:

  • テーブル名主キー外部キーの存在
  • 属性(カラム)とその意味。商品名、在庫数、受注数など。
  • 設問がどの辺りを狙っているか(SQLの実行結果か、ER図の不備か、トランザクションか…)

細部に入る前に全体構造を把握すると、次のステップが格段にスムーズです。

5-2. 設問を先に読む

午後試験では、長文問題を最後まで読まなくても「設問」を先にチェックするやり方がおすすめです。特にデータベース問題は「どのSQLクエリの実行結果を答えよ」「ここに追加すべき外部キーを答えよ」など、ゴールがはっきりしている場合が多いです。

  • 設問を先に把握 → 必要に応じた情報をピンポイントで探す → 時間短縮

5-3. 必要な情報を問題文から抽出し、メモを作る

SQL文やER図を見ながら、テーブル構造サンプルデータをメモとしてまとめます。例:

顧客テーブル (Customer)
--------------------------------
顧客ID(PK): int
顧客名: varchar(50)
住所: varchar(100)
... など

注文テーブル (Orders)
--------------------------------
注文ID(PK): int
顧客ID(FK): int
商品ID(FK): int
注文日: date
数量: int
... など

正規化や制約などは、この構造メモをもとに考えると理解しやすいです。

5-4. 設問ごとに回答を導く

それぞれの設問で必要な作業が変わるので、以下の流れを意識します:

  1. 正規化・ER図関連:
    • 主キー・外部キー・重複属性などを確認
    • 中間テーブルが必要かどうかを判断
  2. SQL実行結果:
    • SELECT, JOIN, GROUP BY, HAVING, ORDER BY の順番で結果をシミュレート
    • サンプルデータを用いて実際の出力をイメージする
  3. トランザクション管理:
    • ロックの種類やデッドロック発生条件を分析
    • ACID特性に沿ってどの特性が関わるか判断

答えを出したら、余裕があれば見直しして論理的に破綻がないか確認します。


6. 効率的な勉強法:過去問+SQL演習で実践力を養う

6-1. 過去問演習が最優先

データベース問題の対策は、過去問の反復演習が最も効果的です。3〜5年分の過去問を通じて:

  • 頻出パターン(正規化、SELECTのJOIN、GROUP BYなど)
  • 問われやすい制約や設定の不備
  • ロックやトランザクションの典型的なトラブル事例

を把握し、実際に解答プロセスを試してみましょう。解説を読むだけでなく、紙に表を書いてSQL結果を導くなど実践的に取り組むのがポイントです。

6-2. 自分でSQLを試すと理解が深まる

可能であれば、ローカル環境でデータベース(MySQLやPostgreSQLなど)を使い、簡単なテーブルを作ってSQLを実行してみましょう。

  • CREATE TABLEでテーブル定義
    – 主キーや外部キーを設定してみる
  • INSERTでサンプルデータを投入
  • SELECTで実際の出力を確認

現実にSQLを動かす経験があれば、午後試験のSQL問題でも「このJOINだとこうなるな」と直感的にわかるようになり、回答スピードと正確性が高まります。

6-3. 模擬試験や問題集で総合演習

午前知識×午後応用力を統合するために、市販の模擬試験問題集オンラインの模試を利用するのも有効です。時間配分を意識しながらデータベース問題を解くことで、本番同様のプレッシャーを体験しながらトレーニングできます。


7. まとめと次回予告

  • データベース問題の特徴: ER図、正規化、SQL文、トランザクション管理が柱。長文を踏まえた実践的な設問が多い。
  • ER図・正規化: 主キー・外部キー、多対多の解消、部分関数従属や推移的従属に注意。
  • SQL: SELECT文のJOIN、GROUP BY、HAVING、ORDER BYが頻出。INSERT/UPDATE/DELETEと制約の関連にも気を配る。
  • トランザクション管理: ACID特性、ロック機構、デッドロックなど並行制御の概念を押さえる。
  • 解答の手順: 問題文全体把握 → 設問を先に読む → テーブル定義やSQLをメモ化 → 段階的に回答。
  • 学習法: 過去問演習+実機でSQL実行が最強。模試や問題集で時間制限下の練習も重要。

データベースは午後試験での得点源になりやすい分野です。基礎知識を固め、問題文の実例に即した演習を重ねておけば、高いスコアが期待できます。次回(第15回)は、ネットワーク・セキュリティ問題の対策を取り上げ、OSI参照モデルやプロトコル分析、ファイアウォール設定などについて解説する予定です。お楽しみに!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です