🎯 この記事を読み終わるころには、この問題が解けるようになります!
【例題】トランザクション処理の基本
トランザクション処理のACID特性において、「コミットされたトランザクションの結果は、障害が発生しても永続的に保存される」という性質を何と呼ぶか。
ア. 原子性(Atomicity)
イ. 一貫性(Consistency)
ウ. 独立性(Isolation)
エ. 耐久性(Durability)
※ヒント:英語の頭文字「ACID」を思い出してみよう!
前回はユーザーインタフェースとマルチメディアを学びました。今回は、現代のシステム開発で欠かせない「データベース」を徹底解説します。関係データベースの基本概念から、SQL文の書き方、正規化、E-R図、トランザクション処理まで、試験に出る内容を全て網羅します!
目次
- データベースとは
- 関係データベースの基本用語(テーブル・レコード・列)
- 主キー(Primary Key)の条件
- 外部キー(Foreign Key)と参照整合性
- E-R図(実体関連図)とその記法
- 正規化(第1正規形〜第3正規形)
- SQLとは|SELECT・FROM・WHERE
- SQL応用|ORDER BY・GROUP BY・HAVING
- 結合(JOIN)|内部結合・外部結合
- ビュー(View)
- トランザクション処理とACID特性
- 排他制御とデッドロック
- 過去問チャレンジ!
- この章のまとめ
1. データベースとは
- データベース=複数のデータを整理して蓄積し、検索・更新などができるようにしたものです。
- DBMS(Database Management System)=データベースを管理するソフトウェアのことです。代表的なものに MySQL、Oracle、PostgreSQL、SQL Server などがあります。
- データモデル(データを表現する形式)の種類には、階層型・ネットワーク型・関係型(リレーショナル)などがありますが、現在の主流は関係型です。
- 関係データベースの特徴:データを「表(テーブル)」の形式で管理します。
2. 関係データベースの基本用語(テーブル・レコード・列)
▲ 関係データベースの基本構造
- テーブル(表)=データの集まりそのもの。関係データモデルでは「関係(リレーション)」とも呼びます。
- レコード(行)=横の並びで、1件分のデータを表します。関係データモデルでは「組(タプル)」とも呼びます。
- 列(フィールド)=縦の並びで、データの種類や属性を表します。関係データモデルでは「属性(アトリビュート)」とも呼びます。
【用語の対応表】
| 一般用語 | 関係データモデル用語 |
|---|---|
| テーブル(表) | 関係(リレーション) |
| レコード(行) | 組(タプル) |
| 列(フィールド) | 属性(アトリビュート) |
3. 主キー(Primary Key)の条件
- 主キー=テーブルの中から特定のレコードを一意に識別するため(特定するため)の列、または列の組み合わせのことです。
-
主キーになるための2つの条件:
- 重複しない(一意性):同じ値が複数存在してはいけない。
- NULLを含まない(非NULL):データが空(NULL)であってはいけない。
- 候補キー:主キーになりうる条件を満たしている列のことです。
- 複合キー(複合主キー):1つの列だけではレコードを一意に特定できない場合に、複数の列を組み合わせて主キーにすることです。
📝 ポイント
「主キーはNULLを含まない」「主キーは重複しない」の2つの条件は試験で頻出します。しっかりと覚えておきましょう!
4. 外部キー(Foreign Key)と参照整合性
▲ 主キーと外部キーの参照関係
- 外部キー=他のテーブルの主キーを参照する列のことです。
- 例:学生テーブルの「担任番号」という外部キーが、教師テーブルの「教師番号(主キー)」を参照し紐付けます。
- 参照整合性=外部キーが参照しているレコードが、参照先のテーブルに必ず存在していることを保証することです。
- 試験では、「外部キーを定義すると参照整合性が保たれる」という出題がよく見られます。
📌 重要:参照整合性が守られるとどうなる?
参照整合性の制約が働くと、「存在しない教師番号を学生テーブルに登録できない」「学生テーブルから参照されている教師レコードは削除できない」といった安全機能が自動的に働きます。
5. E-R図(実体関連図)とその記法
▲ E-R図の記法と例
- E-R図(Entity-Relationship Diagram)=データの実体(Entity)と関連(Relationship)を図で表した、データベース設計のための設計図です。
- 実体(Entity):長方形で表します。(例:学生、教師、科目など)
- 関連(Relationship):ひし形で表します。実体間の関係を示します。(例:所属する、受講するなど)
-
カーディナリティ(多重度)の3種類:
- 1対1(1:1):例:1つの学校に対して校長は1人。
- 1対多(1:多):例:1人の教師が複数の学生を担当する。
- 多対多(多:多):例:1人の学生が複数の科目を受講し、1つの科目には複数の学生がいる。
6. 正規化(第1正規形〜第3正規形)
▲ 正規化の前後比較
- 正規化=データの冗長性(重複)を排除し、データの一貫性を保つためにテーブルを適切に分割・整理することです。
- 正規化を行わないと、データの更新・挿入・削除の際に矛盾(更新異常・挿入異常・削除異常)が生じてしまいます。
- 第1正規形:繰り返し項目をなくし、テーブルのすべての値が原子値(これ以上分割できない1つの値)になるようにします。
- 第2正規形:主キーの一部の列にのみ依存する列をなくします(部分関数従属を排除)。
- 第3正規形:主キー以外の列に依存する列をなくします(推移的関数従属を排除)。
- 試験での頻出フレーズは「正規化の目的=データの冗長性を排除し、更新時の矛盾を防ぐため」です。
7. SQLとは|SELECT・FROM・WHERE
- SQL(Structured Query Language)=関係データベースを操作(検索・追加・更新・削除)するための言語です。
- 基本構文:
SELECT 列名 FROM テーブル名 WHERE 条件 - SELECT:取得したい列を指定します。「*」(アスタリスク)を指定するとすべての列を取得します。
- FROM:データを取り出す対象のテーブルを指定します。
- WHERE:取り出す行(レコード)の条件を指定します。
-
比較演算子:
=(等しい)、<>(等しくない)、<、>、<=、>=。 -
論理演算子:
AND(かつ)、OR(または)、NOT(否定)。
8. SQL応用|ORDER BY・GROUP BY・HAVING
▲ SQL基本命令とトランザクション処理
- ORDER BY:検索結果を指定した列の値で並べ替えます。(ASC=昇順、DESC=降順)
- GROUP BY:指定した列の値が同じレコードを1つのグループにまとめます。
- HAVING:GROUP BYでグループ化した後のテーブルに対して、絞り込み条件を指定します。
-
集計関数:
COUNT()で行数を数えたり、SUM()で合計、AVG()で平均、MAX()で最大値、MIN()で最小値を求めることができます。
📝 ポイント:WHEREとHAVINGの違い(超頻出!)
WHEREはグループ化する「前」の絞り込み条件、HAVINGはグループ化した「後」の絞り込み条件です。この違いは試験で非常によく問われます。
9. 結合(JOIN)|内部結合・外部結合
- 結合(JOIN)=複数のテーブルを一定の条件でつなぎ合わせて、1つの結果として取り出す操作です。
- 内部結合(INNER JOIN):指定した条件に両方のテーブルで一致するレコードのみを取り出します。最も一般的な結合です。
- 外部結合(LEFT/RIGHT OUTER JOIN):一方のテーブルに一致するレコードがなくても、NULLとして強引に取り出す結合方法です。
10. ビュー(View)
- ビュー=SELECT文の結果に名前をつけて、仮想的なテーブルとして扱えるようにしたものです。
- 実表(実際のテーブル)とは異なり、実際のデータは持ちません。元のテーブルのデータを参照しているだけです。
- 用途①:長くて複雑なSELECT文をビューにしておくことで、簡単に再利用できます。
- 用途②:セキュリティ上、特定の列だけを見せたい場合(給与情報などを隠すなど)に活用されます。
📝 ポイント
ビューは「実データを持たない仮想テーブル」である、という点が試験の頻出ポイントです。
11. トランザクション処理とACID特性
- トランザクション=データベースに対する複数のSQL操作を、分割できない「ひとまとまりの処理」として扱う単位です(例:銀行の出金と入金など)。
- COMMIT(コミット)=すべての操作が正常に終わった際に、処理を確定することです。
- ROLLBACK(ロールバック)=途中でエラーが起きた際に、すべての操作を取り消して処理前の状態に戻すことです。
-
ACID特性(試験最重要!):トランザクション処理が満たすべき4つの性質です。
- A(Atomicity:原子性):トランザクション内の処理はすべて実行されるか、全く実行されないかのどちらかである。
- C(Consistency:一貫性):トランザクションの実行前後でデータベースの整合性が保たれる。
- I(Isolation:独立性):複数のトランザクションが同時実行されても、互いに影響を与えない。
- D(Durability:耐久性):コミットされたトランザクションの結果は、障害が発生しても永続的に保存される。
📌 重要:冒頭例題の答えはこれ!
ACID特性の「D(耐久性)」が今回の冒頭例題の答えです。「永続的に保存」=Durability(耐久性)と結びつけて覚えましょう!
12. 排他制御とデッドロック
- 排他制御(ロック)=複数のユーザーが同じデータを同時に更新しようとした場合に、データの矛盾を防ぐ仕組みです。
- 占有ロック(排他ロック):ロック中は、他のトランザクションからの読み取りも書き込みも全て禁止します。データの更新時に使います。
- 共有ロック:ロック中も他のトランザクションからの読み取りは許可しますが、書き込みは禁止します。データの読み出し時に使います。
- デッドロック=2つのトランザクションがお互いに相手がロックしているデータを待ち続けてしまい、処理が完全に停止(フリーズ)してしまう状態です。
- デッドロックが発生した場合、DBMSはどちらか一方のトランザクションを強制的にロールバックさせて解消します。
📝 ポイント
デッドロックは「お互いが相手のロック解除を待ち合う → どちらも進めない」状態です。試験ではそのまま「デッドロックの説明」として出題されます。
13. 過去問チャレンジ!
🎯 記事冒頭の例題に、もう一度チャレンジ!
【問題1(再掲)】トランザクション処理の基本
トランザクション処理のACID特性において、「コミットされたトランザクションの結果は、障害が発生しても永続的に保存される」という性質を何と呼ぶか。
ア. 原子性(Atomicity)
イ. 一貫性(Consistency)
ウ. 独立性(Isolation)
エ. 耐久性(Durability)
✅ 解答・完全解説
正解:エ
解説:
コミットされた結果が永続的に保存される性質は「耐久性(Durability)」です。
- アの原子性は「全て実行されるか、全く実行されないか」
- イの一貫性は「処理の前後で矛盾が生じないこと」
- ウの独立性は「同時に実行しても互いに干渉しないこと」
【過去問 その2】正規化問題
関係データベースの正規化の目的として、適切なものはどれか。
ア. データの検索速度を向上させる。
イ. データの暗号化を行い、セキュリティを向上させる。
ウ. データの冗長性を排除し、更新時の矛盾を防ぐ。
エ. データのバックアップを自動化する。
💡 解答・解説
正解:ウ
正規化の本来の目的は、データの冗長性(重複)を排除し、データの更新や削除時に矛盾が発生しないようにすることです。よってウが正解です。なお、正規化を進めるとテーブルが細かく分割されるため、結合(JOIN)が増えて検索速度が逆に低下する場合があります(アは誤り)。
【過去問 その3】SQL問題
次のSQLで取得できる内容として、適切なものはどれか。
SELECT 部署名, COUNT(*) FROM 社員表 GROUP BY 部署名 HAVING COUNT(*) >= 3
ア. 全部署の社員数を表示する。
イ. 社員数が3名未満の部署の部署名と社員数を表示する。
ウ. 社員数が3名以上の部署の部署名と社員数を表示する。
エ. 全社員のうち先頭3件の部署名と社員数を表示する。
💡 解答・解説
正解:ウ
GROUP BY 部署名 で部署ごとに社員をグループ化し、HAVING COUNT(*) >= 3
で「グループ内の行数(社員数)が3以上」という条件を指定しています。したがって、社員数が3名以上の部署の部署名と社員数が表示されます。
14. この章のまとめ
📌 データベース・SQL・正規化のまとめ
- データベース = データを整理・蓄積して検索・更新できるもの、DBMSが管理する。
- 関係データベース = テーブル(関係)・レコード(組)・列(属性)でデータを管理する。
- 主キー = レコードを特定する識別子。一意性と非NULLの条件を満たす。
- 外部キー = 他テーブルの主キーを参照し、参照整合性を保証する。
- E-R図 = エンティティ(長方形)と関連(ひし形)で表す(1:1、1:多、多:多)。
- 正規化 = 冗長性を排除し更新異常を防ぐ(第1〜第3正規形まで)。
- SQL = SELECT・FROM・WHERE・ORDER BY・GROUP BY・HAVING・JOIN。
- WHERE = GROUP BY前の条件、HAVING = GROUP BY後の条件(超頻出!)。
- INNER JOIN = 両テーブルに一致するレコードのみ取得する内部結合。
- ビュー = SELECT文に名前をつけた仮想テーブル(実データを持たない)。
- トランザクション = COMMIT(確定) / ROLLBACK(取消)。
- ACID特性 = 原子性・一貫性・独立性・耐久性(Dは「永続的保存」)。
- デッドロック = 2つのトランザクションがお互いのロックを待ち続けるフリーズ状態。
学習難易度:★★★☆☆
SQLの文法や、正規化の目的、ACID特性の意味など、試験で必ず出題される超重要キーワードが密集している章です。用語の意味をしっかりと区別できるようにしておきましょう!
この記事について
基本情報技術者試験の合格を目指す方のために、参考書の内容を初心者向けにわかりやすく噛み砕いて解説しています。ITの基礎をしっかり固めて、一緒に合格を目指しましょう!
