【基本情報技術者試験】第6回:データベース基礎を徹底攻略!ERモデル・正規化・SQLの基本から試験対策まで
前回(第5回)はネットワーク分野を取り上げ、OSI参照モデルやTCP/IP、ルータ・スイッチなどの基礎を学習しました。今回(第6回)は、データベースにフォーカスします。現代の情報システムでは、データベースが非常に重要な役割を担っています。基本情報技術者試験でも、データベース関連の問題は午前試験・午後試験ともに頻出領域です。
本記事では、リレーショナルデータベースの基本概念、ERモデル(エンティティ・リレーションシップモデル)の描き方、正規化の考え方、SQLの代表的な文法など、出題頻度が高いポイントを中心に網羅的に解説します。また、トランザクション管理や並行制御(ロック機構)といった応用的な内容にも触れ、午後試験対策にも役立つ知識をまとめていきます。
1. リレーショナルデータベースの基礎理解
1-1. リレーショナルモデルの概要
リレーショナルデータベース(RDB)は、表(テーブル)の形式でデータを管理するシステムです。1つのテーブルは行(レコード)と列(カラム)の二次元構造で表されます。各行に1件分のデータ、各列に属性(例:名前、住所、年齢など)が対応します。
- 行(レコード): 個別のデータの集合。例:社員テーブルにおける「社員Aの情報」1件分。
- 列(カラム): 属性の種類。例:社員番号、氏名、所属部署など。
リレーショナルモデルでは、「関係演算」(選択、射影、結合など)を用いて複数テーブル間のデータを扱うことが可能です。実際にはSQLを使ってこれらの操作を行うのが一般的です。
1-2. 主キー・外部キーの考え方
テーブルを作るときは、各行を一意に識別するための主キー(Primary Key)を定義します。主キーには必ず他の行と重複しない値が入るよう制約を付けます。例:社員テーブルなら社員番号、商品テーブルなら商品コードなどが主キーになりやすいです。
- 主キー: 各レコードを一意に特定するための列(または複数の列の組み合わせ)。UNIQUE制約とNOT NULL制約がつく。
- 外部キー: 他のテーブルの主キーを参照する列。テーブル間の関連を明確にするために設定する。例:受注テーブルの「顧客ID」列が、顧客テーブルの「顧客ID(主キー)」を参照する。
基本情報技術者試験では、主キー・外部キーの定義や、外部キー制約(外部キーが参照先の主キーに存在しない値を取れない、など)に関する問題がよく出題されます。テーブル間の紐づけを正しく理解するためにも、キーの概念はしっかり押さえておきましょう。
2. ERモデル(エンティティ・リレーションシップモデル)の基礎
2-1. ER図の構成要素
データベース設計を行う際、現実世界の事象を「エンティティ(Entity)」「リレーションシップ(Relationship)」「属性(Attribute)」として抽象化し、ER図(ERD: Entity-Relationship Diagram)を作成する手法が一般的です。
- エンティティ: 管理対象となる物や概念を表す。例:社員、商品、注文など。
- リレーションシップ: エンティティ間の関連を表す。例:社員と部署の「所属」関係、商品と受注の「含まれる」関係など。
- 属性: エンティティが持つ性質や情報。例:社員エンティティの「氏名」「年齢」「入社年月日」など。
ER図でよく使われる表記法に、IDEF1XやChenの記法などがあります。試験問題では、以下のような観点が問われることが多いです:
- エンティティを正しく抽出しているか?
- リレーションシップの多重度(1対1、1対多、多対多)が正しいか?
- 主キー候補となる属性が明確になっているか?
2-2. リレーションシップの多重度
ER図では、エンティティ間の関連が「1対1」「1対多」「多対多」のいずれかになるかを明示します。この多重度が適切でないと、データ構造に不整合が生じやすくなります。
- 1対1: 一方のエンティティに対して他方のエンティティが1つのみ対応する。例:社員とロッカー番号(社員1人に対し専用のロッカー1つ)。
- 1対多: 一方のエンティティが他方の複数のエンティティと関連を持ちうる。例:部署と社員(1つの部署に複数の社員が所属)。
- 多対多: それぞれのエンティティが互いに複数の関連を持つ場合。例:学生と講義(1人の学生が複数の講義を受講し、1つの講義には複数の学生が参加)。
多対多を直接テーブルに持たせると複雑になりやすいため、中間テーブル(リレーションテーブル)を置いて「1対多」×「1対多」の形に分解するのが基本的な設計手法です。基本情報技術者試験でも、この多対多の解消方法が問われることがあります。
2-3. ER図作成の流れと注意点
- 要件定義: 業務上管理したいデータや処理を洗い出し、エンティティ候補を抽出する。
- エンティティと属性の定義: エンティティにどのような属性が必要か、主キーは何かを検討。
- リレーションシップの確立: エンティティ間のつながりを洗い出し、多重度を決める。
- 多対多の解消: 必要に応じて中間テーブルを作成して関係を「1対多」「1対多」に分解。
この段階で得られたER図をもとに、論理データモデル(テーブル設計)を行い、最終的には物理データベース設計(インデックスやパーティションなどの詳細設計)へと進みます。
3. 正規化手法(Normalization)
正規化とは、データの重複や不整合を防ぎ、効率的で整合性の高いテーブル構造を設計するための手法です。以下に代表的な正規形とポイントをまとめます。
3-1. 第1正規形(1NF)
- すべての属性が原子的(アトミック)な値を持つようにする(繰り返し属性や配列を持たない)。
- 例:住所を1つのカラムに「東京都◯◯区△△1-1-1, 2-2-2」と羅列するのではなく、「住所」という列は1つの住所のみを持つ。
3-2. 第2正規形(2NF)
- 主キーが複数の列で構成される場合、主キーの一部にのみ依存する属性を別テーブルに分離する。
- 「部分関数従属を排除」することでデータ重複や更新不整合を減らす。
3-3. 第3正規形(3NF)
- 主キーではない属性同士の推移的従属を排除する。
- 例:社員テーブルに「部署ID」「部署名」が両方入っていて、部署名は部署IDから分かる場合、部署名は「部署テーブル」に切り出す。
さらに高次の正規形としてBCNF(Boyce-Codd Normal Form)などもありますが、基本情報技術者試験の範囲では第1~第3正規形を正しく理解できていれば十分です。問題としては「以下のテーブルは第何正規形か」「正規化手順を踏まえて設計し直すとどうなるか」といった出題が多いです。
4. SQLの基本構文
RDBを操作・定義するための標準言語がSQL(Structured Query Language)です。基本情報技術者試験では、データ操作言語(DML)とデータ定義言語(DDL)が問われることが多いです。
4-1. データ操作言語(DML)
- SELECT: テーブルからデータを取得(検索)する。
- INSERT: 新規レコードをテーブルに挿入する。
- UPDATE: 既存レコードの内容を更新する。
- DELETE: 既存レコードを削除する。
SELECT文は試験でも頻出です。代表的な構文例を示します:
SELECT カラム名1, カラム名2, ... FROM テーブル名 WHERE 条件 GROUP BY グループ化条件 HAVING グループ条件 ORDER BY ソート条件;
また、JOINを用いた結合や、サブクエリなど、複数テーブルを操作する手法も重要です。基本情報技術者試験では、内部結合(INNER JOIN)や外部結合(LEFT OUTER JOINなど)に関する問題もよく登場します。
4-2. データ定義言語(DDL)
- CREATE: テーブルやインデックスなどを新規作成する。
- ALTER: 既存テーブルの構造を変更する(列追加、列削除など)。
- DROP: テーブルやインデックスを削除する。
加えて、制約(CONSTRAINT)の定義もDDLの重要要素です。主キー(PRIMARY KEY)や外部キー(FOREIGN KEY)、一意制約(UNIQUE)などを設定し、データの整合性を高めます。
5. トランザクション管理と並行制御
データベースにおけるトランザクション(Transaction)は、一連の処理をまとめて1つの単位として扱うものを指し、途中でエラーが発生すればロールバック、すべて成功すればコミットを行います。銀行の振込処理など、複数のUPDATEが同時に行われる場合のデータ整合性を保つために、非常に重要な仕組みです。
5-1. ACID特性
トランザクションには、次の4つの特性(ACID特性)が求められます:
- A(Atomicity)原子性: トランザクション内の処理はすべて成功するか、すべて失敗するか(中途半端な状態を残さない)。
- C(Consistency)一貫性: トランザクション後もデータの整合性が保たれている。
- I(Isolation)独立性: 複数のトランザクションがお互いの影響を受けずに動作できる。
- D(Durability)永続性: コミットされた結果は障害が発生しても失われない。
試験では、「トランザクションの4つのACID特性」として問われることがあるので、キーワードを確実に押さえておきましょう。
5-2. ロック機構と並行制御
複数のトランザクションが同じデータを同時に更新しようとすると、デッドロックや不整合が発生する恐れがあります。これを防ぐため、ロック(排他制御)の仕組みを用います。
- 共有ロック(Sロック): 読み取り専用の場合に設定。複数のトランザクションが同時に共有ロックを獲得可能。
- 排他ロック(Xロック): 書き込みを伴う場合に設定。排他ロックを獲得している間は他のトランザクションが同じデータにロックをかけられない。
さらに、ロックの粒度(テーブル単位、ページ単位、行単位など)や、2相ロック(Two-Phase Locking)の概念も重要です。試験では、「なぜロックが必要なのか」「ロック機構とACID特性の関係」などを問う問題が出題されます。
6. 試験対策のポイント
- キー概念の理解: 主キー・外部キー、候補キーなどを正確に区別できるようにする。
- ER図の読解: 多対多関係があれば中間テーブルで解消する、リレーションシップの多重度を正しく理解する。
- 正規化の流れ: 第1正規形~第3正規形の定義を覚え、どのような表をどのように分解するかイメージを持つ。
- SQLの構文: SELECT文の基本形、JOIN、サブクエリ、GROUP BYとHAVINGの使いどころを押さえる。
- トランザクション管理: ACID特性とロックの仕組み。並行処理でのデータ整合性確保がポイント。
これらは午前試験だけでなく、午後試験のDB問題でも頻繁に登場するテーマです。過去問や演習問題を通じて慣れておくと、実際の試験で落ち着いて対応できるでしょう。
まとめ
今回は、データベース基礎としてリレーショナルモデルの考え方からER図の描き方、正規化、SQL、トランザクション管理までを一通り解説しました。基本情報技術者試験では、データベース分野で一定以上の得点を取ることが合格に大きく寄与します。今回取り上げたポイントをマスターすれば、午前・午後試験ともに得点源にできるでしょう。
次回は、引き続きデータベースや情報システムの話題にも関連するアルゴリズムとプログラミング基礎を深掘りしていく予定です。お楽しみに!
コメントを残す