Skip to main content

データベースの必要性

この章で得られるスキル:

  • ✅ ファイル管理の課題を説明できる
  • ✅ 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オープンソースで高機能。本教材で使用
MySQLWebアプリケーションで広く使われている
Oracle Database大企業の基幹システムで多く採用されている
SQLite軽量で組み込み用途に適している

DBMSが解決する課題

DBMSは、ファイルベース管理の課題をすべて解決する。

ファイル管理の課題DBMSによる解決
同時編集ができない同時実行制御 で複数人が安全に操作できる
データの整合性が保てないトランザクション管理 でデータの一貫性を保つ
大量データの検索が遅いインデックス で高速検索を実現する
アクセス制御ができない権限管理 でデータへのアクセスを制限できる
データの復旧が難しいバックアップ・リカバリ 機能でデータを保護する
DBMSの操作言語:SQL

DBMSに対して「データを取得して」「データを追加して」と指示を出すための言語が SQL(Structured Query Language) である。 本教材では、このSQLの書き方を学んでいく。


Step 3: リレーショナルデータベースとは

「表」でデータを管理する

リレーショナルデータベース(RDB) とは、データを テーブル(表) の形式で管理するデータベースである。 現在最も広く使われているデータベースの種類である。

テーブル、行、列

リレーショナルデータベースでは、以下の3つの用語が基本となる。

用語別名意味
テーブルデータをまとめた表。1つのテーブルは1種類のデータを管理する
行(レコード)データの1件分テーブルの中の1行が、1件分のデータに対応する
列(カラム)データの項目テーブルの中の1列が、1つのデータ項目に対応する

例えば、以下のような departments テーブルを見てみよう。

dept_iddept_namelocation
1営業部東京
2開発部大阪
3人事部東京
  • このテーブルは 3行(3つの部門データ)を持っている
  • このテーブルは 3列(dept_id, dept_name, location)を持っている
  • 各行が1つの部門を表している
ポイント

テーブル、行、列の関係は Excelのシートに似ている 。 ただし、データベースのテーブルには「型」や「制約」があり、不正なデータを防げるという点が大きく異なる。 これについては第2章で学ぶ。


Step 4: テーブルの例

2つのテーブルの関係

データベースでは、関連するデータを 別々のテーブルに分けて 管理する。

例えば、以下の2つのテーブルを見てみよう。

departments(部門テーブル)

dept_iddept_namelocation
1営業部東京
2開発部大阪
3人事部東京

employees(社員テーブル)

emp_idemp_namedept_idhire_datesalaryemail
1田中太郎12020-04-01350000tanaka@example.com
2佐藤花子22021-04-01400000sato@example.com
3鈴木一郎22022-04-01320000suzuki@example.com
4高橋美咲32023-04-01280000takahashi@example.com

ここで注目すべきは、社員テーブルの dept_id 列である。 この列は、部門テーブルの dept_id を参照しており、社員がどの部門に所属しているかを示す。 このような列を 外部キー と呼ぶ(詳しくは第2章で学ぶ)。

なぜテーブルを分けるのか?

もし1つのテーブルにすべてのデータを入れると、以下の問題が起きる。

emp_idemp_namedept_namelocationsalary
1田中太郎営業部東京350000
2佐藤花子開発部大阪400000
3鈴木一郎開発部大阪320000
  • 「開発部」「大阪」が 重複して 保存されている
  • 「開発部」を「技術部」に変更するとき、 すべての行を更新 しなければならない
  • 1行だけ更新を忘れると、データが 食い違ってしまう

テーブルを分割することで、これらの問題を防げる。 この考え方は 正規化 と呼ばれ、第7章で詳しく学ぶ。


Step 5: OneCompilerでテーブルを見てみよう

OneCompilerの使い方

本教材では、 OneCompiler というオンラインエディタを使ってSQLを実行する。 以下のエディタに表示されているSQLを確認し、「Run」ボタンを押してみよう。

-- departments(部門)テーブルの作成 CREATE TABLE departments ( dept_id INTEGER PRIMARY KEY, dept_name VARCHAR(50) NOT NULL UNIQUE, location VARCHAR(50) ); -- employees(社員)テーブルの作成 CREATE TABLE employees ( emp_id INTEGER PRIMARY KEY, emp_name VARCHAR(50) NOT NULL, dept_id INTEGER REFERENCES departments(dept_id), hire_date DATE NOT NULL, salary INTEGER CHECK (salary > 0), email VARCHAR(100) UNIQUE ); -- 部門データの登録 INSERT INTO departments VALUES (1, '営業部', '東京'); INSERT INTO departments VALUES (2, '開発部', '大阪'); INSERT INTO departments VALUES (3, '人事部', '東京'); -- 社員データの登録 INSERT INTO employees VALUES (1, '田中太郎', 1, '2020-04-01', 350000, 'tanaka@example.com'); INSERT INTO employees VALUES (2, '佐藤花子', 2, '2021-04-01', 400000, 'sato@example.com'); INSERT INTO employees VALUES (3, '鈴木一郎', 2, '2022-04-01', 320000, 'suzuki@example.com'); INSERT INTO employees VALUES (4, '高橋美咲', 3, '2023-04-01', 280000, 'takahashi@example.com'); -- 全部門を表示 SELECT * FROM departments; -- 全社員を表示 SELECT * FROM employees;

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つの観点で説明してみよう。

  1. 複数人での同時編集
  2. データの整合性
  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が専用の形式で管理している。バックアップ機能により、データの消失を防ぐこともできる。


練習問題

この章の内容を理解できたか確認しよう。

ExcelやCSVファイルでデータを管理する場合の課題として、最も適切なものを選べ。

正解

A. 複数人が同時にファイルを編集すると、変更が上書きされて消える可能性がある

解説

ファイルベースのデータ管理では、以下のような課題がある。

  • 同時編集ができない: 複数人がExcelを同時に編集すると、後から保存した方の変更で上書きされてしまう
  • データの整合性が保てない: 複数のファイルに同じ情報があると、一方だけ更新されて食い違いが起きる
  • 大量データの検索が遅い: 数万件のデータから条件検索をかけると処理に時間がかかる
  • アクセス制御ができない: 特定の人だけがデータを見られるような制限が難しい

これらの課題は、データベース(DBMS)を使うことで解決できる。

DBMSが提供する機能として正しいものを すべて 選べ。

正解

A. 複数人が同時にデータを操作しても安全に管理できる

B. データへのアクセス権限を設定できる

D. バックアップからデータを復旧できる

解説

DBMS(Database Management System) は、データベースを管理するための専用ソフトウェアである。

主な機能:

  • 同時実行制御: 複数人が安全にデータを操作できる
  • 権限管理: データへのアクセスを制限できる
  • バックアップ・リカバリ: データの保護と復旧ができる
  • トランザクション管理: データの一貫性を保てる
  • インデックス: 大量データの高速検索を実現する

Cの「Excelファイルを自動で作成する」はDBMSの機能ではない。DBMSはExcelとは異なる仕組みでデータを管理する。

テーブル、行(レコード)、列(カラム)の違いを、自分の言葉で説明せよ。

解答例
テーブルはデータを格納する表のこと。行(レコード)は1件のデータを表し、列(カラム)はデータの項目(属性)を表す。
解説

リレーショナルデータベースでは、データを テーブル(表) で管理する。

  • テーブル: データを格納する表。Excelのシートに相当する
  • 行(レコード/ロウ): 1件分のデータ。Excelの1行に相当する
  • 列(カラム): データの項目(属性)。Excelの列見出しに相当する

例えば、社員テーブルの場合:

  • テーブル名: employees
  • 列: 社員ID, 名前, 部門名, 給与
  • 行: 1人分の社員データ(例: 1, 田中太郎, 営業部, 350000

よくある間違い:

  • 「行」と「列」を逆に覚えてしまうケースが多い
  • 行は 横方向(1件のデータ)、列は 縦方向(データの属性)である

以下のサンプルDBの employees テーブルの定義を見て、正しい説明を選べ。

CREATE TABLE employees (
emp_id INTEGER PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
dept_id INTEGER REFERENCES departments(dept_id),
hire_date DATE,
salary INTEGER CHECK (salary > 0),
email VARCHAR(100) UNIQUE
);

正解

A. employees.dept_id は departments.dept_id を参照する外部キーであり、NULLも許可される

解説

employees.dept_idREFERENCES departments(dept_id) で外部キーが設定されているが、 NOT NULL 制約がないためNULLも許可される。部門未所属の社員(渡辺あかり)がその例である。

  • B: 部門ごとの人数を制限する制約は存在しない
  • C: departments.dept_idPRIMARY KEY であるためNULLは禁止される
  • D: employees.salary には CHECK (salary > 0) 制約があるため、0以下の値は入れられない

SQL記述の約束
  • テーブル名・カラム名は 小文字 で入力する(例: employees, dept_id
  • SQLキーワードは 大文字 で入力する(例: SELECT, FROM, WHERE

正しい例: SELECT emp_name FROM employees WHERE dept_id = 1;

employees テーブルの全データを取得するSQL文の空欄を埋めよ。

*
employees;

解答例
SELECT * FROM employees;
解説

SELECT * ですべての列を取得し、FROM テーブル名 でどのテーブルからデータを取得するかを指定する。

基本構文:

SELECT * FROM テーブル名;

ポイント

  • * はすべての列を意味するワイルドカード
  • FROM の後にテーブル名を指定する
  • テーブル名は 小文字 で入力する
  • SELECTFROM などのキーワードは 大文字 で入力する