データベース
下の動画はこの節の解説ではありません。 解説動画の雰囲気を知っていただくための見本として、「AI・機械学習」の動画を再生します。
この節の解説動画はプレミアム限定です。プレミアムなら全科目・全節が見放題!
プレミアムで見るデータベースそのものは、ただのデータの集まりです。それを実際に使える形にしているのが、DBMSというソフトウェアです。第2章で学んだ体系図でいえば、DBMSはミドルウェアの代表格にあたります。この節では、DBMSが果たす3つの機能——定義・操作・制御——を軸に話を進めます。定義の部分では、データベース設計の重要な考え方である3層スキーマを、操作の部分では、リレーショナルデータベースの土台となる関係演算を扱います。3層スキーマは令和4年度の本試験で問われた論点で、「なぜ3つに分けるのか」という理由まで理解しておくと、応用が利きます。
簡単にいうと
アプリケーションがデータベースを直接いじったら、収拾がつかなくなる。間に立って交通整理をするのがDBMS!やっていることは「定義」「操作」「制御」の3つだけだよ。
① DBMSとは
DBMS(DataBase Management System)は、データベースを有効に活用するためのソフトウェアです。
DBMSはデータベースを管理するためのミドルウェアであり、次の働きをします。
② 「独立させる」ことの意味
DBMSがない世界を想像してみてください。
アプリケーションAとアプリケーションBが、同じデータファイルを直接読み書きするとします。すると、
という問題が起きます。アプリケーションとデータが密接に結びついてしまうわけです。
DBMSを間に挟むと、
具体例
DBMSに任せることで、何を作らなくて済むのか
アプリケーション開発者の立場で、DBMSがある場合とない場合を比べてみましょう。
| 必要な機能 | DBMSがなければ | DBMSがあれば |
|---|---|---|
| データの保存形式を決める | ファイル形式を自分で設計する | 表の定義を書くだけ |
| 条件に合うデータを探す | 探索の処理を自分で実装する | SQLで条件を書くだけ |
| 同時アクセスを捌く | 排他制御を自分で実装する | DBMSが同時実行制御を行う |
| 障害から復旧する | ログの仕組みを自分で作る |

DBMSとその3つの機能
試験のポイント
簡単にいうと
「帳票の見た目を変えたら、データベースの中身まで作り直し」——こんなことが起きたら大変。それを避けるために、設計を3階層に分けておくのが3層スキーマだよ!
① データベースを設定するまでの手順
自社の業務でデータベースを利用する場合、業務で発生するデータを整理してからDBMSに設定します。
業務で発生するデータとは、伝票や台帳などの帳票類です。これらのデータをデータベースとして利用する場合、次の手順を踏みます。
1. まず、帳票類に含まれるデータの項目を洗い出す
2. 正規化により整理を行う
3. 整理した結果(正規化された表)に基づいてDBMS上で設定する
いきなりDBMSに向かうのではなく、いま使っている帳票から出発するという点が実務的です。業務でどんなデータが発生しているかは、現場の伝票や台帳を見れば分かります。
簡単にいうと
リレーショナルデータベースの操作は、たった3つの演算でほとんど説明がつく!列を選ぶ射影、行を選ぶ選択、表をつなぐ結合。「タテかヨコか」で覚えれば、射影と選択は絶対に間違えないよ。
① データベース操作とは
3層スキーマにより枠組みが定められたデータベースには、データが蓄積されます。蓄積されたデータには、検索、登録、変更、削除など、さまざまな操作が行われます。
リレーショナルデータベースに対する操作には、関係演算と集合演算がありますが、ここでは試験上重要となる関係演算について述べます。
なお、関係演算を実装したデータベース言語(問い合わせ言語)にSQLがあります。第5節で学ぶSELECT文は、この関係演算を言葉にしたものです。
② 射影(しゃえい)
対象となる表から指定された「列」のみを出力します。
例
動画・テキスト・過去問・AI添削まですべて網羅!
予備校代の1/10以下で、独学の不安をまるごと解決できます
という形になります。アプリケーションA・B・Cがそれぞれ勝手なタイミングで依頼してきても、DBMSが整理して応じます。
この「間に1枚挟むことで、両側を独立させる」という発想は、第2章のデバイスドライバ(アプリケーションと周辺機器の間)と同じ構造です。情報システムの設計では繰り返し現れる考え方なので、意識して見つけてみてください。
③ DBMSの3つの機能
| 名称 | 内容 |
|---|---|
| データベース定義 | データベースの枠組みを規定する(3層スキーマ) |
| データベース操作 | データの検索、登録、変更、削除などの各種操作を行う(関係演算/SQL) |
| データベース制御 | データの整合性確保(同時実行制御)や障害回復(ロールフォワード/ロールバック)などを行う |
3つは、データベースを使う順番に並んでいます。
1. まず枠組みを決める(定義)——どんな表を作り、どんな列を持たせるか
2. 次にデータを出し入れする(操作)——検索、登録、変更、削除
3. そして安全に保つ(制御)——同時に使われても壊れないように、障害が起きても戻せるように
④ 3つの機能とこの章の構成
| DBMSの機能 | 詳しく学ぶ節 |
|---|---|
| データベース定義 | 本節(3層スキーマ)、第6節(正規化) |
| データベース操作 | 本節(関係演算)、第5節・第6節(SQL) |
| データベース制御 | 第3節(トランザクション、ACID特性、同時実行制御)、第4節(障害回復) |
この章の各節は、DBMSの3つの機能を順に掘り下げていく構成になっています。いま学んでいる内容が3つのどれにあたるかを意識すると、迷子になりません。
⑤ 代表的なDBMS
第2章のオープンソースの節で見たとおり、DBMSにはさまざまな製品があります。
| 分類 | 製品の例 |
|---|---|
| オープンソース | MySQL、PostgreSQL |
| 商用製品 | 各社のデータベース製品 |
第2章で学んだLAMP(Linux+Apache+MySQL+PHP等)の「M」がMySQLであり、これがDBMSにあたります。データベース連動型のWebサイトを支える中核部品です。
| 高速に検索する | 索引の仕組みを自分で作る | 索引を定義するだけ |
| 権限を管理する | アクセス制御を自分で実装する | DBMSの権限機能を使う |
これらは業務そのものではない
在庫管理システムを作るときに解きたい問題は「在庫をどう管理するか」であって、「排他制御をどう実装するか」ではありません。しかも排他制御は、正しく作るのが非常に難しい部分です。
本質でない部分を任せて、本質に集中する——DBMSというミドルウェアの価値は、この一点に集約されます。第2章でミドルウェアを学んだときと同じ結論です。
中小企業への助言という観点から
「表計算ソフトで管理していた在庫をシステム化したい」という相談があったとき、DBMSを使う意味を説明するなら次のようになります。
| 表計算ソフトで起きていた問題 | DBMSが解決する機能 |
|---|---|
| 2人が同時に開いて片方の変更が消える | 同時実行制御 |
| ファイルが壊れて過去の数字が失われた | 障害回復 |
| 誰が変更したか分からない | ログ、アクセス制御 |
| 件数が増えて動作が重くなった | 索引による高速化 |
| 同じ商品が違う名前で二重登録される | 一意性制約 |
「データベース=大量のデータを入れる箱」ではない
DBMSの本質は、容量ではなく、整合性と同時利用の保証にあります。この理解があると、第3節以降のトランザクションや同時実行制御の学習が「なぜそれが要るのか」という納得を伴ったものになります。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a DBMSはデータベースを管理するためのミドルウェアである。
> b DBMSの機能には、データベース定義、データベース操作、データベース制御がある。
> c データベース制御では、データの検索、登録、変更、削除などの各種操作を行う。
解答 a:○ b:○ c:×
データベースを設計する場合の重要な考え方として、3層スキーマがあります。
スキーマとは、データの構造や格納方式などを記述した定義体(枠組み)のことです。建物でいえば設計図にあたります。
3層スキーマでは、データベースを設計する際に、外部スキーマ、概念スキーマ、内部スキーマという3つの階層に分けて行います。
③ 3つのスキーマの定義
| 名称 | 内容 |
|---|---|
| 外部スキーマ | 特定の利用者やアプリケーションソフトウェアで利用する観点から表現されるデータ構造。具体的には、システム化対象となるデータ項目の集合体であり、業務で発生するデータを記録する帳票(データの入力画面)や印刷した帳票などで表現される |
| 概念スキーマ | データベース化したいデータを、DBMSのデータモデルに従って記述したもの。データを正規化した表の集まりであり、基本的には論理データモデルそのものである |
| 内部スキーマ | 実際にディスクへどう置くかを決めたもの。ファイル名・置き場所・領域の大きさまで指定する |
④ 3つの層を並べ替えて理解する
上から下へ、人間に近い側から機械に近い側へ並んでいます。
| 層 | 誰の視点か | 何を記述するか | 具体的な姿 |
|---|---|---|---|
| 外部スキーマ | 利用者・アプリケーション | どう見えるか | 帳票、入力画面 |
| 概念スキーマ | データそのもの | どう整理されているか | 正規化された表 |
| 内部スキーマ | コンピュータ | どう保存するか | ファイル名、格納位置、領域サイズ |
⑤ なぜ3つに分けるのか
ここが理解の要です。
> 3階層でデータベースを設計することで、各スキーマで表現されるデータの独立性が維持できるので、帳票のスタイルの変化があった場合でも、それぞれの変化が他の階層の設計に影響を与えない効果があります。
具体的に考えてみましょう。
もし1層しかなければ
帳票のレイアウトを変えるたびに、データの保存の仕方まで見直すことになります。「請求書に消費税の内訳欄を追加したい」という小さな要望が、データベース全体の作り直しにつながりかねません。
3層に分けておけば
| 変更したいこと | 影響が及ぶ層 | 他の層 |
|---|---|---|
| 帳票のレイアウトを変える | 外部スキーマのみ | 概念・内部は変えなくてよい |
| 新しい項目を追加する | 外部・概念スキーマ | 内部は変えなくてよいことが多い |
| ディスクを増設して保存場所を移す | 内部スキーマのみ | 外部・概念は変えなくてよい |
変更の影響を層の中に閉じ込める——これが3層スキーマの狙いです。
⑥ データの独立性
3層スキーマが実現しているものを、2つの独立性として整理することもあります。
| 名称 | 何と何が独立しているか |
|---|---|
| 論理データ独立性 | 外部スキーマと概念スキーマ。表の構造が変わっても、利用者の見え方を保てる |
| 物理データ独立性 | 概念スキーマと内部スキーマ。保存場所や方式が変わっても、表の構造は変えなくてよい |
この2つの独立性という言葉は、試験で直接問われることは多くありませんが、「なぜ3層なのか」を説明する言葉として知っておくと理解が深まります。
具体例
3層スキーマを、会社の書類の流れで理解する
受注業務を例に、3つの層が何に対応するかを見てみましょう。
外部スキーマ——利用者が見るもの
| 誰が | 何を見るか |
|---|---|
| 営業担当者 | 受注入力画面(顧客名、商品、数量、納期) |
| 倉庫担当者 | 出荷指示書(商品、数量、出荷先だけ。金額は見えない) |
| 経理担当者 | 請求書(顧客名、金額、支払期限。在庫情報は見えない) |
同じデータベースから、立場によって違う見え方を用意できるのが外部スキーマの働きです。倉庫担当者に金額を見せない、という制御もここで行われます。
概念スキーマ——データの整理された姿
正規化された表の集まりです。
| 表 | 列 |
|---|---|
| 顧客表 | 顧客コード、顧客名、住所 |
| 商品表 | 商品コード、商品名、単価 |
| 受注表 | 受注番号、顧客コード、受注日 |
| 受注明細表 | 受注番号、行番号、商品コード、数量 |
利用者が誰であろうと、データの整理の仕方はこの1通りです。3つの帳票はすべて、この表の組み合わせから作られます。
内部スキーマ——実際の保存の姿
| 指定すること | 例 |
|---|---|
| ファイル名 | どのファイルに格納するか |
| 格納位置 | どのディスクのどの領域か |
| 領域サイズ | どれだけの容量を確保するか |
変更が起きたときに、どこまで影響するか
| 要望 | 変える層 | 変えなくてよい層 |
|---|---|---|
| 請求書に「担当者名」を追加したい | 外部スキーマ(概念スキーマにデータがあれば) | 概念・内部 |
| 商品に「原産国」を管理したい | 概念スキーマ+外部スキーマ | 内部(多くの場合) |
| ディスクの空きが減ったので別の装置に移したい | 内部スキーマのみ | 外部・概念 |
3つ目がとくに重要
保存場所を変えただけで業務システムが動かなくなる——という事態は、3層に分けていれば起きません。運用の都合で内部を変えても、利用者には何も影響しないわけです。
第1章で学んだ記憶装置の話とつなげれば、「ハードディスクをSSDに交換する」といった変更も、内部スキーマの範囲に収まります。
設例
> 次の記述の正誤を判定せよ。
> a 外部スキーマは、データの物理的な格納方式を定義したものであり、ファイル名や格納位置を指定する。
> b 概念スキーマは、データを正規化した表の集まりであり、基本的には論理データモデルそのものである。
> c 3層スキーマにより、帳票のスタイルの変化があっても他の階層の設計に影響を与えずに済む。
解答 a:× b:○ c:○

3層スキーマ
試験のポイント
次の表から、受講生名と教室だけを取り出します。
| 受講生ID | 受講生名 | 教室 | 開始月日 |
|---|---|---|---|
| 10110001 | 小林 太郎 | 水道橋 | 04/01 |
| 10110002 | 中山 リサ | 池袋 | 04/01 |
| 10110003 | 伊藤 一 | 水道橋 | 09/01 |
| 10110004 | 渡辺 花子 | 大阪 | 12/01 |
↓ 射影(受講生名と教室)
| 受講生名 | 教室 |
|---|---|
| 小林 太郎 | 水道橋 |
| 中山 リサ | 池袋 |
| 伊藤 一 | 水道橋 |
| 渡辺 花子 | 大阪 |
行数は変わらず、列だけが減っていることに注目してください。縦に切り取る操作です。
③ 選択
対象となる表から指定された条件を満たす「行」のみを出力します。
例
同じ表から、教室が水道橋の行だけを取り出します。
↓ 選択(教室が水道橋)
| 受講生ID | 受講生名 | 教室 | 開始月日 |
|---|---|---|---|
| 10110001 | 小林 太郎 | 水道橋 | 04/01 |
| 10110003 | 伊藤 一 | 水道橋 | 09/01 |
列はそのままで、行だけが減っていることに注目してください。横に切り取る操作です。
④ 射影と選択の見分け方
この2つは、名前と動作が結びつきにくいため、取り違えが頻発します。
| 演算 | 何を取り出すか | 切る方向 | 覚え方 |
|---|---|---|---|
| 射影 | 列 | 縦 | 「射影」=影を落とす。光を当てて縦に影が伸びる |
| 選択 | 行 | 横 | 「選択」=条件に合う行を選び出す |
もうひとつ確実なのは、SQLの構文と結びつける方法です。
| 演算 | SQLのどこか |
|---|---|
| 射影 | SELECTの後ろに書く列名 |
| 選択 | WHEREの後ろに書く条件 |
```
SELECT 受講生名, 教室 ← ここが射影(列を選ぶ)
FROM 受講生
WHERE 教室 = '水道橋' ← ここが選択(行を選ぶ)
```
SQLを1つ書いてみれば、どちらがどちらか迷いません。第5節でSQLを学んだあとに、この対応を確認しておきましょう。
⑤ 結合
複数の表に含まれる共通の「列」の内容によって表を結びつけます。
例
2つの表があるとします。
表:受講生
| 受講生ID | 受講生名 | 教室 |
|---|---|---|
| 10110001 | 小林 太郎 | 水道橋 |
| 10110002 | 中山 リサ | 池袋 |
| 10110003 | 伊藤 一 | 水道橋 |
| 10110004 | 渡辺 花子 | 大阪 |
表:教室
| 教室 | 担当者名 |
|---|---|
| 水道橋 | 鈴木 |
| 池袋 | 佐藤 |
| 大阪 | 高橋 |
↓ 結合(表:受講生と表:教室)
| 受講生ID | 受講生名 | 教室 | 担当者名 |
|---|---|---|---|
| 10110001 | 小林 太郎 | 水道橋 | 鈴木 |
| 10110002 | 中山 リサ | 池袋 | 佐藤 |
| 10110003 | 伊藤 一 | 水道橋 | 鈴木 |
| 10110004 | 渡辺 花子 | 大阪 | 高橋 |
共通する「教室」の列の値を手がかりに、2つの表がつながりました。
⑥ 結合が支えているもの
結合ができるからこそ、データを複数の表に分けて持つことができます。
もし結合ができなければ、受講生の表に担当者名まで書いておくしかありません。すると、水道橋の担当者が鈴木から別の人に変わったとき、該当する行をすべて書き換えることになります。書き換え漏れがあれば、データが食い違います。
表を分けて結合でつなぐ設計にしておけば、教室の表の1行を直すだけで済みます。この考え方を突き詰めたものが、第6節で学ぶ正規化です。
結合は、正規化された表を元の形に戻す操作——そう捉えると、2つの論点がつながります。
具体例
3つの関係演算を組み合わせる——実務の問い合わせ
「水道橋教室に通っている受講生の名前と、その担当者を知りたい」という要望を、関係演算で表してみましょう。
手順
| 順番 | 演算 | 内容 | 結果 |
|---|---|---|---|
| ① | 結合 | 受講生表と教室表を「教室」でつなぐ | 4行×4列の表 |
| ② | 選択 | 教室が水道橋の行を取り出す | 2行×4列の表 |
| ③ | 射影 | 受講生名と担当者名の列を取り出す | 2行×2列の表 |
最終結果
| 受講生名 | 担当者名 |
|---|---|
| 小林 太郎 | 鈴木 |
| 伊藤 一 | 鈴木 |
SQLで書くと
```
SELECT 受講生.受講生名, 教室.担当者名
FROM 受講生, 教室
WHERE 受講生.教室 = 教室.教室
AND 受講生.教室 = '水道橋'
```
| SQLの部分 | 対応する関係演算 |
|---|---|
| SELECT 受講生名, 担当者名 | 射影 |
| FROM 受講生, 教室 + WHERE 受講生.教室 = 教室.教室 | 結合 |
| WHERE 受講生.教室 = '水道橋' | 選択 |
3つの演算だけで、たいていの問い合わせが書ける
実務で必要な問い合わせの大半は、この3つの組み合わせで表現できます。「どの列がほしいか(射影)」「どの行がほしいか(選択)」「どの表をつなぐか(結合)」——この3問に答えれば、SQLの骨格ができあがります。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a 射影は、対象となる表から指定された条件を満たす行のみを出力する演算である。
> b 結合は、複数の表に含まれる共通の列の内容によって表を結びつける演算である。
> c 選択を行うと、表の列数は変わらず行数が減ることがある。
解答 a:× b:○ c:○
もうひとつの覚え方
英語で考えるのも有効です。
| 演算 | 英語 | 意味 |
|---|---|---|
| 射影 | projection | 投影する。3次元を2次元に落とすように、列を絞る |
| 選択 | selection | 選び出す。条件に合う行を選ぶ |
| 結合 | join | 結びつける |
SQLのJOIN句は「結合」そのものの名前です。英語と日本語を対応させておくと、実際にSQLを読むときにも役立ちます。

データベース操作(関係演算)(1/2)

データベース操作(関係演算)(2/2)
試験のポイント
プレミアムプラン
¥9,800〜/ 買い切り・自動更新なし(税込)
決済はStripe(世界最高水準・PCI-DSS準拠)で安全に処理されます。カード情報は当サービスに保存されません。