データベースの必要性
この章で得られるスキル:
- ✅ ファイル管理の課題を説明できる
- ✅ DBMSの主な機能を説明できる
- ✅ テーブル、行、列の概念を説明できる
- ✅ OneCompilerでテーブルの内容を表示できる
Step 0: まず体験してみよう
シナリオ:社員名簿をExcelで管理している会社
ある会社では、社員の情報をExcelファイルで管理していた。
社員名簿.xlsx
| 社員ID | 名前 | 部門名 | 給与 |
|---|---|---|---|
| 1 | 田中太郎 | 営業部 | 350,000 |
| 2 | 佐藤花子 | 開発部 | 400,000 |
| 3 | 鈴木一郎 | 開発部 | 320,000 |
問題1:2人が同時に編集したら?
田中さんが社員を追加しているのと同時に、佐藤さんが給与を更新した。 → 後から保存した方の変更だけが残り、もう一方の変更が消えてしまった!
問題2:部門名を変更したら?
「営業部」を「セールス部」に変更することになった。 しかし、社員名簿に加えて、プロジェクト管理表や出張申請書など、 あちこちのファイルに「営業部」と書かれている。 → 一部のファイルだけ更新して、データが食い違ってしまった!
問題3:大量データの検索
社員が1万人に増えた。「東京勤務で給与30万以上の社員」を探すには? → Excelのフィルター機能では限界がある。処理も遅い。
これらの問題は、Excelやテキストファイルでデータを管理する限り避けられない。 データベースを使えば、これらの問題をすべて解決できる。
Step 1: データ管理の課題
ファイルベースのデータ管理には、以下の限界がある。
| 課題 | 具体例 |
|---|---|
| 同時編集ができない | 複数人がExcelを同時に開くとロックされる。共有設定にしても競合が起きる |
| データの整合性が保てない | 複数のファイルに同じ情報があると、一方だけ更新されて食い違いが起きる |
| 大量データの検索が遅い | 数万件のデータからフィルターや検索をかけると処理に時間がかかる |
| アクセス制御ができない | 「給与情報は人事部だけが見られる」のような制限が難しい |
| データの復旧が難しい | 誤って上書き保存すると元に戻せない |
Step 2: DBMSの役割
データベース管理システム(DBMS)とは
DBMS(Database Management System) とは、データベースを管理するための専用ソフトウェアである。 データの保存・検索・更新・削除を安全かつ効率的に行う仕組みを提供する。
代表的なDBMSには以下のようなものがある。
| DBMS | 特徴 |
|---|---|
| PostgreSQL | オープンソースで高機能。本教材で使用 |
| MySQL | Webアプリケーションで広く使われている |
| Oracle Database | 大企業の基幹システムで多く採用されている |
| SQLite | 軽量で組み込み用途に適している |
DBMSが解決する課題
DBMSは、ファイルベース管理の課題をすべて解決する。
| ファイル管理の課題 | DBMSによる解決 |
|---|---|
| 同時編集ができない | 同時実行制御 で複数人が安全に操作できる |
| データの整合性が保てない | トランザクション管理 でデータの一貫性を保つ |
| 大量データの検索が遅い | インデックス で高速検索を実現する |
| アクセス制御ができない | 権限管理 でデータへのアクセスを制限できる |
| データの復旧が難しい | バックアップ・リカバリ 機能でデータを保護する |
DBMSに対して「データを取得して」「データを追加して」と指示を出すための言語が SQL(Structured Query Language) である。 本教材では、このSQLの書き方を学んでいく。
Step 3: リレーショナルデータベースとは
「表」でデータを管理する
リレーショナルデータベース(RDB) とは、データを テーブル(表) の形式で管理するデータベースである。 現在最も広く使われているデータベースの種類である。
テーブル、行、列
リレーショナルデータベースでは、以下の3つの用語が基本となる。
| 用語 | 別名 | 意味 |
|---|---|---|
| テーブル | 表 | データをまとめた表。1つのテーブルは1種類のデータを管理する |
| 行(レコード) | データの1件分 | テーブルの中の1行が、1件分のデータに対応する |
| 列(カラム) | データの項目 | テーブルの中の1列が、1つのデータ項目に対応する |
例えば、以下のような departments テーブルを見てみよう。
| dept_id | dept_name | location |
|---|---|---|
| 1 | 営業部 | 東京 |
| 2 | 開発部 | 大阪 |
| 3 | 人事部 | 東京 |
- このテーブルは 3行(3つの部門データ)を持っている
- このテーブルは 3列(dept_id, dept_name, location)を持っている
- 各行が1つの部門を表している
テーブル、行、列の関係は Excelのシートに似ている 。 ただし、データベースのテーブルには「型」や「制約」があり、不正なデータを防げるという点が大きく異なる。 これについては第2章で学ぶ。
Step 4: テーブルの例
2つのテーブルの関係
データベースでは、関連するデータを 別々のテーブルに分けて 管理する。
例えば、以下の2つのテーブルを見てみよう。
departments(部門テーブル)
| dept_id | dept_name | location |
|---|---|---|
| 1 | 営業部 | 東京 |
| 2 | 開発部 | 大阪 |
| 3 | 人事部 | 東京 |
employees(社員テーブル)
| emp_id | emp_name | dept_id | hire_date | salary | |
|---|---|---|---|---|---|
| 1 | 田中太郎 | 1 | 2020-04-01 | 350000 | tanaka@example.com |
| 2 | 佐藤花子 | 2 | 2021-04-01 | 400000 | sato@example.com |
| 3 | 鈴木一郎 | 2 | 2022-04-01 | 320000 | suzuki@example.com |
| 4 | 高橋美咲 | 3 | 2023-04-01 | 280000 | takahashi@example.com |
ここで注目すべきは、社員テーブルの dept_id 列である。
この列は、部門テーブルの dept_id を参照しており、社員がどの部門に所属しているかを示す。
このような列を 外部キー と呼ぶ(詳しくは第2章で学ぶ)。
なぜテーブルを分けるのか?
もし1つのテーブルにすべてのデータを入れると、以下の問題が起きる。
| emp_id | emp_name | dept_name | location | salary |
|---|---|---|---|---|
| 1 | 田中太郎 | 営業部 | 東京 | 350000 |
| 2 | 佐藤花子 | 開発部 | 大阪 | 400000 |
| 3 | 鈴木一郎 | 開発部 | 大阪 | 320000 |
- 「開発部」「大阪」が 重複して 保存されている
- 「開発部」を「技術部」に変更するとき、 すべての行を更新 しなければならない
- 1行だけ更新を忘れると、データが 食い違ってしまう
テーブルを分割することで、これらの問題を防げる。 この考え方は 正規化 と呼ばれ、第7章で詳しく学ぶ。
Step 5: OneCompilerでテーブルを見てみよう
OneCompilerの使い方
本教材では、 OneCompiler というオンラインエディタを使ってSQLを実行する。 以下のエディタに表示されているSQLを確認し、「Run」ボタンを押してみよう。
SQLの読み方
上記のSQLで使われている命令を簡単に紹介する。
| SQL命令 | 意味 |
|---|---|
CREATE TABLE | テーブルを作成する |
INSERT INTO | データを追加する |
SELECT * FROM | テーブルの全データを取得する |
今は SELECT * FROM テーブル名; でテーブルの内容を表示できることだけ覚えておこう。
SELECT は「選択する」、 * は「全ての列」、 FROM は「〜から」を意味する。
つまり SELECT * FROM departments; は「departmentsテーブルから全ての列を選択する」という意味である。
Step 6: データベースを使う場面
データベースは、あらゆるソフトウェアの裏側で使われている。
Webアプリケーション
ECサイトやSNSなどのWebアプリケーションでは、ユーザー情報、商品情報、投稿データなどをデータベースに保存している。 本研修で学ぶ Spring + MyBatis の構成では、JavaプログラムからSQLを発行してデータベースを操作する。
スマホアプリ
LINEやTwitterなどのスマホアプリも、サーバー側にデータベースを持っている。 メッセージの送受信履歴、フォロー関係、タイムラインの投稿データなどが保存されている。
業務システム
銀行の口座管理、病院の患者情報管理、物流の在庫管理など、 企業の基幹業務で使われるシステムには必ずデータベースがある。
普段使っているアプリやWebサイトのほとんどが、裏側でデータベースを使っている。 「データを保存して、後から検索したり更新したりする」場面があれば、そこにはデータベースがあると考えてよい。
Step 7: Spring開発での位置づけ
MVCモデルの中でのデータベース
本研修で学ぶSpring Frameworkでは、 MVCモデル というアーキテクチャを使う。 データベースは、このMVCモデルの中で Model(データ) の部分を担当する。
ユーザー → Controller(処理の振り分け)→ Service(ビジネスロジック)→ MyBatis → データベース
↓
ユーザー ← View(画面表示) ← Controller ← Service ← MyBatis ← データベース
MyBatisがSQLとJavaを橋渡しする
Javaプログラムから直接SQLを書くのは大変である。 MyBatis というライブラリが、JavaのメソッドとSQLを対応付けてくれる。
// MyBatisを使うと、Javaのメソッドを呼ぶだけでSQLが実行される
List<Employee> employees = employeeMapper.findAll();
MyBatisについてはDay 18で詳しく学ぶ。 まずはこの章から第9章まで、SQLの基礎をしっかり身につけよう。
Step 8: 実践課題
課題1:身の回りのデータベース
自分の身の回りで、データベースが使われていると思われる場面を 3つ 挙げてみよう。 それぞれについて、「どんなデータが保存されているか」も考えてみよう。
課題2:ファイル管理とDB管理の比較
ファイル管理(Excel)とデータベース管理の違いを、以下の3つの観点で説明してみよう。
- 複数人での同時編集
- データの整合性
- 大量データの検索
まとめ
この章では、 データベースの必要性 について学んだ。
🎯 達成できたこと
- ✅ ファイル管理の課題を説明できるようになった
- ✅ DBMSの主な機能を説明できるようになった
- ✅ テーブル、行、列の概念を説明できるようになった
- ✅ OneCompilerでテーブルの内容を表示できるようになった
📚 学んだ内容
- ファイルベース管理には、同時編集・整合性・検索速度などの限界がある
- DBMS(データベース管理システム)がこれらの課題を解決する
- リレーショナルデータベースは「テーブル(表)」でデータを管理する
- テーブルは「行(レコード)」と「列(カラム)」で構成される
- テーブルを分割して管理することで、データの重複や不整合を防げる
🚀 次のステップ
次の章では、 テーブル設計の基礎 を学ぶ。 「テーブルをどう作るか」「データの正しさをどう保証するか」を理解しよう。
💡 よくある質問
Q1: Excelとデータベースはどちらがよいのか?
A: 用途による。少人数で少量のデータを扱う場合はExcelで十分である。しかし、複数人で大量のデータを安全に扱う必要がある場合は、データベースが適している。業務システムやWebアプリケーションでは、ほぼ確実にデータベースが使われる。
Q2: SQLはプログラミング言語なのか?
A: SQLは「問い合わせ言語(Query Language)」と呼ばれ、一般的なプログラミング言語(Java、Pythonなど)とは性質が異なる。プログラミング言語は「どうやって処理するか(手順)」を記述するが、SQLは「何が欲しいか(結果)」を記述する。このような言語を 宣言型言語 と呼ぶ。
Q3: PostgreSQLとMySQLの違いは何か?
A: どちらもリレーショナルデータベースのDBMSであり、基本的なSQLの書き方は共通している。PostgreSQLは標準SQLへの準拠度が高く高機能、MySQLはシンプルで高速という特徴がある。本教材ではOneCompilerで実行可能なPostgreSQLを使用するが、学んだ知識はMySQLにもそのまま活かせる。
Q4: データベースのデータはどこに保存されるのか?
A: DBMSが動いているサーバーのディスク(ストレージ)に保存される。Excelファイルのように1つのファイルとして見えるわけではなく、DBMSが専用の形式で管理している。バックアップ機能により、データの消失を防ぐこともできる。
練習問題
この章の内容を理解できたか確認しよう。