体系学習
データベースの仕組みを最初から理解する
データを表に整理するところから、主キー・外部キー、正規化、SQL、トランザクションまでを一つの流れとして理解する。
対象資格:ITパスポート / 基本情報技術者試験
目安時間:20分
このページで理解できること
- データベースとDBMSの違いを説明できる
- テーブル・レコード・フィールドの関係を説明できる
- 主キーと外部キーの役割を区別できる
- 正規化を行う目的を説明できる
- 選択・射影・結合の違いを説明できる
- トランザクションが必要な理由を説明できる
ITパスポート:データベースとDBMSの目的、表・レコード・フィールド、主キー・外部キー、正規化の必要性、選択・射影・結合、トランザクションと障害回復の概要を区別して理解する。SQLは文法暗記ではなく、何をする操作かを理解する。
基本情報技術者試験:ITパスポート範囲に加え、E-R図、関係モデル、関数従属性、第1〜第3正規形、DDL/DML、SELECT・結合・集約・副問合せ、制約、ロック、デッドロック、障害回復までつなげて理解する。
データベースは、単にデータを保存する箱ではありません。必要なデータを取り出しやすくし、重複や矛盾を減らし、複数の利用者が同時に使っても整合性を保てるように管理する仕組みです。このページでは、学校の受講管理を例に、データを表へ整理してから検索・更新・保全するまでを順番に追います。
まずは全体の流れ
データベースを使うときの考え方を、大きく6段階に分けます。
必要なデータを整理する
何を管理したいかを洗い出し、学生・科目・受講などのデータと、その関係を整理します。
表の形を設計する
テーブル、レコード、フィールドに分け、主キーや外部キーを決めます。
重複や矛盾を減らす
正規化などを使い、同じ事実を不必要に何度も保存しない構造を目指します。
必要なデータを操作する
挿入・更新・削除・検索を行います。関係データベースではSQLが代表的な操作手段です。
複数処理の整合性を守る
トランザクションや排他制御を使い、途中状態や同時更新による矛盾を防ぎます。
障害から回復する
バックアップやログなどを利用し、障害が起きてもデータを復旧できるようにします。
1. データベースとDBMSは同じものではない
データそのものと、それを管理するソフトウェアを分けて考えます。
データベースは、利用しやすい形に整理して保存されたデータの集合です。例えば、学生番号・氏名・所属学科などを体系的に管理したものがデータベースに当たります。
DBMS(データベース管理システム)は、そのデータベースを作成・検索・更新・保護するためのソフトウェアです。利用者やアプリケーションはDBMSを通してデータを操作します。
関係データベースを管理するDBMSはRDBMSと呼ばれます。一方、データを必ずしも表形式だけで扱わないNoSQL系のデータベースもあります。
| 用語 | 役割 |
|---|---|
| データベース | 整理されたデータの集合 |
| DBMS | データベースの作成・検索・更新・制御などを行う管理システム |
| RDBMS | 関係データベースを管理するDBMS |
| NoSQL | 関係モデル以外の方式も含むデータベース群の総称として使われる |
2. 表・レコード・フィールドでデータを整理する
関係データベースでは、表の構造を正確にイメージできることが基本です。
関係データベースでは、データをテーブル(表)として扱います。例えば学生テーブルなら、学生一人分の情報が1行にまとまります。
1行分のデータをレコードと呼び、学生番号や氏名のような各列をフィールド(項目)と呼びます。
『表の1行がレコード、表の1列がフィールド』と対応付けておくと、用語を混同しにくくなります。
| 学生番号 | 氏名 | 学科コード |
|---|---|---|
| 1001 | 佐藤 | IT |
| 1002 | 鈴木 | EE |
| 1003 | 高橋 | IT |
3. 主キーと外部キーで「どのデータか」「何とつながるか」を表す
主キーは行を一意に識別し、外部キーは別の表との関係を表します。
主キーは、テーブル内の各レコードを一意に識別するための項目です。学生テーブルで学生番号が重複しないなら、学生番号を主キーにできます。
外部キーは、別のテーブルの主キーなどを参照し、表と表の関係を表すために使います。
例えば学生テーブルに学科コードを持たせ、その値を学科テーブルの学科コードへ対応させれば、『この学生はどの学科に所属するか』を表せます。
| 項目 | 主な役割 | 例 |
|---|---|---|
| 主キー | 自分の表のレコードを一意に識別する | 学生テーブルの学生番号 |
| 外部キー | 別の表との関係を表す | 学生テーブルの学科コード |
4. 正規化は「同じ事実を何度も持たない」ために行う
データの重複を減らし、更新時の矛盾が起きにくい表構造を作ります。
一つの表に何でも詰め込むと、同じ情報が何度も現れやすくなります。例えば、受講者ごとに『科目コード・科目名・担当教員名』を毎回保存すると、同じ科目名や担当教員名が繰り返し記録されます。
この状態で科目名を変更すると、複数の行をすべて正しく更新しなければならず、一部だけ古い値が残る可能性があります。
正規化は、データの重複や更新時の矛盾を減らすために表を適切に分割していく考え方です。試験範囲の深さは資格で異なり、ITパスポートでは正規化の必要性を理解することが中心で、詳細な正規化手順は問わないと現行シラバスに明記されています。一方、FEでは第1〜第3正規形や関数従属性まで扱います。
| 学生番号 | 科目コード | 科目名 | 担当教員 |
|---|---|---|---|
| 1001 | DB01 | データベース基礎 | 田中 |
| 1002 | DB01 | データベース基礎 | 田中 |
| 1003 | NW01 | ネットワーク基礎 | 山田 |
5. 選択・射影・結合は「どのデータを取り出すか」の違い
ITパスポートではSQL文法そのものより、代表的なデータ操作の意味を押さえることが重要です。
選択は、条件に合う行を取り出す操作です。例えば『学科コードがITの学生だけ』を取り出す操作です。
射影は、必要な列だけを取り出す操作です。例えば学生テーブルから『学生番号と氏名だけ』を取り出します。
結合は、関連する複数の表をつないで必要な情報を得る操作です。例えば学生テーブルと学科テーブルを学科コードで結び、学生名と学科名を一緒に表示できます。
| 操作 | 何を絞る・つなぐか | 例 |
|---|---|---|
| 選択 | 行 | IT学科の学生だけ取り出す |
| 射影 | 列 | 学生番号と氏名だけ取り出す |
| 結合 | 複数の表 | 学生表と学科表を学科コードでつなぐ |
6. トランザクションは複数の処理を一つのまとまりとして扱う
途中まで成功した状態を残さないことが、データの整合性を守るうえで重要です。
トランザクションは、データベースに対する一連の処理を一つの論理的な処理単位として扱う考え方です。
例えば銀行振込では、『A口座から1万円減らす』だけ成功して『B口座へ1万円増やす』処理が失敗すると、全体として矛盾します。そこで、すべて成功したときだけ結果を確定し、途中で失敗した場合は変更を取り消す必要があります。
トランザクションに求められる代表的な性質はACID特性として整理されます。原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、永続性(Durability)の4つです。
複数の利用者が同時にデータを更新するときは、排他制御などを利用して互いの処理が不整合を起こさないようにします。
障害が発生した場合に備えて、バックアップやログなどを利用したリカバリも重要です。
| 用語 | 考え方 |
|---|---|
| コミット | 一連の処理結果を確定する |
| ロールバック | 処理途中の変更を取り消して整合した状態へ戻す |
| 排他制御 | 同時更新などによる矛盾を防ぐ |
| リカバリ | 障害後にデータを回復する |
ITパスポートではここまでを確実に
- データベースとDBMSの違いを説明できる
- テーブル・レコード・フィールドを区別できる
- 主キーと外部キーの役割を区別できる
- 正規化が必要な理由を説明できる
- 選択・射影・結合の違いを説明できる
- トランザクション・排他制御・リカバリの目的を説明できる
FE深掘り
7. FEではE-R図と第1〜第3正規形まで理解する
FEでは、正規化の必要性だけでなく、依存関係を見て実際に表を分解する考え方まで扱います。
E-R図は、管理対象となる実体(エンティティ)と、それらの関係(リレーションシップ)を表すために使われます。設計段階では、1対1・1対多・多対多などの対応関係を整理します。
正規化では、属性間の関数従属性を手掛かりに、データの重複や更新異常を減らすよう表を分解します。
第1正規形では繰返し項目などをなくして各項目を単一の値として扱える形にし、第2正規形では主キーの一部だけに依存する属性を分離し、第3正規形では主キー以外の属性を経由して依存する属性を分離する、という流れで理解すると整理しやすくなります。
| 段階 | 見るポイント | 学習上の目安 |
|---|---|---|
| 第1正規形 | 繰返しや複数値を1項目に持っていないか | 1セル1値として扱える形 |
| 第2正規形 | 複合主キーの一部だけに依存する属性がないか | 部分関数従属を取り除く |
| 第3正規形 | 非キー属性を経由した依存がないか | 推移関数従属を取り除く |
FE深掘り
8. FEではSQLを『目的→構文』で結び付ける
SQLを単語として暗記するのではなく、何をしたいときにどの命令を使うかで整理します。
DDL(データ定義言語)は、テーブルやビューなどデータベースの構造を定義するために使います。DML(データ操作言語)は、格納されたデータを検索・追加・更新・削除するために使います。
SELECTはデータの検索、INSERTは追加、UPDATEは更新、DELETEは削除に使います。FEでは条件指定、表の結合、集約、グループ化、副問合せなども範囲に含まれます。
実際の問題では、テーブル定義やデータを見ながら、SQLを実行するとどの行・列が結果になるかを追えることが重要です。
| 目的 | 代表的なSQL |
|---|---|
| 表などを定義する | CREATE |
| データを検索する | SELECT |
| データを追加する | INSERT |
| データを更新する | UPDATE |
| データを削除する | DELETE |
条件に合う行と必要な列を取り出す
sql
SELECT student_id, name
FROM students
WHERE department_code = 'IT';students表から、department_codeがITの行を選び、student_idとnameの列だけを結果として取り出す例です。
二つの表を結合する
sql
SELECT students.name, departments.department_name
FROM students
JOIN departments
ON students.department_code = departments.department_code;students表とdepartments表をdepartment_codeで結合し、学生名と学科名を組み合わせて取り出す例です。
FE深掘り
9. FEでは制約とインデックスの役割も整理する
正しいデータを保つ仕組みと、検索を効率化する仕組みは目的が異なります。
一意性制約、参照制約、非NULL制約などは、データが満たすべきルールをDBMSに持たせ、矛盾した値が入るのを防ぐために使います。
インデックスは、表から必要なデータを探す処理を高速化するための仕組みです。ただし、インデックスを増やせば常に得になるわけではなく、追加の記憶領域や更新時の処理が必要になります。
『制約は整合性を守る』『インデックスは検索効率を高める』と役割を分けて理解してください。
FE深掘り
10. FEではロック・デッドロック・障害回復までつなげる
複数トランザクションの競合と、障害時の復旧方法を区別します。
排他制御では、同じデータを複数のトランザクションが同時に矛盾した形で更新しないよう、ロックなどを利用します。共有ロックと専有ロックのように、読み取りと更新で許可する操作を分ける方式があります。
複数のトランザクションが互いの保持するロックの解放を待ち続け、処理が進まなくなる状態をデッドロックと呼びます。
障害回復では、処理途中の更新を取り消すバックワードリカバリ(ロールバック)と、バックアップ後の更新履歴などを反映して障害発生前へ近づけるフォワードリカバリ(ロールフォワード)を区別します。
| 仕組み | 目的 |
|---|---|
| 共有ロック | 他の読取りを許しながら更新との競合を制御する |
| 専有ロック | 更新対象を他の処理から保護する |
| デッドロック | 互いに資源の解放を待ち続けて処理が進まない状態 |
| ロールバック | 未確定の変更などを取り消す |
| ロールフォワード | バックアップと更新履歴などを使って復旧を進める |
基本情報ではここまでつなげる
- E-R図の実体・属性・関係とカーディナリティを説明できる
- 関数従属性を手掛かりに第1〜第3正規形を考えられる
- DDLとDMLの違いを説明できる
- SELECT・JOIN・集約・副問合せの基本的な役割を説明できる
- 主キー・外部キー・各種制約が整合性を守る理由を説明できる
- 共有ロック・専有ロック・デッドロックを区別できる
- ロールバックとロールフォワードの違いを説明できる
最後に一本の流れへ戻す
- 管理したいデータとその関係を整理する
- テーブル・レコード・フィールドとして設計する
- 主キーでレコードを識別し、外部キーで表同士を関連付ける
- 正規化によって重複や更新時の矛盾を減らす
- SQLなどを使って必要なデータを検索・追加・更新・削除する
- トランザクションと排他制御で処理の整合性を守る
- バックアップやログなどを利用して障害から回復する
データベース分野は用語数が多いですが、『設計する→操作する→整合性を守る→回復する』という流れで整理すると、それぞれの技術が何のために存在するのかを判断しやすくなります。